Hashicorp Vault:通过 CLI 和 API 的令牌管理

发布: (2025年12月11日 GMT+8 14:53)
6 min read
原文: Dev.to

Source: Dev.to

介绍

在与 HashiCorp Vault 交互时,令牌是进行身份验证和授权的手段。令牌由不同的引擎提供,并关联策略和角色,赋予对 Vault 按路径受控功能的访问权限。

本文详细说明了令牌管理的所有 CLI 与 API 选项,并提供了多个动手示例命令,演示如何创建具有特定属性的令牌。背景材料来源于官方 HashiCorp Vault 文档中关于 token CLI 命令和 Token 认证方法(API)的说明。

令牌生命周期

  1. 创建 – 通过认证方法、向已定义的密钥存储发出 vault write 命令,或通过命令行创建令牌。静态信息和元数据会随令牌一起存储。
  2. 更新 – 令牌唯一可更新的值是其过期日期。如果令牌可续期、仍然有效且未超过显式定义的 max-ttl,则可以续期。新的过期时间为当前时间加上其定义的 TTL。
  3. 过期 / 撤销 – 除根令牌外,所有令牌在其 TTL 到期或被撤销后即失效。其关联的数据会被删除,任何与该令牌绑定的租约也会被移除。

Vault 令牌命令组

vault token 命令组实现了与令牌生命周期相对应的交互:

CommandDescription
create在当前令牌的上下文中创建新令牌(在成功执行 vault login 后隐式存储,或通过 VAULT_TOKEN 设置)。
capabilities打印特定路径的令牌能力(策略查询)。
lookup显示关于令牌或令牌访问器的全部信息。
renew续期尚未过期且未超出使用限制的令牌。
revoke立即撤销令牌,阻止其进一步使用。子令牌也会被撤销。

注意: 令牌值长度为 92 个字符,但在下面的示例中仅显示前 8 个字符。

vault token create

在当前令牌的上下文中实例化一个受管理的新令牌。默认情况下,会生成一个子令牌,拥有与父令牌相同的策略。策略可以被限制但不能被扩展;父令牌必须具备足够的权限。可以显式指定 TTL 来创建可续期的令牌;否则令牌不可续期。无论哪种情况,max-ttl 都限制了最大有效时间范围。

可用标志

类型

  • -type – 创建 service(服务)或 batch(批处理)令牌。

能力

  • -orphan – 移除与用于创建的令牌的关联。生成的令牌独立存在,可作为其他令牌的父令牌。
  • -renewable – 令牌默认可续期;使用此标志可禁用续期。

访问控制

  • -policy – 将指定策略附加到令牌。多次使用该标志可附加多个策略。
  • -role – 为令牌分配角色(特定于认证的数据结构),继承角色中定义的所有属性。

有效期

  • -explicit-max-ttl – 为令牌设置一个绝对、不可扩展的持续时间。
  • -period – 当续期时延长令牌 TTL 的时长(周期性令牌)。
  • -ttl – 初始 TTL 值。若省略,则使用引擎或 Vault 基础配置的 TTL。
  • -use-limit – 令牌可用于执行操作的绝对次数。

标识

  • -id – 提供自定义令牌 ID(默认是随机的 92 字符 base62 字符串)。
  • -display-name – 人类可读的元数据。
  • -entity-alias – 将令牌链接到已定义的别名(必须在 allowed_entity_aliases 中被允许)。
  • -metadata – 用于标识的额外键值对(可重复)。

示例创建

多策略令牌

vault token create -policy=secret-management -policy=kv2-management

日志输出

KeyValue
accessor32OK6kKt2rk7mw4jQ0ZbXT3E
creation_time1753526225
creation_ttl0s
display_nameroot
entity_idn/a
expire_time
explicit_max_ttl0s
idhvs.HTMdJOhL
meta
num_uses0
orphantrue
pathauth/token/root
policies[root]
ttl0s
typeservice

带有限续期的周期性令牌

vault token create -policy=secret-management -period=24h -use-limit=10

日志输出

KeyValue
accessorinIuUf1uTkYjxHBxOOVg442Q
creation_time1755334894
creation_ttl24h
display_nametoken
entity_idn/a
expire_time2025-08-17T11:01:34.540229+02:00
explicit_max_ttl0s
idhvs.CAESIOam
issue_time2025-08-16T11:01:34.540235+02:00
meta
num_uses10
orphanfalse
pathauth/token/create
period24h
policies[default secret-management]
renewabletrue
ttl23h59m39s
typeservice

批处理令牌

vault token create -policy=kv2-management -type=batch -ttl=1h

日志输出

KeyValue
accessorn/a
creation_time1755335083
creation_ttl1h
display_nametoken
entity_idn/a
expire_time2025-08-16T12:04:43+02:00
explicit_max_ttl0s
idhvb.AAAAAQLX
issue_time2025-08-16T11:04:43+02:00
meta
num_uses0
orphantrue
pathauth/token/create
policies[default kv2-management]
renewablefalse
ttl59m45s
typebatch

带显式 Max TTL 的孤儿令牌

vault token create -policy=kv2-management -orphan -explicit-max-ttl=24h

日志输出

KeyValue
accessoraiLPJrzGBU0lC1QdKDN1gHak
creation_time1755335696
creation_ttl24h
display_nametoken
entity_idn/a
expire_time2025-08-17T11:14:56.773281+02:00
explicit_max_ttl24h
idhvs.CAESIIpt
issue_time2025-08-16T11:14:56.77329+02:00
meta
num_uses0
orphantrue
pathauth/token/create
policies[default kv2-management]
renewabletrue
ttl23h59m44s
typeservice

vault token lookup

显示关于令牌的所有运行时信息和元数据,包括创建时间、过期时间戳、类型、关系、附加的策略以及访问路径。令牌可以直接使用其值或使用访问器来指定。

vault token lookup $TOKEN

日志输出(示例)

KeyValue
accessore1FpV6OfhwrqwE8LWF0pldTN
creation_time1755361260
creation_ttl1h
display_nametoken
entity_idn/a
expire_time2025-08-16T18:52:24.218038+02:00
explicit_max_ttl24h
idhvs.CAESIPEd
issue_time2025-08-16T17:52:24.218038+02:00

(为简洁起见,省略了其他字段。)

Back to Blog

相关文章

阅读更多 »