이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

Tool 사용법/SSH

HashiCorp Vault Container로 실행

이쿠우우 2022. 4. 7. 20:32
반응형

 

 

 

HashiCorp Vault Container로 실행

 
 

목표

Hashcorp vault를 docker 또는 kubernetes에서 사용가능하도록
Container로 실행하는 방법을 알아봄.
목표는 Docker를 사용해서 HashiCorp vault server를 실행하는 것.
각각 dev 방식과 server 방식으로 container를 실행해봄.
 
참고 : 2022.02월 기준 HashiCorp vault container latest version : 1
 
 
 

사전 작업

 

docker 설치

yum update -y
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y docker-ce
systemctl start docker
systemctl enable docker.service
 
 

 

HashiCorp Vault dev server로 container 기동

 
 

hashicorp vault container pull

[명령어]
docker pull vault

 

 
[vault container 링크]
 
 

hashicorp vault container dev 모드로 실행

 
[명령어]
docker run --cap-add=IPC_LOCK -d  -e 'VAULT_DEV_ROOT_TOKEN_ID=qwer1234'  -e 'VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200'  -p 8200:8200  --name=dev-vault vault

vault container 실행 시 명령을 "vault" 만 입력하면 dev 옵션으로 실행됨.

 

[-dev 옵션 설명]
vault 테스트 서버로 구동하는 옵션으로
프로덕션 모드에서는 이 옵션 사용을 권장하지 않음.
미리 준비된 설정으로 서버를 구동.
모든 데이터는 in-memory 저장.
암호화.
localhost 로 listen 되며 TLS 가 없음.
자동 봉인 해제.
봉인 해제된 키와 엑세스 토큰을 보여줌.
 
[VAULT_DEV_ROOT_TOKEN_ID=qwer1234 옵션 설명]
dev vault server에 login하기 위한 token을 미리 전달.
이후 vault server 접속 시 VAULT_TOKEN 환경 변수 값으로 사용함.
 
[VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200 옵션 설명]
dev vault server에서 접근할 수 있는 ip 대역을 설정.
 
 
 

hashicorp vault container 접속 및 login

 
[명령어]
docker exec -it  dev-vault sh
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN="qwer1234"

 
결과를 보면 VAULT_ADDR, VAULT_TOKEN 환경 변수 설정 이후에 
정상 접속 되는 것을 확인할 수 있음.
 
 

hashicorp vault secret 생성 

 
vault_test 이름의 secret을 생성
 
[명령어]
vault secrets enable -path="vault_test" -description="test dev vault server"  kv
vault secrets list

 
 

hashicorp vault secret key value 생성 

 
[명령어]
vault kv put vault_test/keypair id=test password=qwer1234

 
[key value 생성 확인]
vault kv get vault_test/keypair

 
[value 확인]
vault kv get -field=id vault_test/keypair 
vault kv get -field=password vault_test/keypair 

 

 

 
 
 

 
 

HashiCorp Vault server container 기동

 
vault server를 dev mode로 기동하게 되면 
data를 memory에 저장하기 때문에
container를 재기동 하게되면 data가 모두 날라감.
그래서 실제 운영 시 vault를 사용하기 위해서는 server mode로 기동해야함.
server mode 기동 방법에 대해 알아보도록 함.
 
vault server의 data를 Host의 
~/hashicorpVault/volume
directory에 저장하도록함.
 
해당 directory를 vault container에 mount해서 
host의 ~/hashicorpVault/volume 경로에 
vault data가 유지되도록 진행해봄.
 
참고) 
본 test에서는 ~/hashicorpVault/volume directory에 vault data를 저장하지만
운영 시 해당 경로를 AWS s3로 대체할 수도 있음.
 
 

hashicorp vault 작업 directory 생성 

 
[명령어]
mkdir  ~/hashicorpVault
cd ~/hashicorpVault
touch docker-compose.yml
mkdir -p ~/hashicorpVault/volumes/{config,file,logs}
 
[결과]

 

 
해당 directory를 vault container에 mount할 것임
 
 
 

