Vault 소개 및 기본 개념
1️⃣ Vault의 탄생 배경과 해결하려는 문제
1. 보안 문제는 점점 더 복잡해지고 있다
현대의 인프라 환경은 빠르게 변화하고 있습니다. 특히 클라우드, 컨테이너, 마이크로서비스의 도입으로 인해 다음과 같은 문제가 생겼습니다:
- 민감 정보(비밀번호, API 키, 토큰 등)가 코드에 하드코딩되어 있음
- 인프라 구성 시 모든 시스템에 동일한 자격증명을 사용하는 경우가 많음
- 로그에 비밀번호가 찍히거나 Git에 인증키가 푸시되는 보안 사고 발생
🔐 Vault는 바로 이 문제들을 해결하기 위해 HashiCorp에서 개발된 보안 비밀 관리 시스템입니다.
2. Vault의 등장
Vault는 다음과 같은 문제들을 해결하기 위해 등장했습니다:
- Secrets(비밀정보)의 중앙 집중 관리
- 동적 자격증명(Dynamic Credentials) 발급
- 정책 기반 접근 제어
- 감사 로깅을 통한 추적 가능성
아래는 Vault가 등장하기 전후의 비교입니다:
항목 | Vault 도입 전 | Vault 도입 후 |
---|---|---|
비밀번호 관리 | 개발자/운영자가 직접 관리 | 중앙 비밀 저장소에서 제어 |
접근 제어 | 시스템 전체 공유 | 세분화된 정책 제어 |
키 만료 | 수동 갱신 또는 무제한 | TTL 기반 자동 폐기 |
감사 기능 | 없음 또는 제한적 | 모든 액세스 로깅 가능 |
2️⃣ Secrets Management란 무엇인가?
1. Secrets란?
Secrets란 시스템 운영에 필요한 민감 정보를 뜻합니다.
예시:
- 데이터베이스 비밀번호
- API 인증 토큰
- 클라우드 프로바이더의 키
- TLS 인증서
이러한 정보는 잘못 유출될 경우 보안 사고로 이어지므로 안전한 저장, 관리, 접근 제어가 중요합니다.
2. Secrets Management의 핵심 요소
- 🔐 Secure Storage: 데이터를 암호화하여 저장
- 🕵️ Access Control: 누가 어떤 Secret에 접근할 수 있는지 제어
- ⏳ Dynamic Secrets: 일정 시간이 지나면 자동으로 폐기되는 자격증명 발급
- 🧾 Audit Logging: 누가 언제 어떤 Secret을 사용했는지 기록
📌 Vault는 위 기능을 모두 제공합니다.
3️⃣ Vault의 주요 기능 개요 (KV, Identity, Encryption 등)
1. KV (Key-Value) Secrets Engine
- 가장 기본적인 Secret 저장 방법
- 계층적 키-값 형태로 저장
- 버저닝 가능 (v2 사용 시)
# 예시: Secret 저장
vault kv put secret/db username=admin password=pass123
# 예시: Secret 조회
vault kv get secret/db
📦 유저네임, 비밀번호, 토큰 등 저장할 때 사용
2. Identity & Access Management
Vault는 내부적으로 사용자 및 애플리케이션을 Identity Entity로 관리합니다.
- 정책(Policy) 기반 권한 부여
- 외부 인증 연동 가능: LDAP, GitHub, JWT, Kubernetes 등
# 예시: 읽기 전용 정책
path "secret/data/*" {
capabilities = ["read"]
}
3. Data Encryption as a Service (Transit Engine)
Vault는 저장된 데이터를 넘기면 암호화/복호화만 수행해주는 API도 제공합니다.
- 암호화 키는 Vault 내부에만 존재
- 어플리케이션은 키를 몰라도 암호화 가능
# 암호화
vault write transit/encrypt/payment plaintext=$(base64 <<< "4111-1111-1111-1111")
# 복호화
vault write transit/decrypt/payment ciphertext=vault:v1:...
💡 클라이언트 앱이 직접 암호화를 하지 않아도 됨
4️⃣ Vault를 왜 써야 하나? 다른 솔루션과의 차이점
1. Vault vs 기타 솔루션 비교
기능 | Vault | AWS Secrets Manager | Kubernetes Secrets |
---|---|---|---|
동적 자격증명 | ✅ | ❌ | ❌ |
외부 인증 연동 | ✅ | 일부 | ❌ |
감사 로깅 | ✅ | ✅ | ❌ |
Transit 암호화 | ✅ | ❌ | ❌ |
오픈소스 | ✅ | ❌ | ✅ |
클라우드 종속성 없음 | ✅ | ❌ | ❌ |
🔍 Vault는 다양한 환경에 유연하게 통합 가능하며, 특히 Kubernetes나 멀티 클라우드 환경에서 강력한 보안 도구로 사용됩니다.
2. 실제 활용 시나리오
🎯 시나리오1: 개발자가 DB 비밀번호를 알지 않고도 애플리케이션 실행
- 애플리케이션은 Vault에 인증 요청
- Vault는 정책에 따라 DB 비밀번호를 발급
- 애플리케이션은 임시 자격증명으로 DB에 접속
🎯 시나리오2: 사용자의 접근 로그 추적
- 모든 secret 요청은 audit log로 기록됨
- 문제가 생겼을 때 누가, 언제, 어떤 secret을 접근했는지 확인 가능
🧭 아키텍처 다이어그램
[사용자/앱]
│
▼
[Vault] <── 인증 ──> [인증 백엔드: GitHub, LDAP, K8s 등]
│
├── KV, DB 등 Secrets 저장
├── 정책 기반 접근 제어
└── 감사 로그 기록
🖼️ 플로우 예시: DB Credentials 발급
[App] ── 로그인 토큰 요청 ──> [Vault Auth Backend]
↓
[Vault Policy 확인]
↓
[Vault DB Secret Engine] → 임시 자격증명 발급 (TTL 1h)
↓
[App] ←─ username: vault-user-xxxxx / password: xyz
마지막 수정일자