You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hashicorp Vault主机密钥签名ACL模板配置问题排查

问题分析与解决方案

为什么原策略不生效?

你的ACL策略里的模板变量格式错误,导致Vault无法正确解析实体别名的值:

  1. 模板变量的键名错误:{{identity.entity.aliases.auth_cert_XXX.name}} 中的auth_cert_XXX不是合法的键名。引用实体别名时,必须使用认证方法的accessor(认证方法的唯一标识符),或者用认证方法的挂载路径(需用索引语法处理斜杠)。
  2. ACL模板渲染可能被禁用:如果Vault配置中开启了disable_acl_policy_templating = true,模板变量会被直接当作字符串处理,无法解析为实体别名。

解决步骤

1. 确认ACL模板渲染状态

检查Vault配置文件,确保未设置disable_acl_policy_templating = true。如果有该配置,改为disable_acl_policy_templating = false后重启Vault。

2. 获取认证方法的标识符

执行以下命令查看你的cert认证方法的accessor和挂载路径:

vault auth list -format=json

输出示例:

{
  "cert/": {
    "accessor": "cert_abc123",
    "type": "cert",
    "description": "Certificate authentication"
  }
}

记录下accessor(如cert_abc123)或挂载路径(如cert/)。

3. 修正ACL策略

根据获取的标识符,修改策略中的valid_principals模板:

方式一:使用认证方法accessor

path "ssh_host_signer/sign/*" {
  capabilities = ["create", "update"]
  required_parameters = ["cert_type", "public_key", "valid_principals"]
  allowed_parameters = {
    "cert_type" = ["host"],
    "public_key" = [],
    "valid_principals" = ["{{identity.entity.aliases.cert_abc123.name}}"]
  }
}

方式二:使用认证方法挂载路径

path "ssh_host_signer/sign/*" {
  capabilities = ["create", "update"]
  required_parameters = ["cert_type", "public_key", "valid_principals"]
  allowed_parameters = {
    "cert_type" = ["host"],
    "public_key" = [],
    "valid_principals" = ["{{identity.entity.aliases[\"cert/\"].name}}"]
  }
}

4. 验证策略

重新应用修改后的策略,执行你原来的签名命令测试:

vault write ssh_host_signer/sign/host cert_type=host public_key=@/etc/ssh/ssh_host_rsa_key.pub valid_principals=hostname.internal

额外验证

确保当前使用的token关联的实体别名确实为hostname.internal:

  1. 执行vault token lookup -format=json获取entity_id
  2. 执行vault read identity/entity/id/<entity_id>查看实体的别名列表,确认name字段匹配。

内容的提问来源于stack exchange,提问作者jonny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:26:31