Vault 아키텍처 이해

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 |
                                          +-----------------+

클라이언트가 수행하는 흐름

  1. Vault에 인증 요청 (e.g., LDAP, GitHub)
  2. 인증 토큰 수신
  3. 해당 토큰으로 Secret 요청
  4. 정책 검사를 거쳐 응답 수신

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 등)

RSS Feed
마지막 수정일자