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/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, 인증코드 등 다양한 기능 지원 |
마지막 수정일자