Vault 설치 및 초기 구성
3️⃣ Vault 설치 및 초기 구성
HashiCorp Vault를 제대로 이해하려면, 먼저 직접 설치하고 실행해보는 경험이 가장 중요합니다.
이번 파트에서는 개발용 Standalone 모드, HA 구성 개요, Kubernetes 설치, 그리고 초기화 & unseal 실습까지 다룹니다.
1. Standalone 모드 설치 (개발 테스트용)
이 모드는 학습 및 로컬 테스트에 적합하며, 단일 Vault 서버가 로컬 스토리지에 데이터를 저장합니다.
가볍고 빠르지만, 프로덕션 용도로는 적합하지 않습니다.
📦 설치 및 실행 예제 (Linux 기준)
# 1. Vault 설치
wget https://releases.hashicorp.com/vault/1.15.3/vault_1.15.3_linux_amd64.zip
unzip vault_1.15.3_linux_amd64.zip
sudo mv vault /usr/local/bin/
# 2. 개발 모드 실행
vault server -dev
💡 개발 모드에서는 Vault가 자동으로 초기화되고 Unseal 되어, 학습이 매우 쉬워집니다.
📘 접속 테스트
export VAULT_ADDR=http://127.0.0.1:8200
export VAULT_TOKEN=<출력된 root token>
vault status
vault kv put secret/hello value=world
vault kv get secret/hello
🖼️ 구조도
+-----------+
| Client |
+-----+-----+
|
v
+-----+------+
| Vault Core |
| - Dev Mode |
+------------+
|
v
+-------------+
| File Storage|
+-------------+
2. HA 모드 구성 개요 (Raft, Consul 백엔드)
프로덕션 환경에서는 당연히 고가용성(HA) 이 필수입니다.
Vault는 다음과 같은 스토리지 백엔드를 통해 HA 구성을 지원합니다.
🔹 Option 1: Integrated Storage (Raft)
- Vault 자체에 내장된 Raft 기반 스토리지
- 외부 종속성 없고 구성 간단
- 추천
🔹 Option 2: Consul 백엔드
- Vault는 데이터를 Consul에 저장하고, Consul이 리더 선출 및 HA를 관리
- 기존에 Consul 사용 중이라면 유리
🖼️ HA 아키텍처 개요
+-------------+
| Clients |
+------+------+
|
+--------------v--------------+
| Load Balancer (LB) |
+--------+-----------+-------+
| |
+-------v--+ +----v-------+
| Vault #1 | | Vault #2 |
| (Leader) | | (Follower) |
+----------+ +------------+
|
+-------v-------+
| Raft/Consul DB|
+---------------+
📘 간단한 Raft 구성 예시
# vault.hcl
storage "raft" {
path = "/opt/vault/data"
node_id = "vault-node-1"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 1
}
api_addr = "http://<your-vault-ip>:8200"
cluster_addr = "http://<your-vault-ip>:8201"
3. Helm Chart를 통한 Kubernetes 설치
Vault는 공식적으로 Helm Chart를 통해 Kubernetes 클러스터에 쉽게 설치할 수 있습니다.
✅ 필수 조건
- Helm 설치
- Kubernetes 클러스터 접근 가능 (e.g., minikube, EKS, GKE 등)
📦 설치 예제
helm repo add hashicorp https://helm.releases.hashicorp.com
helm install vault hashicorp/vault \
--set "server.dev.enabled=true"
📘 설치 후 상태 확인
kubectl get pods
kubectl exec -it vault-0 -- vault status
💡 dev 모드이므로 자동 초기화 및 unseal 상태입니다.
🖼️ K8s 구조도
+-------------------+
| K8s Client (kubectl) |
+-------------------+
|
+------v------+
| Vault Pod |
+-------------+
|
+-----v------+
| EmptyDir / Ephemeral Storage |
+-----------------------------+
4. 초기화(Init), Unseal 프로세스 실습
Vault는 보안 강화를 위해 초기화 후, Unseal 키를 나눠 보관합니다.
이 키 없이는 Vault의 Master Key가 활성화되지 않으며, 따라서 사용할 수 없습니다.
📦 초기화 (Init)
vault operator init
Unseal Key 1: xxxxx
Unseal Key 2: yyyyy
Unseal Key 3: zzzzz
...
Initial Root Token: s.mega-secure-root-token
📘 주의: 이 키들을 안전하게 백업하시오!
📦 Unseal 명령
vault operator unseal <key1>
vault operator unseal <key2>
vault operator unseal <key3>
기본적으로 5개의 키 중 3개가 필요합니다 (
key threshold
= 3)
🖼️ Init → Unseal 플로우
+--------------------+
| vault operator init|
+--------------------+
|
v
+----------------------------+
| Shamir Secret Shares (5) |
| + Threshold (3) |
+----------------------------+
|
v
+---------------------+
| vault operator unseal|
+---------------------+
|
v
+---------------------+
| Vault becomes active|
+---------------------+
📍 정리 요약
항목 | 설명 |
---|---|
Standalone 모드 | 빠른 개발 테스트용 로컬 실행 |
HA 구성 | Raft 또는 Consul로 구성 가능, 실제 운영 환경용 |
Kubernetes 설치 | Helm Chart 이용해 K8s 환경에 손쉽게 설치 가능 |
Init / Unseal | 시크릿 보호를 위한 보안 절차 필수 이해 항목 |