HashiCorp Vault는 시크릿(암호, API 키, 인증서)을 안전하게 저장·관리·배포하는 도구다. 동적 시크릿 생성, 암호화 서비스, 감사 로그를 제공한다.
Vault 주요 기능
| 기능 | 설명 |
|---|
| 정적 시크릿 | KV 스토어로 시크릿 저장/조회 |
| 동적 시크릿 | DB, AWS, GCP 임시 자격증명 자동 생성 |
| 암호화 서비스 | Transit 엔진으로 데이터 암호화/복호화 |
| PKI | 인증서 자동 발급 및 갱신 |
| 인증 | Kubernetes, AWS IAM, OIDC, LDAP 등 |
KV 시크릿 엔진
bash
# KV v2 활성화
vault secrets enable -path=secret kv-v2
# 시크릿 저장
vault kv put secret/myapp/database username="dbuser" password="s3cr3t"
# 시크릿 조회
vault kv get secret/myapp/database
vault kv get -format=json secret/myapp/database | jq '.data.data'
# 시크릿 버전 롤백
vault kv rollback -version=2 secret/myapp/database
동적 데이터베이스 시크릿
bash
# DB 엔진 활성화 및 설정
vault secrets enable database
vault write database/config/my-postgresql plugin_name=postgresql-database-plugin allowed_roles="readonly,readwrite" connection_url="postgresql://{{username}}:{{password}}@postgres:5432/mydb" username="vault-admin" password="vault-password"
# 역할 정의 (TTL 1시간)
vault write database/roles/readonly db_name=my-postgresql creation_statements="CREATE ROLE "{{name}}" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO "{{name}}";" default_ttl=1h max_ttl=24h
# 동적 자격증명 발급
vault read database/creds/readonly
python
import hvac
client = hvac.Client(url='https://vault.company.com:8200')
# Kubernetes 인증
client.auth.kubernetes.login(
role='my-app',
jwt=open('/var/run/secrets/kubernetes.io/serviceaccount/token').read(),
)
# 시크릿 읽기
secret = client.secrets.kv.v2.read_secret_version(
path='myapp/database',
mount_point='secret',
)
db_password = secret['data']['data']['password']
# Transit 암호화
encrypted = client.secrets.transit.encrypt_data(
name='my-key',
plaintext=b64encode(b'sensitive data').decode(),
)
ciphertext = encrypted['data']['ciphertext']