🔍 왜 Vault-K8s 인증이 중요한가?
기존 Kubernetes에서는 시크릿을 Secret 리소스로 만들어서 직접 마운트하거나 환경 변수로 주입합니다. 그러나 이 방식은 다음과 같은 보안 리스크를 내포합니다:
• 시크릿이 K8s 내에 영구 저장되어 있음
• 누가 접근했는지 감사 불가능
• 환경별 권한 분리 미비 (dev → prod 누출 가능성)
• 장기 토큰 사용으로 노출 시 리스크 극대화
HashiCorp Vault의 Kubernetes 인증 기능을 활용하면, 다음을 모두 해결할 수 있습니다:
• K8s 서비스 계정 기반 동적 인증
• Vault 정책 기반 권한 제어
• Vault Agent Injector로 Pod 수준 자동 시크릿 주입
• TTL(수명) 기반 시크릿 자동 소멸 및 갱신
⸻
🏗️ 아키텍처 요약
Kubernetes ↔ Vault (auth/kubernetes)
│
├─ Pod → ServiceAccount 토큰으로 Vault 로그인
│ └→ Vault Agent Injector가 사이드카로 주입
│ └→ /vault/secrets 경로로 시크릿 자동 마운트
│
└─ Vault Policy → 특정 경로만 접근 허용
⸻
🔑 주요 구성 요소
구성요소 설명
Vault Auth Method auth/kubernetes 활성화
Vault Policy ServiceAccount 전용 접근 권한
Vault Agent Injector Pod 생성 시 자동으로 사이드카 주입
Dynamic Secrets RDS, MongoDB, AWS IAM 자격증명 등 동적 생성
TTL Secret 자동 만료 및 회전 설정
⸻
📜 Vault 구성 예시
1. Kubernetes 인증 활성화
vault auth enable kubernetes
2. Kubernetes CA 및 API 정보 입력
vault write auth/kubernetes/config \
token_reviewer_jwt="$SA_JWT" \
kubernetes_host="https://$K8S_HOST" \
kubernetes_ca_cert="$K8S_CA"
3. Role 생성 (서비스계정 바인딩)
vault write auth/kubernetes/role/my-app \
bound_service_account_names=my-app-sa \
bound_service_account_namespaces=default \
policies=my-app-policy \
ttl=1h
4. Policy 작성
# my-app-policy.hcl
path "secret/data/my-app/*" {
capabilities = ["read"]
}
vault policy write my-app-policy my-app-policy.hcl
⸻
🤖 Vault Agent Injector 사용: 자동 시크릿 주입
1. Vault Agent Injector Helm 설치
helm repo add hashicorp https://helm.releases.hashicorp.com
helm install vault hashicorp/vault \
--set "injector.enabled=true"
2. Annotated Pod 예시
apiVersion: v1
kind: Pod
metadata:
name: my-app
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: "my-app"
vault.hashicorp.com/agent-inject-secret-db-creds: "secret/data/my-app/db"
spec:
serviceAccountName: my-app-sa
containers:
- name: app
image: myregistry/myapp:latest
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: vault-secret
key: db
이렇게 하면 secret/data/my-app/db 경로에서 시크릿을 읽어 Pod 내부 /vault/secrets/db-creds 경로로 주입합니다.
⸻
⏳ TTL 기반 자동 만료 및 갱신
Vault는 시크릿마다 TTL을 설정할 수 있어, 일정 시간이 지나면 자동 소멸합니다.
• Pod 재시작 시 Vault 재로그인 → 최신 시크릿 자동 주입
• renew 설정 시 주기적으로 자동 갱신
이는 장기 토큰을 제거하고 보안 사고 시 노출 범위를 최소화하는 데 핵심입니다.
⸻
🧠 결론
Vault와 Kubernetes를 통합한 이 구조는 단순한 시크릿 관리 수준이 아니라:
• 보안성 (노출 최소화, 동적 시크릿)
• 자동화 (Pod 생성 시점에 주입)
• 유지보수 편의성 (TTL, 정책, 갱신 관리)
을 모두 아우릅니다.
이 구조는 실제로 Netflix, Shopify, Datadog 등에서 이미 운영 중이며,
Zero Trust 아키텍처의 기본 구성 요소로 자리잡고 있습니다.
IT & Tech 정보
🔐 HashiCorp Vault + Kubernetes 동적 인증 완전 자동화: 서비스 계정으로 인증 받고 TTL 기반 시크릿 자동 주입까지
반응형
반응형