0. Overview
- Vault에서 인증을 담당하는 컴포넌트
- ✅ 사용자를 인증하고, 해당 사용자에게 identity와 policy 부여
- ✅ 실제 인증 과정을 외부 인증 프로바이더에 위임할 수 있음 (AWS, Github 등)
Enabling/Disabling auth methods
- 명령어/API로 활성화 가능
- ✅ 모든 auth method는 auth/ prefix 아래에 마운트됨 (auth type별로 경로가 생성됨)
- ✅ auth method가 꺼지면, 해당 방식으로 로그인했던 모든 사용자가 로그아웃됨
명령어) 활성화
External auth method considerations
- vault는 외부 인증 시스템에 로그인 시점과 토큰 갱신 시점마다 실시간으로 확인 요청을 보냄
- ✅ 외부 계정 상태가 변경되면, vault는 토큰 갱신을 거부함
- ✅ 하지만 이미 발급된 토큰은 TTL까지 유효함
1. Userpass
- username + password 조합으로 vault에 로그인하는 방법
- ✅ 대소문자 구분 없음
- ✅ auth/userpass 경로에 직접 사용자 정보를 등록해야 함 (db 등에 접근 ❌)
설정
명령어) 사용자 등록
인증
명령어
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분, 또는 성공 로그인 시점
명령어
2. Token
- Vault에 기본 내장(auth/token) 된 인증 방식
- ✅ 별도 절차 없이 로그인할 수 있음
- ✅ 토큰 발급/갱신/폐기(회수) 같은 토큰 관련 작업도 수행할 수 있음
사용 방법) CLI
사용 방법) HTTP API
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 가져오기
CLI) 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"
}
}
출처