Hashicorp Vault:细粒度访问控制与策略

发布: (2025年12月31日 GMT+8 21:54)
5 分钟阅读
原文: Dev.to

Source: Dev.to

介绍

HashiCorp Vault 是一个灵活的机密管理引擎,提供多种身份验证和授权机制。它存储诸如凭证、密码或证书等机密。要使用 Vault 的功能,客户端必须先进行身份验证,获取访问令牌以及附加在该令牌上的策略。这些策略决定了在哪些挂载路径上允许哪些操作。

本文详细介绍 Vault 策略,展示如何使用 HCL 编写它们,解释操作动词和路径模式,并提供实用示例。技术上下文为 hashicorp_vault_v1.21.1(发布于 2025‑11‑18);这些示例对更高版本仍然有效。

策略基础

  • 策略 编码了在特定挂载路径上允许的操作(例如 createreaddelete)。
  • 所有 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"
}

路径通配符

SymbolMeaning
+匹配 一个 路径段。例如: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 – 明确阻止对资源的所有访问。

sudodeny 外,所有动词都直接对应 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 语法编写的策略实现细粒度访问控制。策略包括:

  1. 路径声明 – 固定路径或支持通配符。
  2. 能力 – 如 createreaddeletelistsudodeny 等动词。

策略绑定到令牌;当令牌访问某个路径时,Vault 按优先级顺序解析所有适用的策略,以确定请求是否被允许。上述示例展示了如何管理认证方法、配置 KV v2 密钥引擎以及签发孤儿令牌。

Back to Blog

相关文章

阅读更多 »

RGB LED 支线任务 💡

markdown !Jennifer Davishttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex:我为何构建

介绍 大家好。今天我想分享一下我是谁、我在构建什么以及为什么。 早期职业生涯与倦怠 我在 17 年前开始我的 developer 生涯……