보안 Best Practices
1️⃣5️⃣ 보안 Best Practices
Vault는 강력한 보안 기능을 제공하지만, 운영자의 보안 수칙 준수가 시스템 전반의 안정성을 좌우합니다. 본 절에서는 Vault 운영 시 반드시 실천해야 할 **보안 모범 사례(Best Practices)**를 소개합니다.
1. Root Token 보관 전략
Vault 초기화 시 생성되는 Root Token은 마스터 키와 같으며, 절대 평문으로 보관하거나 장시간 사용하지 않아야 합니다.
🔐 전략 1: 사용 후 비활성화
vault token revoke <root_token>
→ 운영 중에는 Root Token 사용 없이, 별도 권한 정책의 운영자용 토큰 사용
🛡️ 전략 2: One-time-use 방식 활용
- Root Token은 Vault Unseal, Policy 변경, 긴급 장애 처리용으로만 사용
- 물리적 장치 또는 Password Manager (예: Passbolt, HashiCorp Vault 자체)로 보관
🖼️ 아키텍처 그림
┌────────────┐
│ Vault Init│
└────┬───────┘
▼
┌────────────┐
│ Root Token │──[단기 보관]──▶ 폐기 또는 Secure Store
└────────────┘
2. ACL 최소 권한 원칙 적용 예시
Vault는 세밀한 권한 제어를 위한 Policy 기반 ACL을 제공합니다.
✍️ 최소 권한 정책 예시
# policy: app-db-read.hcl
path "secret/data/app-db" {
capabilities = ["read"]
}
path "auth/token/lookup-self" {
capabilities = ["read"]
}
✅ 적용 명령
vault policy write app-db-read ./app-db-read.hcl
vault token create -policy="app-db-read"
⛔ 안티 패턴
capabilities = ["create", "update", "delete", "list", "read"]
전부 부여 ❌- 모든 path에
sudo
권한 부여 ❌
최소 권한 = 서비스가 딱 필요한 시점, 필요한 작업만 수행 가능하게
3. 시크릿 자동 회전 구성
Vault는 동적 시크릿(Dynamic Secrets) 기능을 통해 자동으로 시크릿 발급/회전을 할 수 있습니다.
🔄 예시: DB Credentials 자동 회전
vault secrets enable database
vault write database/config/mydb \
plugin_name=mysql-database-plugin \
connection_url="{{username}}:{{password}}@tcp(mysql:3306)/" \
allowed_roles="readonly"
vault write database/roles/readonly \
db_name=mydb \
creation_statements="CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}'; GRANT SELECT ON *.* TO '{{name}}'@'%';" \
default_ttl="1h" \
max_ttl="24h"
→ 애플리케이션이 접근할 때마다 새 사용자와 패스워드 자동 발급 + TTL 만료 시 제거
📦 아키텍처 흐름
[App] ──▶ Vault ──▶ [MySQL Plugin] ──▶ DB 유저 생성
▲
TTL 지나면 자동 제거
인프라 보안 담당자는 정기 감사 없이도 시크릿 노출 가능성을 줄일 수 있음
4. 인증 Backends 정기 감사
Vault는 다양한 인증 방식을 지원합니다 (GitHub, LDAP, Kubernetes 등). 하지만 오래된 정책, 미사용 사용자, 방치된 인증 방법은 보안 리스크가 됩니다.
🧾 정기 점검 항목
점검 항목 | 명령어 | 설명 |
---|---|---|
활성화된 Auth 목록 | vault auth list |
불필요한 Auth 제거 |
사용자 목록 조회 | vault list auth/userpass/users |
정기적 비활성화 확인 |
Token 만료 정책 | vault token list |
만료되지 않은 토큰 필터링 |
인증 방식 보안성 | OAuth/LDAP의 2FA 적용 여부 | 외부 인증 시스템 점검 필요 |
🔒 예: LDAP 백엔드 정기 감사
vault list auth/ldap/users
vault read auth/ldap/user/devops
비활성 사용자 삭제, OU 변경 적용 여부 등 정기 검토
🧠 요약 정리
보안 항목 | 핵심 전략 |
---|---|
🔐 Root Token | 짧게 보관, 사용 후 폐기 |
🔏 최소 권한 | 서비스별 세분화된 정책 적용 |
🔄 자동 회전 | DB, 클라우드 키 등은 TTL 기반 회전 |
🔍 인증 점검 | LDAP, Kubernetes 인증 상태 정기 감사 |
🖼️ 전체 아키텍처 요약 다이어그램
[Vault]
▲
┌──────────┼────────────┐
│ │
[Audit + ACL] [Dynamic Secrets]
│ │
Syslog DB/Cloud IAM/Cert
│ │
[Prometheus] [TTL 기반 회전]
│
[Grafana + Alerts]
→ 인증 Backend: LDAP, GitHub, JWT 등 정기 검토
→ Root Token은 사용 후 폐기, 최소 권한 정책 유지
마지막 수정일자