카테고리 없음

[Vault] Auth methods

noahkim_ 2025. 9. 2. 02:45

0. Overview

  • Vault에서 인증을 담당하는 컴포넌트
  • ✅ 사용자를 인증하고, 해당 사용자에게 identity와 policy 부여
  • ✅ 실제 인증 과정을 외부 인증 프로바이더에 위임할 수 있음 (AWS, Github 등)

 

Enabling/Disabling auth methods

  • 명령어/API로 활성화 가능
  • ✅ 모든 auth method는 auth/ prefix 아래에 마운트됨 (auth type별로 경로가 생성됨)
  • ✅ auth method가 꺼지면, 해당 방식으로 로그인했던 모든 사용자가 로그아웃됨

 

명령어) 활성화

더보기
더보기
vault auth enable <auth method>

 

External auth method considerations

  • vault는 외부 인증 시스템에 로그인 시점과 토큰 갱신 시점마다 실시간으로 확인 요청을 보냄
  • ✅ 외부 계정 상태가 변경되면, vault는 토큰 갱신을 거부함
  •  하지만 이미 발급된 토큰은 TTL까지 유효함

 

1. Userpass

  • username + password 조합으로 vault에 로그인하는 방법
  • ✅ 대소문자 구분 없음
  •  auth/userpass 경로에 직접 사용자 정보를 등록해야 함 (db 등에 접근 ❌)

 

설정

명령어) 사용자 등록

더보기
더보기
vault write auth/userpass/users/mitchellh \
    password=foo \
    policies=admins

 

인증

명령어

더보기
더보기
vault login -method=userpass \
    username=mitchellh \
    password=foo

 

API

더보기
더보기
curl \
    --request POST \
    --data '{"password": "foo"}' \
    http://127.0.0.1:8200/v1/auth/userpass/login/mitchellh
"auth": {
  "client_token": "c4f280f6-fdb2-18eb-89d3-589e2e834cdb",
  "policies": ["admins"],
  "metadata": { "username": "mitchellh" }
}

 

잠금

  • 잘못된 비밀번호를 여러 번 빠르게 입력하면, Vault는 일정 시간 동안 해당 사용자의 로그인 시도를 즉시 거부
  • 임계값(lockout threshold): 5회 실패 → 잠금
  • 잠금 지속(lockout duration): 15분
  • 카운터 초기화(lockout counter reset): 로그인 시도 없을 때 15분, 또는 성공 로그인 시점

 

명령어

더보기
더보기
vault auth tune

 

2. Token

  • Vault에 기본 내장(auth/token) 된 인증 방식
  • ✅ 별도 절차 없이 로그인할 수 있음
  •  토큰 발급/갱신/폐기(회수) 같은 토큰 관련 작업도 수행할 수 있음

 

사용 방법) CLI

더보기
더보기
vault login token=<token>

 

 

사용 방법) HTTP API

더보기
더보기
X-Vault-Token: <token>
# 또는
Authorization: Bearer <token>

 

3. AppRole

  • Vault에서 정의한 역할을 사용해 Vault에 인증할 수 있도록 하는 방식
  • ✅ 서버나 애플리케이션(자동화된 워크플로우)에서 사용함
  • ❌ 사람이 직접 로그인하는데는 적합하지 않음
  •  role_id, secret_id으로 구성됨
  • ➡️ 정책과 로그인 제약 조건이 매핑됨

 

생성

CLI) Role 생성

더보기
더보기
vault write auth/approle/role/example-role \
    secret_id_ttl=60m \
    token_ttl=20m \
    token_max_ttl=60m \
    policies="dev-policy"

 

  • secret_id_ttl: secret_id 유효시간
  • token_ttl: 발급된 토큰 기본 수명
  • token_max_ttl: 최대 연장 가능 시간
  • policies: 이 Role을 통해 발급되는 토큰에 부여할 정책

 

 

CLI) Role ID 가져오기

더보기
더보기
vault read auth/approle/role/example-role/role-id

 

CLI) Secret ID 생성

더보기
더보기
vault write -f auth/approle/role/example-role/secret-id

 

인증 과정

  • role_id, secret_id으로 로그인 함
  • ✅ Token을 발급받음
  • ➡️ Token을 통해 Secrets에 접근할 때 사용됨

 

CLI) 로그인

더보기
더보기
$ vault write auth/approle/login \
    role_id=db02de05-fa39-4855-059b-67221c5c2f63 \
    secret_id=6a174c20-f6de-a53c-74d2-6018fcceff64
Key                Value
---                -----
token              65b74ffd-842c-fd43-1386-f7d7006e520a
token_accessor     3c29bc22-5c72-11a6-f778-2bc8f48cea0e
token_duration     20m0s
token_renewable    true
token_policies     [default]

 

HTTP API) 로그인

더보기
더보기
$ curl \
    --request POST \
    --data '{"role_id":"988a9df-...","secret_id":"37b74931..."}' \
    http://127.0.0.1:8200/v1/auth/approle/login
{
  "auth": {
    "renewable": true,
    "lease_duration": 2764800,
    "metadata": {},
    "policies": ["default", "dev-policy", "test-policy"],
    "accessor": "5d7fb475-07cb-4060-c2de-1ca3fcbf0c56",
    "client_token": "98a4c7ab-b1fe-361b-ba0b-e307aacfd587"
  }
}

 

 

출처