Vault를 효과적으로 사용하기 위해 알아야 하는 핵심 개념들을 요약합니다.
동일한 키로 암호화와 복호화를 수행합니다.
공개 키와 개인 키 쌍을 사용합니다.
임의 크기의 데이터를 고정 크기의 해시 값으로 변환합니다.
네트워크 통신을 암호화하는 프로토콜입니다.
“당신은 누구인가?” - 신원 확인
“당신은 무엇을 할 수 있는가?” - 접근 권한 확인
graph LR
A[클라이언트] -->|1. 인증| B[Vault Auth Method]
B -->|2. 토큰 발급| C[Vault Token]
C -->|3. 정책 첨부| D[Policy]
D -->|4. 허가된 경로만| E[Secret 엔진]
예시 워크플로우:
민감한 정보로, 외부에 노출되어서는 안 되는 데이터:
| 과제 | 설명 |
|---|---|
| 저장 | Secret을 어디에, 어떻게 안전하게 저장할 것인가? |
| 배포 | 애플리케이션에 Secret을 어떻게 전달할 것인가? |
| 순환 | Secret을 얼마나 자주 변경할 것인가? |
| 액세스 제어 | 누가 어떤 Secret에 접근할 수 있는가? |
| 감사 | 누가 언제 어떤 Secret에 접근했는가? |
| 폐기 | 사용이 끝난 Secret을 어떻게 안전하게 폐기할 것인가? |
Vault를 Kubernetes에 배포하고 사용하려면 다음 개념을 이해해야 합니다.
컨테이너를 실행하는 최소 단위입니다.
Pod에 대한 네트워크 엔드포인트를 제공합니다.
vault.default.svc.cluster.local)Pod의 신원(Identity)을 나타냅니다.
Kubernetes 리소스를 논리적으로 분리합니다.
| ConfigMap | Secret |
|---|---|
| 비민감한 설정 데이터 | 민감한 데이터 |
| 평문으로 저장 | base64 인코딩 (암호화 아님!) |
| 환경 변수, 볼륨으로 마운트 | 환경 변수, 볼륨으로 마운트 |
[!WARNING] Kubernetes Secret은 base64로 인코딩되어 있을 뿐 암호화되지 않습니다. Vault는 실제 암호화된 저장소를 제공합니다.
Kubernetes 패키지 관리자입니다.
Vault 인증 후 발급되는 자격 증명입니다.
Path 기반의 접근 제어 규칙입니다.
# database 경로에서 읽기 허용
path "secret/data/database/*" {
capabilities = ["read"]
}
# api-keys 경로에서 읽기/쓰기 허용
path "secret/data/api-keys/*" {
capabilities = ["create", "read", "update", "delete"]
}
동적으로 생성된 Secret의 수명입니다.
Secret을 저장하거나 생성하는 컴포넌트입니다.
주요 Secret 엔진:
Vault의 모든 리소스는 Path로 접근합니다.
secret/data/myapp/database
^ ^ ^
| | |
엔진 작업 실제 경로
secret/: Secret 엔진 이름 (마운트 경로)data/: KV v2 엔진의 데이터 접근 경로myapp/database: 사용자 정의 경로Vault의 많은 Secret은 Lease와 함께 제공됩니다.
sequenceDiagram
participant App as 애플리케이션
participant Vault as Vault
participant DB as 데이터베이스
App->>Vault: 데이터베이스 자격 증명 요청
Vault->>DB: 새 사용자 생성
DB-->>Vault: 사용자 생성 완료
Vault-->>App: 자격 증명 + Lease ID (TTL: 1h)
Note over App: 30분 사용 후
App->>Vault: Lease 갱신 요청
Vault-->>App: Lease 갱신 (TTL: 1h 연장)
Note over App: 추가로 1시간 사용
Note over Vault: Lease 만료
Vault->>DB: 사용자 삭제
Vault는 RBAC 모델을 사용하여 접근 제어를 수행합니다.
graph TB
SA[ServiceAccount<br/>myapp-sa] --> Role[Vault Role<br/>myapp-role]
Role --> Policy[Policy<br/>myapp-policy]
Policy --> Secret[Secret Path<br/>secret/data/myapp/*]
이제 Vault를 사용하는 데 필요한 기본 개념을 이해했습니다. 다음 문서로 진행하세요: