비밀(Secret)을 안전하게 저장, 접근 제어, 감사 로깅까지 제공하는 엔터프라이즈급 시크릿 관리 도구입니다. 데이터베이스 자격증명, API 토큰, TLS 인증서, 암호화 키 등 민감 정보를 중앙에서 관리하며, 동적 시크릿과 암호화 서비스를 통해 보안 운영을 자동화합니다.
암호화된 저장소에 시크릿을 보관하며, 세분화된 정책으로 접근 통제. KV, 데이터베이스, PKI 등 다양한 시크릿 엔진 지원.
요청 시점에 임시 자격증명을 생성 (예: DB 패스워드, AWS IAM). 사용 후 자동 만료, 유출 위험 최소화.
애플리케이션에서 Vault의 암호화/복호화 API를 호출하여 데이터를 안전하게 보호. 키 관리 부담 제거.
기존 시크릿 관리 방식 (환경변수, Git 저장소, ConfigMap)은 정적이며 유출 시 피해가 큽니다. Vault는 중앙 감사, 자동 로테이션, 세분화된 정책을 제공합니다.
| 비교 항목 | Vault | 환경변수 / ConfigMap | AWS Secrets Manager |
|---|---|---|---|
| 동적 시크릿 | ✅ 탁월 | ❌ 불가 | ⚠️ 제한적 |
| 암호화 서비스 | ✅ 내장 | ❌ | ❌ (KMS 별도) |
| 정책 엔진 | ✅ 세분화 | ❌ | ✅ IAM 기반 |
| 감사 로그 | ✅ 상세 | ❌ | ✅ CloudTrail |
| 온프레미스 | ✅ 가능 | ✅ | ❌ 클라우드 전용 |
Vault의 아키텍처는 크게 스토리지 백엔드, 시크릿 엔진, 인증 방법, 정책으로 구성됩니다.
Token, Kubernetes, JWT/OIDC, LDAP, AWS IAM 등 다양한 인증 방법으로 Vault에 로그인.
HCL 기반 ACL 규칙. 경로별 read/write/list/deny 권한을 세밀하게 제어.
KV(v1/v2), 데이터베이스, AWS, Azure, GCP, PKI, Transit, TOTP 등 30+ 엔진.
로컬 개발 환경에서 Vault를 설치하고 첫 시크릿을 읽고 씁니다.
# macOS (Homebrew)
brew install vault
# Linux (apt)
sudo apt update && sudo apt install vault
# 설치 확인
vault version
vault server -dev -dev-root-token-id="root"
# CLI: 시크릿 쓰기
vault kv put secret/hello foo=bar hello=world
# CLI: 시크릿 읽기
vault kv get secret/hello
Python 예제 (hvac 라이브러리)
import hvac
client = hvac.Client(url='http://127.0.0.1:8200', token='root')
# 시크릿 쓰기
client.secrets.kv.v2.create_or_update_secret(
path='hello', secret=dict(foo='bar', hello='world'), mount_point='secret'
)
# 시크릿 읽기
read = client.secrets.kv.v2.read_secret_version(path='hello', mount_point='secret')
print(read['data']['data'])
# {'foo': 'bar', 'hello': 'world'}
| 설정 항목 | 설명 | 예시 값 |
|---|---|---|
storage | 스토리지 백엔드 (raft, consul, file) | raft { path = "./vault/data" } |
listener | TCP 리스너 주소, TLS 설정 | tcp { address = "0.0.0.0:8200" tls_disable = true } |
api_addr | 클라이언트가 접근할 API 주소 | http://vault.example.com:8200 |
seal | 봉인/언봉용 마스터 키 보호 (shamir, aeskms) | shamir { secret_shares = 5 threshold = 3 } |
audit | 감사 로그 장치 (file, syslog, socket) | file { file_path = "/var/log/vault_audit.log" } |
| 문제 | 원인 / 해결 |
|---|---|
❌ vault write 시 "permission denied" | 정책(path) 부족 → vault policy write로 ACL 추가 |
| ❌ 시크릿이 갑자기 사라짐 | KV v2에서 삭제/메타데이터 문제 → vault kv metadata get 확인 |
| ❌ Vault 봉인 (sealed) 상태 | 재시작 후 언봉 필요 → vault operator unseal (threshold 개수) |
| ❌ Python hvac 연결 실패 | Vault 주소/토큰 오류, TLS 검증 → verify=False (개발용) |
| ❌ 동적 DB 시크릿 만료 | TTL 기본 1h → lease 기간 조정: max_ttl=24h |