보안 Best Practices

보안 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은 사용 후 폐기, 최소 권한 정책 유지

RSS Feed
마지막 수정일자