실무 시나리오 예제
1️⃣ + Microservice 구조에서 Vault 활용
1. 시나리오 개요
Microservice 아키텍처에서는 서비스 간 통신과 외부 시스템 접근에 다양한 시크릿(비밀번호, API 키, 인증서 등)이 필요합니다. Vault는 이 시크릿을 중앙 집중식으로 관리하고, 각 마이크로서비스에 안전하게 전달합니다.
2. 아키텍처 다이어그램
[ Vault Server ]
|
└──> Kubernetes (Vault Agent Injector 사용)
├── service-a (DB 접속 토큰 주입)
├── service-b (API key 주입)
└── service-c (TLS 인증서 주입)
⬇️ 실제 예:
apiVersion: apps/v1
kind: Deployment
metadata:
name: service-a
spec:
template:
metadata:
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "service-a-role"
vault.hashicorp.com/agent-inject-secret-db-creds.txt: "secret/data/db/service-a"
spec:
containers:
- name: app
image: myapp:latest
volumeMounts:
- mountPath: "/vault/secrets"
name: vault-secrets
volumes:
- name: vault-secrets
emptyDir: {}
2️⃣ + DB 접근 관리 자동화
1. 동적 시크릿(Dynamic Secrets) 사용
Vault는 RDBMS(MySQL, PostgreSQL 등)에 직접 연결해 임시 사용자를 생성하고, TTL 이후 자동 삭제되도록 설정할 수 있습니다.
2. 실제 예:
vault secrets enable database
vault write database/config/my-postgres \
plugin_name=postgresql-database-plugin \
allowed_roles="app-role" \
connection_url="postgresql://vaultuser:vaultpass@db.example.com:5432/postgres?sslmode=disable"
vault write database/roles/app-role \
db_name=my-postgres \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}';" \
default_ttl="1h" \
max_ttl="24h"
✔️ 이 구성을 통해 앱이 Vault에 요청 시 자동으로 임시 계정이 발급됩니다.
3️⃣ + GitOps 기반 Vault 구성 예시
1. Helm + GitOps (ArgoCD) 기반 Vault 관리
Vault의 정책, 시크릿, 인증 설정도 Git에서 관리할 수 있습니다. GitOps 방식은 변경 이력을 관리하고 PR 리뷰를 통해 보안을 강화할 수 있습니다.
2. 예시 구성:
[ Git Repository ]
├── vault-policies/
│ └── app-policy.hcl
├── vault-secrets/
│ └── db-service-a.yml
└── argo-cd-apps/
└── vault-app.yaml
ArgoCD는 이 Git Repo를 감시하여 Vault에 선언적으로 적용합니다.
4️⃣ + Cross-Cluster Secrets 구성
1. 시나리오
멀티 클러스터 환경에서 하나의 Vault 인스턴스(혹은 복제본)를 여러 클러스터에서 사용할 수 있습니다. 이를 위해 External Secrets Operator 혹은 Vault CSI Provider를 활용합니다.
2. 구성도
[ Vault Server ]
├── EKS-Cluster-A → External Secrets Operator
└── GKE-Cluster-B → CSI Provider
🔑 Vault를 중앙 집중화하고 각 클러스터는 인증 토큰을 통해 필요 시 시크릿을 요청합니다.
3. 예시 - External Secrets 사용
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: app-secret
spec:
secretStoreRef:
name: vault-backend
kind: ClusterSecretStore
target:
name: app-secret
creationPolicy: Owner
data:
- secretKey: password
remoteRef:
key: secret/data/db/service-a
property: password
✅ 요약
항목 | 설명 |
---|---|
Microservice 연동 | Vault Agent Injector를 사용한 자동 시크릿 주입 |
DB 접근 자동화 | Dynamic Secrets로 RDB 접근 자동 관리 |
GitOps 구성 | Git + ArgoCD로 Vault 정책 및 시크릿 관리 |
Cross Cluster | 여러 클러스터에서 중앙 Vault 시크릿 접근 가능 |
📌 실무에서 Vault를 도입한다면?
- 개발 환경 → 개발자용 정책 최소화된 Role
- 운영 환경 → Audit 활성화 + 접근 토큰 TTL 제한
- 멀티 클러스터 → External Secrets or CSI 활용
마지막 수정일자