hashicorp vault 설정 파일 생성

 
[명령어]
cat > volumes/config/vault.json << EOF
{
  "backend": {
    "file": {
      "path": "/vault/file"
    }
  },
  "listener": {
    "tcp":{
      "address": "0.0.0.0:8200",
      "tls_disable": 1
    }
  },
  "ui": true
}
EOF
 
[backend 옵션 설명]
file/path 설정이 vault data 저장 경로임.
해당 경로는 vault container 내부에서의 경로로 생각해줘야함.
 
[listener 옵션 설명]
vault server에서 접근할 수 있는 ip 대역을 설정.
 
 

hashicorp vault container 실행 docker compose 작성

 
[명령어]
cat > docker-compose.yml << EOF
version: '2'
services:
  vault:
    image: vault
    container_name: vault
    ports:
      - "8200:8200"
    restart: always
    volumes:
      - ./volumes/logs:/vault/logs
      - ./volumes/file:/vault/file
      - ./volumes/config:/vault/config
    cap_add:
      - IPC_LOCK
    entrypoint: vault server -config=/vault/config/vault.json
EOF
 
[tree 구조 확인]

 
 

hashicorp vault container pull

 
[명령어]
docker pull vault
 
[vault container 링크]
 
 

hashicorp vault container 실행(server mode)

 
cd ~/hashicorpVault
 
[명령어]
docker-compose up -d

 
 
 

hashicorp vault container 접속

[명령어]
docker exec -it  vault sh
export VAULT_ADDR='http://127.0.0.1:8200'

 
 

vault server 상태 확인

 
[명령어]
vault status -format=json

 
상태를 확인해보면 server가 
"sealed": true
로 봉인된 상태임을 확인할 수 있음.
정상적으로 사용하기 위해서 해당 봉인을 풀어야함.
 
 

hashicorp vault 초기화 (Initialize)

-dev 모드와 다르게 vault를 사용 하려면 초기화 필요
초기화 없이 cli를 사용하게 될 경우 봉인 오류가 발생
 
[명령어]
vault operator init -key-shares=6 -key-threshold=3
 
[결과]
unseal key 정보와
Initial Root Token 정보를 별도로 저장하고 있어야함.

 
 
 

hashicorp vault 봉인 해제 (unseal)

vault server의 봉인을 풀려면 3개의 Unseal 키를 입력해야함.
 
[명령어]
vault operator unseal [unseal key 정보]
3개 key 입력
 
[결과]
3개의 unseal key를 입력하면 봉인이 해제되는 것을 확인할 수 있음.

 
 
 

hashicorp vault server login

 
상위에서 확인했던
Initial Root Token으로 login함.
 
[명령어]
vault login s.8UbfZA66XUn2tHMALADqTTdP

 
 
 

hashicorp vault secret 생성 

vault_test 이름의 secret을 생성
 
[명령어]
vault secrets enable -path="vault_test" -description="test vault server"  kv
vault secrets list

 

hashicorp vault secret key value 생성 

 
[명령어]
vault kv put vault_test/keypair id=test password=qwer1234

 
[key value 생성 확인]
vault kv get vault_test/keypair

 
[value 확인]
vault kv get -field=id vault_test/keypair 
vault kv get -field=password vault_test/keypair 

 
 
 

hashicorp vault container 재기동 test

 
container를 종료했다가
mount했던 ~/hashicorpVault/volume
정보 그대로 vault를 다시 실행하면
vault server는 봉인되어 있음.
 
해당 봉인을 해제하기 위해 다시 
이전에 저장했던 unseal key 정보로 
vault operator unseal [unseal key 정보]
3개 key 입력하면 봉인이 해제됨.
 
이후 
vault login 명령 이후 
key/value 값을 확인해보면 기존 값이 그대로 유지되어있음.
 
 

 
test 완료.
 

 
참고

 

반응형

'Tool 사용법 > SSH' 카테고리의 다른 글

SSH authorized_keys 파일 설정  (0) 2022.04.15
HashiCorp Vault를 이용한 SSH 공개키 인증  (0) 2022.02.05
AWS EC2 SSH  (0) 2022.01.27
SSH란?  (0) 2022.01.27