devops

Hashicorp Vault 서버 배포하기 본문

DevOps/Vault

Hashicorp Vault 서버 배포하기

vata500 2023. 3. 1. 20:50
반응형

체인의 키를 안전하게 관리하기 위해서 많이들 사용하는 Hashicorp의 Vault 배포 과정을 간단히 정리해보려고 한다.

사실 볼트 서버를 올리는 것은 간단하지만, Policy나 Secret Engine을 효율적으로 사용하고, Plugin을 적용하는 과정이 쉽지 않다. (관련해서는 다음 포스팅에 하나씩 정리해보려고 함)

Vault는 튜토리얼에서 dev 버전으로 간단히 올릴 수 있지만, 데이터를 memory에 저장하고 Unseal 상태가 디폴트기 때문에 실제 프로덕션 단계에서는 적합하지 않다. 아래는 실제 환경의 Vault를 배포하는 것을 정리한다.

1. Configuration

Vault 서버의 구성파일을 먼저 작성한다. 아래와 같이 스토리지와 API 요청받을 리스너를 입력해준다.

## config.json

storage "raft" {
  path    = "./vault/data"
  node_id = "node1"
}

listener "tcp" {
  address     = "127.0.0.1:8200"
  tls_disable = "true"
}

api_addr = "http://127.0.0.1:8200"
cluster_addr = "https://127.0.0.1:8201"
ui = true
  • storage : 볼트가 물리적인 백엔드로 사용할 스토리지 설정
  • listener : API 요청을 받을 리스너 설정, TLS가 disable되어 있으나 실제 운용시에는 필수로 적용해야하며 환경변수 VAULT_ADDR에 해당 리스너 URL을 지정해야한다.
  • api_addr : 클라이언트의 요청을 받을 주소
  • cluster_addr : 볼트 노드들 간의 통신을 위해 지정하는 주소와 port

2. Start Server

위 Config 파일에서 Storage의 디렉토리를 생성한다.

$ mkdir -p ./vault/data

config 파일을 적용하여 서버를 실행한다. 여기서 mlock 에러가 발생 시, sudo로 실행하거나 위 config 파일에 disable_mlock = true 를 추가하여 mlock을 disable한다.

$ vault server -config=config.hcl

3. Initializing the Vault

초기화는 서버가 아닌 클러스터 당 한번씩 진행하는 과정으로, encrytion key와 unseal key, initial root token이 생성된다. 터미널 세션 시작을 위해 VAULT_ADDR 환경변수를 지정한다.

$ export VAULT_ADDR='http://127.0.0.1:8200'

이어서 vault을 초기화하는 명령어를 실행한다.

$ vault operator init

다음과 같아 생성된 key와 token이 출력되는 결과화면이 나온다.

Vault는 봉인된 상태가 디폴트로 설정된다. (서버를 종료할때도 기본적으로 sealing됨) 봉인을 해제하기 위해서는 위의 Unseal Key의 5개 중에 3개를 입력해야만 봉인이 해제된다. 이는 특정인 한 명이 서버를 통제하는 것을 막기 위함이다.

Vault를 사용하려면 매번 Unseal 과정이 요구된다. 이는 API, command line을 통해서 진행될 수 있다.

4. Seal/Unseal

봉인 해제를 위해서 아래와 같은 명령어를 사용하면 된다.

$ vault operator unseal

만약 Unseal Key에 유효한 값이 입력되면 아래와 같은 화면이 뜨게된다.

여기서 Total Shares는 Unseal Key 수, Threshold는 Unseal하기 위한 최소한의 Key 수, 그리고 Unseal Progress는 현재 Unseal에 사용된 키 수다.

Unseal이 완료되면 위와 같은 화면이 뜨게된다. 이제 Vault 서버가 Unseal되었기 때문에 접속할 수 있는 상태가 되었다.

$ vault login
 

위 명령어를 입력하면 token을 기입하라는 메시지가 나오는데, 처음 initialize에서 생성된 root token을 입력하면 된다. root token이 유효하면 아래와 같이 로그인되었다는 결과화면이 나오게 된다.

 

반응형
Comments