Vault KMS 모범 사례
Vault KMS 모범 사례 (Best practices)
Vault Kubernetes Key Management를 안전하게 사용하기 위한 모범 사례를 정리합니다.
출처: 문서
본문
베타 기능이에요. 베타 기능은 안정적이지만 아직 불완전할 수 있고 변경될 수 있어요. 프로덕션 Vault 배포에 베타 기능을 쓰는 것은 권장하지 않습니다.
Vault Kubernetes Key Management를 안전하게 사용하려면 다음 모범 사례를 고려하세요.
가능한 가장 작은 쿠버네티스 표면 사용
- 스태틱 파드(Static Pod)로 배포 — 각 컨트롤 플레인 노드에서 vault-kube-kms 프로세스를 스태틱 파드로 실행해요.
- 최소 컨테이너 이미지 사용 — 프로세스 바이너리와 필요한 인증서만 담은 distroless 또는 UBI 기반 이미지로 배포해요.
- 노드 접근 제한 — 컨트롤 플레인 노드에 대한 SSH와 콘솔 접근을 인가된 관리자로만 제한해요.
- 네트워크 정책 적용 — 쿠버네티스 네트워크 정책을 적용해 vault-kube-kms 프로세스가 Vault 엔드포인트에만 접근할 수 있게 제한해요.
Vault 접근에 대한 세밀한 제어 사용
- 최소 권한 정책 사용 — Transit 플러그인에 필요한 최소한의 권한 집합을 부여해요. 예:
path "/encrypt/" {
capabilities = ["create", "update"]
}
path "/decrypt/" {
capabilities = ["create", "update"]
}
path "/keys/" {
capabilities = ["read"]
}
path "sys/license/status" {
capabilities = ["read"]
}
- AES-256-GCM96 암호화 사용 — 인증 암호화를 위해 Transit 키를
aes256-gcm96타입으로 구성해요. - 키 버전 관리를 활성화 — 올바른 키 회전 지원을 위해 키 버전 관리를 반드시 활성화해야 해요.
- 키 암호화 키를 정기적으로 회전 — 쿠버네티스 프로젝트 권장사항에 따라 Transit 키를 적어도 90일마다 회전해요.
- Vault 네임스페이스 사용 — 멀티 테넌트 환경에서는 전용 Vault 네임스페이스에 KMS Transit 키를 격리하는 것을 권장해요.
키 보호와 회전
현재 Vault Kubernetes Key Management는 AppRole 인증만 지원해요.
- 시크릿 ID 보호 — AppRole 시크릿 ID를 제한된 권한(모드 0400)의 파일로 마운트해요.
- 짧은 토큰 TTL 사용 — AppRole 플러그인에 토큰 TTL에 대해 최소한으로 필요한 시간을 구성해요.
- 시크릿 ID 회전 — AppRole 시크릿 ID를 주기적으로 회전하고 마운트된 시크릿을 갱신해요.
TLS와 CA 인증서 사용
- 항상 TLS 사용 —
--tls-skip-verify플래그로 프로덕션 Vault 서버를 시작하지 마세요. - 자체 CA 인증서 제공 — CA 인증서가 시스템 신뢰 저장소에 없으면
--tls-ca-file플래그로 CA 인증서를 Vault에 제공해요. - 로드밸런서와 함께 SNI 구성 — 호스트네임이 다른 로드밸런서 뒤에 Vault를 배포한다면 시작 시
--tls-sni플래그로 올바른 호스트네임을 제공해야 해요.
텔레메트리와 감사 로그 모니터링
-
Vault 감사 로깅 활성화 — 모든 Transit 작업을 기록하려면 Vault에서 감사 로깅을 항상 활성화해요.
-
메트릭 모니터링 — 키 상태 관련 메트릭을 위해 Prometheus /metrics 엔드포인트를 스크랩하고 검토해요.
- rpc.server.call.duration 히스토그램으로 지연 시간이 KMS v2 요구사항 안에 머무르는지 확인.
- Vault와 KMS 플러그인 간 통신이 올바른지 확인하기 위한 모든 status, encrypt, decrypt 작업의 오류율.
-
실패에 대한 알림 구성 — 잠재적 문제를 조기에 잡으려면 다음에 대한 알림을 구성해요.
- 모든 vault-kube-kms 프로세스 상태 확인 실패.
- Vault에 대한 인증 실패.
-
프로세스 로그 정기 검토 — 인증 실패나 예상치 못한 오류가 있는지 vault-kube-kms 프로세스 로그를 정기적으로 검토해요.
재해 복구 계획
- Transit 키 백업 — Transit 키를 복구할 방법이 있는지 확인해요. 외부화된 데이터에 적절한 보호 장치가 있다면 Transit 플러그인의 내장 키 내보내기 기능을 사용하는 것을 권장합니다.
- 복구 절차 문서화 — 쿠버네티스 KMS나 Vault를 사용할 수 없게 됐을 때 복원할 수 있도록 항상 복구 절차를 문서화해요.
- 복구 프로세스 테스트 — 문서화한 복구 절차가 시간이 지나도 API 서버·Vault Kubernetes KMS 통합과 정확히 맞는지 주기적으로 테스트해요.
신중한 업그레이드
- 비프로덕션에서 업그레이드 테스트 — vault-kube-kms 이미지 업그레이드를 항상 비프로덕션 클러스터에서 먼저 테스트해요.
- 업그레이드 중 로그 모니터링 — 롤링 업그레이드 중 인증 실패나 지연 시간 증가를 주시해요.
- 항상 하위 호환성 유지 — 이전 키 버전으로 암호화된 데이터를 Vault가 복호화할 수 있도록, 업그레이드 후
min_decryption_version필드를 적절히 구성해 주세요.