如何配置Azure允许工程师仅为托管标识/服务主体分配RBAC角色?
限制Azure工程师仅为系统标识分配RBAC权限的配置方案
核心思路
通过自定义RBAC角色+角色分配条件实现权限精细化控制:
- 自定义角色仅保留分配/删除RBAC角色的必要动作
- 利用角色分配条件过滤可操作的主体类型,仅允许托管标识(Managed Identity)和服务主体(Service Principal),禁止普通AD用户/组
具体配置步骤
1. 编写自定义RBAC角色定义JSON
创建仅允许对系统标识进行RBAC操作的角色定义,示例如下:
{ "properties": { "roleName": "系统标识RBAC分配专员", "description": "仅允许为托管标识、服务主体分配/删除RBAC角色,无法操作普通AD用户/组", "assignableScopes": [ "/subscriptions/你的订阅ID" // 可替换为特定资源组路径,如"/subscriptions/xxx/resourceGroups/xxx" ], "permissions": [ { "actions": [ "Microsoft.Authorization/roleAssignments/write", "Microsoft.Authorization/roleAssignments/delete", "Microsoft.Authorization/roleDefinitions/read" // 允许查看可用角色定义 ], "notActions": [], "dataActions": [], "notDataActions": [] } ], "conditions": [ { "version": "2.0", "operator": "In", "target": "Microsoft.Authorization/roleAssignments/principalType", "values": [ "ServicePrincipal", "ManagedIdentity" ] } ] } }
2. 创建自定义RBAC角色
使用Azure CLI执行命令创建角色:
az role definition create --role-definition ./custom-role.json
3. 分配自定义角色给工程师团队
将创建好的角色分配给对应的工程师AD组,限定在目标资源范围(如订阅、资源组):
- 登录Azure门户,进入目标资源组/订阅的「访问控制(IAM)」页面
- 点击「添加」→「添加角色分配」
- 搜索并选择刚才创建的「系统标识RBAC分配专员」角色
- 选择需要授权的工程师AD组,完成分配
验证配置效果
- 使用工程师账号尝试给普通AD用户/组分配RBAC角色,会收到「权限不足」的提示
- 尝试给托管标识(用户分配/系统分配)或服务主体分配角色,可正常完成操作
注意事项
- 确保工程师没有其他包含宽泛RBAC权限的内置角色(如「用户访问管理员」),否则自定义角色的限制会被覆盖
- 角色分配条件仅对支持条件的RBAC动作生效,当前
Microsoft.Authorization/roleAssignments/write/delete已支持主体类型过滤 - 可根据业务需求调整角色的
assignableScopes,实现不同项目/资源的权限隔离
内容的提问来源于stack exchange,提问作者STW
相关产品推荐
相关产品推荐

