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 기준)
- DB 엔진 활성화
vault secrets enable database- 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"- 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"- 동적 크레덴셜 요청
vault read database/creds/readonly🖼️ DB Dynamic Secret 흐름
+--------+ +--------+ +--------------+
| Client | -----> | Vault | -----> | PostgreSQL |
+--------+ +--------+ +--------------+
|
v
Create temporary user/password3. 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/0vault 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, 인증코드 등 다양한 기능 지원 |
마지막 수정일자