Vault 아키텍처 이해
2️⃣ Vault 서버 구성 요소 (Core, Storage, API, Auth Backends)
Vault는 단순히 “Secret 저장소"를 넘어서, 보안 관리 플랫폼으로 설계된 시스템입니다.
이 복잡한 구조를 이해하려면 Vault 내부 구성 요소부터 짚고 넘어가야 합니다.
1. Vault Core
- Vault의 비즈니스 로직을 처리하는 엔진입니다.
- 모든 요청은 Core를 통해 검증되고 처리됩니다.
- 정책 확인, 권한 검사, Secrets Engine 호출 등의 작업 수행
[Client Request]
↓
[Auth Backend] → [Core] → [Secrets Engine or Storage]
2. Storage Backend
- Vault는 데이터를 자체적으로 디스크에 저장하지 않습니다.
- 대신 다양한 스토리지 백엔드에 데이터를 저장합니다.
- 대표적인 예:
- 🔹 Consul
- 🔹 File
- 🔹 Etcd
- 🔹 Amazon S3
- 🔹 Integrated Storage (Raft)
💡 모든 Secret은 암호화된 상태로 저장됩니다.
# 예시: Vault config 파일
storage "file" {
path = "/opt/vault/data"
}
3. API Layer (HTTP API)
- Vault는 모든 기능을 RESTful API로 노출합니다.
- 클라이언트는 CURL, CLI, SDK를 통해 접근 가능
curl --header "X-Vault-Token: ..." \
https://vault.local/v1/secret/data/app
4. Auth Backends (인증 백엔드)
- Vault는 사용자를 인증하기 위해 다양한 백엔드를 지원합니다:
- LDAP
- GitHub
- Kubernetes
- AppRole
- OIDC 등
📌 인증은 사용자 확인만 할 뿐, 권한 부여는 Policy를 통해 이루어집니다.
3️⃣ Vault의 Client-Server 아키텍처
Vault는 기본적으로 클라이언트-서버 구조를 따릅니다.
Vault 서버는 중앙에서 Secret을 관리하고, 클라이언트는 API를 통해 요청을 보냅니다.
🔄 전체 구조 흐름
+-----------------+ HTTP API +----------------+
| Client App | <----------------> | Vault Core |
+-----------------+ +--------+-------+
|
+-------v--------+
| Storage Backend |
+-----------------+
클라이언트가 수행하는 흐름
- Vault에 인증 요청 (e.g., LDAP, GitHub)
- 인증 토큰 수신
- 해당 토큰으로 Secret 요청
- 정책 검사를 거쳐 응답 수신
4️⃣ HSM / Auto-unseal 구조 설명
Vault는 기본적으로 시크릿을 암호화한 상태로 저장합니다.
서버를 시작할 때는 이 암호화 키를 언실(unseal) 해야 합니다.
1. HSM & Auto-unseal 개념
기존 방식:
- 수동으로
unseal
키 3개 이상 입력해야 Vault 작동 가능
자동화 방식:
- 🔐 Auto-unseal을 통해 키 관리를 외부 시스템에 위임
- 대표적인 키 매니지먼트 시스템:
- AWS KMS
- GCP KMS
- Azure Key Vault
- HSM (Hardware Security Module)
seal "awskms" {
region = "ap-northeast-2"
kms_key_id = "alias/my-key"
}
☑️ 이를 통해 Vault 서버가 자동으로 복구 및 재시작될 수 있는 구조 완성
5️⃣ 주요 흐름: 클라이언트 → Vault → 스토리지
Vault를 사용하는 전형적인 흐름을 아래와 같이 정리할 수 있습니다:
sequenceDiagram participant C as Client participant V as Vault Core participant S as Storage C->>V: 인증 요청 (e.g., GitHub) V-->>C: 인증 토큰 발급 C->>V: Secret 요청 (토큰 포함) V->>V: 정책 확인 V->>S: Secret 조회 or 생성 S-->>V: 암호화된 Secret V-->>C: 응답 전달
이 흐름에서 Vault는 단순한 DB가 아니라, 정책과 로직이 내장된 보안 게이트웨이 역할을 합니다.
🧭 아키텍처 다이어그램
+-----------------------+
| Client (App) |
+----------+-----------+
|
| REST API (HTTPS)
▼
+----------+-----------+
| Vault Core |
+----+----------+------+
| |
+----------+ +-------------------+
| |
+----v-----+ +-------v---------+
| Auth B/E | | Secrets Engine |
+----------+ +-----------------+
| |
+-------------+---------------+
|
+------v------+
| Storage |
+-------------+
📌 요약:
구성 요소 | 설명 |
---|---|
Core | 인증, 정책 확인, 시크릿 로직 담당 |
Storage | 시크릿을 암호화 저장 (Raft, Consul 등) |
API | RESTful API로 모든 요청 처리 |
Auth B/E | 인증 책임 (GitHub, LDAP, K8s 등) |
마지막 수정일자