Secret 엔진 이해 및 활용

Secret 엔진 이해 및 활용

5️⃣ Secret 엔진 이해 및 활용

Vault는 다양한 Secret Engine을 통해 다양한 유형의 비밀(Secrets)을 생성, 저장, 동적으로 발급할 수 있습니다.

이 장에서는 실무에서 많이 활용되는 엔진들을 예제와 함께 알아봅니다.


1. Key-Value 엔진 (v1 vs v2)

가장 기본적인 Secret Engine은 Key-Value(Key/Value) 형식의 저장소입니다.
Vault에서 설정 및 조회가 매우 간단하며, 버전 관리 여부에 따라 v1, v2 두 가지 버전이 있습니다.

📘 차이점 요약

항목 v1 v2
버전 관리 ❌ 없음 ✅ 있음
삭제 방식 즉시 삭제 Soft Delete, Undelete 가능
API 경로 /secret/ /secret/data/, /secret/metadata/

📦 v2 Secret 예제

# Enable KV v2
vault secrets enable -path=secret kv-v2

# 데이터 저장
vault kv put secret/myapp username=admin password=pass123

# 데이터 조회
vault kv get secret/myapp

# 버전 삭제
vault kv delete secret/myapp

🖼️ KV v2 구조

+--------+        +--------+
| Client | <----> | Vault  |
+--------+        +---+----+
                        |
                        v
              +------------------+
              | KV v2 Engine     |
              | (versioned store)|
              +------------------+

2. DB 엔진 (PostgreSQL, MariaDB의 동적 시크릿 발급)

Vault는 DB 자격증명 동적 생성이 가능합니다.
요청 시마다 새로운 사용자 계정을 생성하고 TTL이 만료되면 자동 폐기됩니다.

📘 실습 흐름 (PostgreSQL 기준)

  1. DB 엔진 활성화
vault secrets enable database
  1. DB 연결 구성
vault write database/config/my-postgres-db \
  plugin_name=postgresql-database-plugin \
  allowed_roles="readonly" \
  connection_url="postgresql://vaultuser:password@db.example.com:5432/postgres?sslmode=disable"
  1. Role 정의
vault write database/roles/readonly \
  db_name=my-postgres-db \
  creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \
                       GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
  default_ttl="1h" \
  max_ttl="24h"
  1. 동적 크레덴셜 요청
vault read database/creds/readonly

🖼️ DB Dynamic Secret 흐름

+--------+         +--------+         +--------------+
| Client | ----->  | Vault  | ----->  |  PostgreSQL  |
+--------+         +--------+         +--------------+
                        |
                        v
              Create temporary user/password

3. AWS, GCP, Azure Credentials 동적 관리

Vault는 클라우드 계정의 액세스를 필요할 때만 발급하고, 만료되면 자동 폐기할 수 있습니다.

📘 AWS 예시

vault secrets enable -path=aws aws

vault write aws/config/root \
  access_key=AKIAXXXX \
  secret_key=SECRETKEYXXX \
  region=us-east-1

vault write aws/roles/developer \
  credential_type=iam_user \
  policy_document=-<<EOF
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "s3:ListBucket",
    "Resource": "*"
  }]
}
EOF

📘 크레덴셜 요청

vault read aws/creds/developer

🖼️ AWS 동적 크레덴셜 흐름

+--------+         +--------+         +--------+
| Client | ----->  | Vault  | ----->  |  AWS   |
+--------+         +--------+         +--------+
                            |
                            v
                IAM User 생성 및 반환

4. PKI 엔진으로 자체 CA 구축

Vault는 내부 인증서를 발급하는 자체 CA 역할도 할 수 있습니다.
마이크로서비스, 내부 API TLS 인증서 발급 등에 자주 사용됩니다.

📘 PKI 활성화 및 구성

vault secrets enable pki

vault write pki/root/generate/internal \
  common_name="vault.local" ttl=87600h

vault write pki/config/urls \
  issuing_certificates="http://vault.local:8200/v1/pki/ca" \
  crl_distribution_points="http://vault.local:8200/v1/pki/crl"

📘 인증서 발급 예시

vault write pki/issue/my-role \
  common_name="internal.service.local" ttl=24h

🖼️ PKI 구조

+--------+         +--------+
| Client | ----->  | Vault  |
+--------+         +---+----+
                        |
                        v
                [CA Root + Signing]

5. SSH, TOTP, RabbitMQ, Consul 등의 특수 엔진

Vault는 다음과 같은 특수한 인증 또는 시크릿 발급도 가능합니다.

📌 SSH OTP (One-Time Password) 예시

vault secrets enable ssh

vault write ssh/roles/otp-role \
  key_type=otp \
  default_user=ubuntu \
  cidr_list=0.0.0.0/0
vault write ssh/creds/otp-role ip=10.0.0.5

📌 TOTP 예시

vault secrets enable totp

vault write totp/keys/example \
  generate=true issuer="Vault" account_name="admin@example.com"

vault read totp/code/example

🖼️ 기타 Secret 엔진 아키텍처

+--------+         +--------+         + External Systems +
| Client | ----->  | Vault  | ----->  | SSH / RabbitMQ / etc |
+--------+         +--------+         +----------------------+

📚 마무리 요약

Secret Engine 특징
KV Key-Value 저장 (v2는 버전 관리)
DB 사용자/패스워드 동적 발급
Cloud Provider AWS, GCP, Azure 권한 동적 발급
PKI 자체 CA 인증서 발급
기타(SSH, TOTP) OTP, 인증코드 등 다양한 기능 지원
RSS Feed
마지막 수정일자