🔐 HashiCorp Vault

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
🏷️ secrets 🛡️ security 🔑 encryption 📅 2026.03 📘 실무 스터디 가이드

📋 목차

  1. HashiCorp Vault란?
  2. 왜 써야 하는가?
  3. 핵심 개념
  4. 퀵스타트
  5. 핵심 설정 레퍼런스
  6. 실무 팁 & 트러블슈팅
  7. 참고 자료

1. HashiCorp Vault란?

비밀(Secret)을 안전하게 저장, 접근 제어, 감사 로깅까지 제공하는 엔터프라이즈급 시크릿 관리 도구입니다. 데이터베이스 자격증명, API 토큰, TLS 인증서, 암호화 키 등 민감 정보를 중앙에서 관리하며, 동적 시크릿과 암호화 서비스를 통해 보안 운영을 자동화합니다.

🔐 시크릿 저장소

암호화된 저장소에 시크릿을 보관하며, 세분화된 정책으로 접근 통제. KV, 데이터베이스, PKI 등 다양한 시크릿 엔진 지원.

⚡ 동적 시크릿

요청 시점에 임시 자격증명을 생성 (예: DB 패스워드, AWS IAM). 사용 후 자동 만료, 유출 위험 최소화.

🔑 암호화 as a Service

애플리케이션에서 Vault의 암호화/복호화 API를 호출하여 데이터를 안전하게 보호. 키 관리 부담 제거.

2. 왜 써야 하는가?

기존 시크릿 관리 방식 (환경변수, Git 저장소, ConfigMap)은 정적이며 유출 시 피해가 큽니다. Vault는 중앙 감사, 자동 로테이션, 세분화된 정책을 제공합니다.

비교 항목Vault환경변수 / ConfigMapAWS Secrets Manager
동적 시크릿✅ 탁월❌ 불가⚠️ 제한적
암호화 서비스✅ 내장❌❌ (KMS 별도)
정책 엔진✅ 세분화❌✅ IAM 기반
감사 로그✅ 상세❌✅ CloudTrail
온프레미스✅ 가능✅❌ 클라우드 전용
💡 핵심 · Vault는 멀티 클라우드, 온프레미스, 하이브리드 환경에서 통합 시크릿 플레인을 제공합니다.

3. 핵심 개념

Vault의 아키텍처는 크게 스토리지 백엔드, 시크릿 엔진, 인증 방법, 정책으로 구성됩니다.

┌─────────────────────────────────────────────────────┐ │ Vault Server │ │ ┌────────────┐ ┌──────────┐ ┌────────────────┐ │ │ │ Auth 방법 │ │ 정책 │ │ 시크릿 엔진 │ │ │ │ token, k8s │→│ ACL │→│ KV, DB, PKI │ │ │ │ OIDC, LDAP │ │ (HCL) │ │ transit, aws │ │ │ └────────────┘ └──────────┘ └────────────────┘ │ │ │ │ │ ┌─────────────────────┴────────────────────────┐ │ │ │ 스토리지 백엔드 (raft, consul, file) │ │ │ └──────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────┘ ▲ │ │ API (http/443) │ 감사 로그 │ ▼ ┌───────┴───────┐ ┌──────────────┐ │ 애플리케이션 │ │ 감사 장치 │ │ (Python, Go) │ │ file, syslog │ └───────────────┘ └──────────────┘

🔐 인증 (Auth)

Token, Kubernetes, JWT/OIDC, LDAP, AWS IAM 등 다양한 인증 방법으로 Vault에 로그인.

📜 정책 (Policy)

HCL 기반 ACL 규칙. 경로별 read/write/list/deny 권한을 세밀하게 제어.

🧩 시크릿 엔진

KV(v1/v2), 데이터베이스, AWS, Azure, GCP, PKI, Transit, TOTP 등 30+ 엔진.

4. 퀵스타트

로컬 개발 환경에서 Vault를 설치하고 첫 시크릿을 읽고 씁니다.

① 설치 (macOS / Linux)

# macOS (Homebrew)
brew install vault

# Linux (apt)
sudo apt update && sudo apt install vault

# 설치 확인
vault version

② Vault 서버 시작 (개발 모드)

vault server -dev -dev-root-token-id="root"
⚠️ 주의 · dev 모드는 메모리 저장, 재시작 시 데이터 초기화. 프로덕션에서는 Raft 또는 Consul 사용.

③ 첫 시크릿 읽기/쓰기 (CLI + Python)

# CLI: 시크릿 쓰기
vault kv put secret/hello foo=bar hello=world

# CLI: 시크릿 읽기
vault kv get secret/hello

Python 예제 (hvac 라이브러리)

import hvac

client = hvac.Client(url='http://127.0.0.1:8200', token='root')
# 시크릿 쓰기
client.secrets.kv.v2.create_or_update_secret(
    path='hello', secret=dict(foo='bar', hello='world'), mount_point='secret'
)
# 시크릿 읽기
read = client.secrets.kv.v2.read_secret_version(path='hello', mount_point='secret')
print(read['data']['data'])
# {'foo': 'bar', 'hello': 'world'}

5. 핵심 설정 레퍼런스

설정 항목설명예시 값
storage스토리지 백엔드 (raft, consul, file)raft { path = "./vault/data" }
listenerTCP 리스너 주소, TLS 설정tcp { address = "0.0.0.0:8200" tls_disable = true }
api_addr클라이언트가 접근할 API 주소http://vault.example.com:8200
seal봉인/언봉용 마스터 키 보호 (shamir, aeskms)shamir { secret_shares = 5 threshold = 3 }
audit감사 로그 장치 (file, syslog, socket)file { file_path = "/var/log/vault_audit.log" }
📌 프로덕션 필수 · TLS 활성화, 고가용성(HA)을 위한 raft/consul, 감사 로그 활성화, 최소 3개의 언봉 키.

6. 실무 팁 & 트러블슈팅

🔹 자주 겪는 문제 🔸 해결책
문제원인 / 해결
❌ vault write 시 "permission denied"정책(path) 부족 → vault policy write로 ACL 추가
❌ 시크릿이 갑자기 사라짐KV v2에서 삭제/메타데이터 문제 → vault kv metadata get 확인
❌ Vault 봉인 (sealed) 상태재시작 후 언봉 필요 → vault operator unseal (threshold 개수)
❌ Python hvac 연결 실패Vault 주소/토큰 오류, TLS 검증 → verify=False (개발용)
❌ 동적 DB 시크릿 만료TTL 기본 1h → lease 기간 조정: max_ttl=24h
🧠 실무 팁 · Vault Agent를 사이드카로 사용하면 애플리케이션 코드 변경 없이 시크릿 주입 가능. Kubernetes에서는 CSI Provider와 통합.

7. 참고 자료

🔗 빠른 링크 · Vault CLI 치트시트, 정책 예제, 프로덕션 레퍼런스 아키텍처는 공식 문서에서 확인하세요.