Hashicorp Vault:细粒度访问控制与策略
Source: Dev.to
介绍
HashiCorp Vault 是一个灵活的机密管理引擎,提供多种身份验证和授权机制。它存储诸如凭证、密码或证书等机密。要使用 Vault 的功能,客户端必须先进行身份验证,获取访问令牌以及附加在该令牌上的策略。这些策略决定了在哪些挂载路径上允许哪些操作。
本文详细介绍 Vault 策略,展示如何使用 HCL 编写它们,解释操作动词和路径模式,并提供实用示例。技术上下文为 hashicorp_vault_v1.21.1(发布于 2025‑11‑18);这些示例对更高版本仍然有效。
策略基础
- 策略 编码了在特定挂载路径上允许的操作(例如
create、read、delete)。 - 所有 Vault 功能都通过挂载路径访问,无论是通过 CLI 还是 HTTP API。
- 如果令牌缺少允许给定路径/操作的策略,请求将被拒绝。
- Vault 内置了两种策略:
- root – 对所有路径和操作拥有完整访问权限;在初始设置时附加到根令牌。
- default – 附加到所有令牌(除非被移除),并管理令牌自身的自引用查询和数据访问。
当一个令牌拥有多个策略且它们的路径声明重叠时,Vault 会根据其优先级匹配规则进行解析,然后将请求的操作与合并后的能力进行检查。
某些路径只能通过 root 策略访问,或在该路径上授予 sudo 能力时才能访问(请参阅有关根保护 API 端点的文档)。
策略语法 (HCL)
策略使用 HashiCorp 配置语言 (HCL) 编写。最小结构包括一个 path 块和一个 capabilities 列表:
path "PATH" {
capabilities = ["cap"]
}
高级选项
可以显式 允许、拒绝 或 必需 HTTP API 端点的附加参数:
path "PATH" {
capabilities = ["cap"]
allowed_parameters = {
"key" = ["value1", "value2"]
}
denied_parameters = {
"key" = ["value3"]
}
required_parameters = {
"key" = ["value4"]
}
}
响应包装
对于支持响应包装(以保护敏感数据)的端点,您可以指定 TTL:
path "PATH" {
capabilities = ["cap"]
min_wrapping_ttl = "5m"
max_wrapping_ttl = "1h"
}
路径通配符
| Symbol | Meaning |
|---|---|
+ | 匹配 一个 路径段。例如:path "auth/token/+" 匹配 /auth/token/create,但不匹配 /auth/token/create/role。 |
* | 匹配 零个或多个 段。例如:path "auth/token/*" 匹配任何以 /auth/token 开头的路径,如 /auth/token/create/role 或 /auth/token/roles/role。 |
能力(动作动词)
capabilities 属性是一个动词列表,用于控制访问:
create– 添加一个新的实体定义。read– 检索实体定义。update/patch– 修改已有的实体定义(两者映射到相同的 CLI 命令vault patch)。delete– 删除实体定义。list– 按名称或 ID 列举实体定义(获取完整细节仍需read权限)。sudo– 授予对实体的全部访问权限,包括受根保护的 API 端点。deny– 明确阻止对资源的所有访问。
除 sudo 和 deny 外,所有动词都直接对应 HTTP 方法或 CLI 命令。
示例策略
1. 管理 KV v2 密钥引擎
path "kv2/*" {
capabilities = ["create", "read", "update", "delete"]
}
2. 管理认证方法
path "sys/auth" {
capabilities = ["create", "read", "update", "delete", "sudo"]
}
path "sys/auth/+/tune" {
capabilities = ["create", "read", "update", "delete", "sudo"]
}
3. 创建孤儿令牌
path "auth/token/create" {
capabilities = ["create", "sudo"]
}
结论
HashiCorp Vault 通过使用简洁的 HCL 语法编写的策略实现细粒度访问控制。策略包括:
- 路径声明 – 固定路径或支持通配符。
- 能力 – 如
create、read、delete、list、sudo或deny等动词。
策略绑定到令牌;当令牌访问某个路径时,Vault 按优先级顺序解析所有适用的策略,以确定请求是否被允许。上述示例展示了如何管理认证方法、配置 KV v2 密钥引擎以及签发孤儿令牌。