Post

HashiCorp Vault로 Kubernetes 시크릿 관리

Vault를 활용해 K8s 시크릿을 안전하게 관리하는 방법 정리

HashiCorp Vault

개념 설명:

Centralize secret management, rotate old credentials, generate credentials on demand, audit client interactions, and support regulatory compliance.
공식문서
비밀(Secrets) 관리를 중앙화하고, 오래된 자격 증명을 교체하며, 필요 시 자격 증명을 생성하고, 클라이언트의 상호작용을 감사하며, 규제 준수를 지원

The kubernetes auth method can be used to authenticate with Vault using a Kubernetes Service Account Token. This method of authentication makes it easy to introduce a Vault token into a Kubernetes Pod.
공식문서 - Kubernetes 인증 방법
Kubernetes 인증 방법은 Kubernetes 서비스 계정 토큰을 사용하여 Vault에 인증하는 데 사용가능
즉, Kubernetes 파드에 Vault 토큰을 쉽게 주입할 수 있음

  • vs Kubernetes Secret:
    K8s 기본 Secret은 base64 인코딩만 제공해 보안에 취약함. Vault는 암호화, 접근 정책, 감사 로그 등 보안이 강화됨.
  • vs AWS Secrets Manager:
    클라우드 종속적인 AWS에 비해 Vault는 온프레미스나 멀티 클라우드 환경에서 유연함.

  • 사용 방법:

1) Vault 설치 및 Dev 서버 실행

1
vault server -dev

2) Vault CLI 초기화 및 토큰 설정

1
2
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN='root'

3) 시크릿 저장 예시

1
vault kv put secret/enginrect-db password="MyS3cretPassword"

4) Kubernetes 인증 메서드 활성화

1
vault auth enable kubernetes

5) Vault에 Kubernetes 관련 설정 추가

1
2
3
4
vault write auth/kubernetes/config \
  token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
  kubernetes_host="https://kubernetes.default.svc" \
  kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt

6) Policy 생성 (예: enginrect-app 전용)

1
2
3
4
# enginrect-policy.hcl
path "secret/data/enginrect-app/*" {
  capabilities = ["read"]
}
1
vault policy write enginrect-policy enginrect-policy.hcl

7) Kubernetes ServiceAccount에 권한 연결

1
2
3
4
5
vault write auth/kubernetes/role/enginrect-role \
  bound_service_account_names=enginrect-sa \
  bound_service_account_namespaces=default \
  policies=enginrect-policy \
  ttl=1h
  • 애플리케이션에서 Vault 에이전트 주입 또는 API 호출 방식으로 시크릿을 가져올 수 있음.
This post is licensed under CC BY 4.0 by the author.