인증 방법(Auth Methods)
4️⃣ 인증 방법(Auth Methods)
Vault는 다양한 **인증 백엔드(Auth Methods)**를 지원하며, 사용자의 신원을 검증한 후 **정책(Policy)**을 적용해 접근을 제어합니다.
이번 섹션에서는 가장 많이 사용하는 네 가지 인증 방식에 대해 알아봅니다.
1. Token 기반 인증 이해
Vault 설치 후 가장 먼저 사용하는 인증 방식은 바로 Token 방식입니다.
Vault는 사용자가 인증되면 고유한 Access Token을 발급하며, 이를 통해 Vault에 접근합니다.
📦 사용 예시
# 토큰 설정
export VAULT_ADDR=http://127.0.0.1:8200
export VAULT_TOKEN=s.xxxxxx
# 토큰으로 비밀 접근
vault kv put secret/myapp/config username=admin password=pass123
vault kv get secret/myapp/config
📘 특징 요약
항목 | 설명 |
---|---|
초기 Root Token | Vault Init 시 발급됨 |
Child Token | 사용자/시스템 별 생성 가능 |
TTL 및 정책 | 각각 설정 가능 |
🖼️ Token 인증 흐름
+--------+ +--------+ +---------+
| Client | ----> | Token | ----> | Policies|
+--------+ +--------+ +---------+
2. LDAP 인증 구성 (AD 연동 포함)
기업 환경에서 가장 많이 쓰이는 인증 방식은 LDAP / Active Directory 연동입니다.
Vault는 사용자의 LDAP 그룹과 매핑된 정책을 기반으로 접근을 제어합니다.
📦 LDAP 연동 예시
vault auth enable ldap
vault write auth/ldap/config \
url="ldaps://ldap.example.com" \
binddn="cn=admin,dc=example,dc=com" \
bindpass="admin123" \
userdn="ou=users,dc=example,dc=com" \
groupdn="ou=groups,dc=example,dc=com" \
groupfilter="(objectClass=groupOfNames)" \
groupattr="cn" \
userattr="uid" \
insecure_tls=false
📘 사용자 로그인 테스트
vault login -method=ldap username=john password=mypassword
🖼️ LDAP 인증 아키텍처
+---------+ +-------------+ +--------------+
| User | -----> | Vault | -----> | ActiveDirectory |
+---------+ +-------------+ +--------------+
↕
LDAP Bind / Search
그룹 매핑을 통해
ldap-group-admins → policy: vault-admin
식의 권한 제어가 가능합니다.
3. Kubernetes Auth (ServiceAccount 기반 인증 흐름)
Kubernetes 환경에서는 Vault가 ServiceAccount Token을 통해 자동 인증하는 방식이 일반적입니다.
Pod 내 애플리케이션이 Vault에 비밀을 요청할 수 있게 됩니다.
📦 설정 흐름
- Vault 서버에서 K8s Auth Method 활성화
- K8s 클러스터 API 연결 정보 등록
- K8s의 특정 ServiceAccount와 Vault 정책 매핑
vault auth enable kubernetes
vault write auth/kubernetes/config \
kubernetes_host="https://$K8S_HOST" \
kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt \
token_reviewer_jwt=@/var/run/secrets/kubernetes.io/serviceaccount/token
📘 Role 생성
vault write auth/kubernetes/role/app \
bound_service_account_names=app-sa \
bound_service_account_namespaces=default \
policies=app-policy \
ttl=1h
🖼️ K8s 인증 흐름
+------------+
| Pod |
| (app-sa) |
+-----+------+
|
| 1. JWT 포함 요청
v
+------------+ 2. Token 검증 요청 +----------+
| Vault | <---------------------------> | Kubernetes API |
+------------+ +----------+
|
v
+--------------+
| Policy 적용 |
+--------------+
4. OIDC 인증 (Keycloak, Google 연동 예시)
OIDC(OpenID Connect)는 OAuth2 기반의 인증 방식으로,
Keycloak, Google, GitHub 등의 외부 IdP를 Vault와 연동할 수 있습니다.
📦 OIDC Auth 활성화
vault auth enable oidc
vault write auth/oidc/config \
oidc_discovery_url="https://accounts.google.com" \
oidc_client_id="YOUR_CLIENT_ID" \
oidc_client_secret="YOUR_SECRET" \
default_role="my-role"
📘 Role 정의
vault write auth/oidc/role/my-role \
user_claim="email" \
allowed_redirect_uris="http://localhost:8250/oidc/callback" \
policies="default"
📘 로그인 시 브라우저 자동 실행
vault login -method=oidc
🖼️ OIDC 인증 플로우 (Google 예시)
+----------+
| User |
+----+-----+
| 1. 로그인 요청
v
+----------+ +-------------------+
| Vault | <------> | Google OIDC Server|
+----------+ +-------------------+
|
v
+-------------+
| Token 발급 & 정책 적용 |
+-------------+
📌 인증 방식 비교 요약
방식 | 사용 환경 | 특징 |
---|---|---|
Token | 로컬, 테스트용 | 단순하지만 수동 발급 필요 |
LDAP | 기업 내부 | 기존 AD 연동 가능, 그룹 매핑 가능 |
K8s | Kubernetes 운영환경 | Pod에서 자동 인증 지원 |
OIDC | 외부 IdP 연동 | SSO 가능, Google/Keycloak 활용 |