Hashicorp Vault: CLI와 API를 통한 토큰 관리
Source: Dev.to
소개
HashiCorp Vault와 상호 작용할 때 토큰은 인증 및 인가 수단입니다. 다양한 엔진이 제공하고 정책 및 역할과 연계된 토큰은 Vault의 경로‑기반 기능에 대한 접근 권한을 부여합니다.
이 글에서는 토큰 관리를 위한 모든 CLI 및 API 옵션을 자세히 설명하고, 특정 속성을 가진 토큰을 생성하는 여러 실습 명령 예시를 제공합니다. 배경 자료는 공식 HashiCorp Vault 문서의 토큰 CLI 명령 및 Token 인증 방법(API)에서 가져왔습니다.
토큰 수명 주기
- 생성 – 토큰은 인증 방법을 통해, 정의된 시크릿 스토어에
vault write명령을 실행하거나 명령줄에서 생성됩니다. 정적 정보와 메타데이터가 토큰에 저장됩니다. - 업데이트 – 토큰에서 업데이트 가능한 유일한 값은 만료 날짜입니다. 토큰이 갱신 가능하고 아직 유효하며 명시적으로 정의된
max-ttl을 초과하지 않은 경우 갱신할 수 있습니다. 새로운 만료 시점은 현재 시간에 정의된 TTL을 더한 값입니다. - 만료 / 폐기 – 루트 토큰을 제외한 모든 토큰은 TTL이 도달하거나 폐기되면 만료됩니다. 관련 데이터가 삭제되고 토큰에 연결된 모든 리스도 제거됩니다.
Vault 토큰 명령 그룹
vault token 명령 그룹은 토큰 수명 주기에 맞는 상호 작용을 구현합니다:
| Command | Description |
|---|---|
create | 현재 토큰(성공적인 vault login 후 암묵적으로 저장되거나 VAULT_TOKEN으로 설정된)의 컨텍스트에서 새 토큰을 생성합니다. |
capabilities | 특정 경로에 대한 토큰 권한(정책 조회)을 출력합니다. |
lookup | 토큰 또는 토큰 액세서에 대한 모든 정보를 표시합니다. |
renew | 만료되지 않았고 사용 제한을 초과하지 않은 토큰을 갱신합니다. |
revoke | 토큰을 즉시 폐기하여 이후 사용을 차단합니다. 하위 토큰도 함께 폐기됩니다. |
Note: 토큰 값은 92자이지만 아래 예시에서는 8자만 표시합니다.
vault token create
현재 토큰의 컨텍스트에서 새 관리 토큰을 인스턴스화합니다. 기본적으로 부모와 동일한 정책을 가진 하위 토큰이 생성됩니다. 정책은 제한할 수는 있지만 확장할 수는 없으며, 부모가 충분한 권한을 가지고 있어야 합니다. 명시적 TTL을 지정하면 갱신 가능한 토큰을 만들 수 있으며, 그렇지 않으면 비갱신 토큰이 됩니다. 두 경우 모두 max-ttl이 유효 기간의 상한을 제한합니다.
사용 가능한 플래그
Type
-type– service 또는 batch 토큰 중 하나를 생성합니다.
Capabilities
-orphan– 생성에 사용된 토큰과의 관계를 끊습니다. 결과 토큰은 독립적이며 다른 토큰의 부모가 될 수 있습니다.-renewable– 토큰은 기본적으로 갱신 가능하므로, 이 플래그를 사용해 갱신을 비활성화합니다.
Access Control
-policy– 토큰에 지정된 정책을 첨부합니다. 여러 정책을 지정하려면 플래그를 여러 번 사용합니다.-role– 토큰에 역할(인증 전용 데이터 구조)을 할당하여 역할에 정의된 모든 속성을 상속합니다.
Validity
-explicit-max-ttl– 토큰에 대한 절대적이며 확장 불가능한 기간을 설정합니다.-period– 갱신 시 토큰 TTL이 연장되는 기간(주기적 토큰)입니다.-ttl– 초기 TTL 값입니다. 생략하면 엔진 또는 Vault 기본 설정 TTL이 사용됩니다.-use-limit– 토큰을 사용할 수 있는 최대 횟수를 지정합니다.
Identification
-id– 사용자 정의 토큰 ID를 제공합니다(기본값은 무작위 92자 base62 문자열).-display-name– 사람이 읽을 수 있는 메타데이터입니다.-entity-alias– 정의된 별칭에 토큰을 연결합니다(allowed_entity_aliases에 허용되어야 함).-metadata– 식별을 위한 추가 키‑값 쌍(반복 가능).
예시 생성
다중 정책 토큰
vault token create -policy=secret-management -policy=kv2-management
로그 출력
| Key | Value |
|---|---|
| accessor | 32OK6kKt2rk7mw4jQ0ZbXT3E |
| creation_time | 1753526225 |
| creation_ttl | 0s |
| display_name | root |
| entity_id | n/a |
| expire_time | |
| explicit_max_ttl | 0s |
| id | hvs.HTMdJOhL |
| meta | |
| num_uses | 0 |
| orphan | true |
| path | auth/token/root |
| policies | [root] |
| ttl | 0s |
| type | service |
제한된 갱신 가능 주기 토큰
vault token create -policy=secret-management -period=24h -use-limit=10
로그 출력
| Key | Value |
|---|---|
| accessor | inIuUf1uTkYjxHBxOOVg442Q |
| creation_time | 1755334894 |
| creation_ttl | 24h |
| display_name | token |
| entity_id | n/a |
| expire_time | 2025-08-17T11:01:34.540229+02:00 |
| explicit_max_ttl | 0s |
| id | hvs.CAESIOam |
| issue_time | 2025-08-16T11:01:34.540235+02:00 |
| meta | |
| num_uses | 10 |
| orphan | false |
| path | auth/token/create |
| period | 24h |
| policies | [default secret-management] |
| renewable | true |
| ttl | 23h59m39s |
| type | service |
배치 토큰
vault token create -policy=kv2-management -type=batch -ttl=1h
로그 출력
| Key | Value |
|---|---|
| accessor | n/a |
| creation_time | 1755335083 |
| creation_ttl | 1h |
| display_name | token |
| entity_id | n/a |
| expire_time | 2025-08-16T12:04:43+02:00 |
| explicit_max_ttl | 0s |
| id | hvb.AAAAAQLX |
| issue_time | 2025-08-16T11:04:43+02:00 |
| meta | |
| num_uses | 0 |
| orphan | true |
| path | auth/token/create |
| policies | [default kv2-management] |
| renewable | false |
| ttl | 59m45s |
| type | batch |
고아 토큰(Explicit Max TTL 지정)
vault token create -policy=kv2-management -orphan -explicit-max-ttl=24h
로그 출력
| Key | Value |
|---|---|
| accessor | aiLPJrzGBU0lC1QdKDN1gHak |
| creation_time | 1755335696 |
| creation_ttl | 24h |
| display_name | token |
| entity_id | n/a |
| expire_time | 2025-08-17T11:14:56.773281+02:00 |
| explicit_max_ttl | 24h |
| id | hvs.CAESIIpt |
| issue_time | 2025-08-16T11:14:56.77329+02:00 |
| meta | |
| num_uses | 0 |
| orphan | true |
| path | auth/token/create |
| policies | [default kv2-management] |
| renewable | true |
| ttl | 23h59m44s |
| type | service |
vault token lookup
토큰에 대한 모든 운영 및 메타데이터 정보를 표시합니다. 여기에는 생성 시점, 만료 타임스탬프, 유형, 관계, 연결된 정책 및 접근 경로가 포함됩니다. 토큰은 값 자체 또는 액세서로 지정할 수 있습니다.
vault token lookup $TOKEN
로그 출력 (예시)
| Key | Value |
|---|---|
| accessor | e1FpV6OfhwrqwE8LWF0pldTN |
| creation_time | 1755361260 |
| creation_ttl | 1h |
| display_name | token |
| entity_id | n/a |
| expire_time | 2025-08-16T18:52:24.218038+02:00 |
| explicit_max_ttl | 24h |
| id | hvs.CAESIPEd |
| issue_time | 2025-08-16T17:52:24.218038+02:00 |
| … | … |
(추가 필드들은 간략히 생략되었습니다.)