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

如何基于Azure AD组动态设置Vault SSH PKI的allowed_users值?

动态关联Azure AD组到Vault SSH证书的Allowed_Users

好问题!我之前在企业环境里正好折腾过Vault+Azure AD的SSH证书认证方案,完全懂你不想维护一堆静态角色的痛点,下面给你分享最优的动态配置思路:

核心方案:利用Vault身份实体的模板表达式

Vault确实支持在SSH证书角色的配置中使用身份实体属性的模板渲染,你提到的{{identity.entity.aliases.<ACCESSOR>.group_names}}思路完全可行,具体实现步骤如下:

1. 确认Azure AD组已同步到Vault身份实体

首先得保证你的OIDC认证方法已经正确配置了Azure AD组的同步:

  • 检查OIDC配置里的groups_claim参数,应该指向Azure AD返回的组声明(通常是groups):
    vault read auth/oidc/config
    
  • 同时,在你的OIDC认证角色中要开启组关联,确保groups字段已配置(比如映射到Azure AD的组ID或显示名)。

2. 获取OIDC认证方法的Accessor

你需要先拿到OIDC auth method的accessor值,用来定位身份实体中的AD组信息:

vault auth list -format=json | jq '.["oidc/"].accessor'

输出会是类似oidc_abc123xyz的字符串,记下来后面要用。

3. 在SSH证书角色中配置动态Allowed_Users

创建或更新SSH证书角色时,用Go模板语法引用AD组信息,适配不同场景:

  • 如果要直接将AD组名作为允许的SSH用户主体(比如AD组prod-admin对应SSH用户prod-admin):
    vault write ssh/roles/prod-role \
      allowed_users="{{identity.entity.aliases.oidc_abc123xyz.group_names | join(",")}}" \
      key_type=ca \
      default_user=ubuntu \
      ttl=1h
    
  • 如果需要将组名转换为前缀(比如AD组dev-team允许签dev-*的用户),可以用Go模板的循环语法:
    vault write ssh/roles/dev-role \
      allowed_users="{{range identity.entity.aliases.oidc_abc123xyz.group_names}}{{.}}-* {{end}}" \
      key_type=ca \
      default_user=ubuntu \
      ttl=1h
    

验证配置是否生效

你可以先通过OIDC认证登录Vault,然后查看自己的身份实体信息,确认组信息已同步:

vault read identity/entity/name/YOUR_AD_USERNAME

在输出的aliases字段下,你应该能看到group_names列表包含你的AD组,之后请求SSH证书时,allowed_users会自动渲染为对应的组相关值。

为什么这个方案比静态角色更优

  • 完全自动化:AD组的增删改会自动同步到Vault,不需要手动更新SSH角色配置
  • 减少维护成本:不用为每个组组合创建单独的SSH角色,避免因需求变更频繁调整
  • 更贴合权限模型:直接关联AD的权限分组,符合企业统一身份管理的思路

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:52:40