如何允许Azure用户创建资源组且无法查看其他资源组?
如何让Azure用户创建自己的资源组且无法查看其他资源组
这个需求在Azure RBAC配置里挺常见的,我来给你一步步拆解怎么实现——核心就是既要给用户开创建资源组的权限,又要精准限制他们只能看到自己建的那些组。
一、先搞懂核心逻辑
要实现这个目标,我们需要组合两个RBAC配置:
- 给用户订阅级别的权限,允许他们创建资源组(毕竟资源组是订阅下的顶层资源)
- 通过拒绝分配+条件,阻止用户查看不属于自己创建的资源组
直接用默认角色肯定不行,要么权限太宽(比如Resource Group Contributor会让用户看到所有资源组),要么权限不够,所以得自定义角色+拒绝规则配合。
二、步骤1:创建自定义角色,允许创建资源组
我们先做一个自定义角色,只给用户必要的权限:创建资源组,以及查看自己创建的资源组。
用Azure Portal操作:
- 登录Azure Portal,找到你的目标订阅,进入「访问控制(IAM)」→「角色」→「添加」→「自定义角色」
- 基本信息里填个好记的名字,比如
Custom RG Creator,描述写“允许创建资源组并管理自身创建的资源组” - 权限搜索添加这两个(搜权限名就能找到):
Microsoft.Resources/subscriptions/resourceGroups/write:负责创建资源组Microsoft.Resources/subscriptions/resourceGroups/read:创建后能查看自己的资源组
(如果需要用户能管理自己资源组里的资源,可以再加Microsoft.Resources/subscriptions/resourceGroups/resources/*,按需添加)
- 分配范围选目标订阅,最后保存角色
用Azure CLI操作:
先写个JSON配置文件(比如custom-rg-role.json):
{ "Name": "Custom RG Creator", "IsCustom": true, "Description": "Allows creating resource groups and managing own resource groups", "Actions": [ "Microsoft.Resources/subscriptions/resourceGroups/write", "Microsoft.Resources/subscriptions/resourceGroups/read" ], "NotActions": [], "AssignableScopes": [ "/subscriptions/你的订阅ID" ] }
然后运行命令创建角色:
az role definition create --role-definition custom-rg-role.json
三、步骤2:添加拒绝分配,限制查看其他资源组
现在用户能创建资源组,但默认还是能看到订阅下所有组,所以我们要加个拒绝规则,让他们只能看自己建的。
用Azure Portal操作:
- 回到订阅的「访问控制(IAM)」→「拒绝分配」→「添加拒绝分配」
- 基本信息填名字,比如
Deny View Others' RGs - 分配范围选目标订阅
- 拒绝权限里添加
Microsoft.Resources/subscriptions/resourceGroups/read(拒绝读取资源组) - 分配对象选你要设置的用户/用户组
- 关键步骤:加条件,让拒绝规则只对“非用户创建的资源组”生效:
点击「添加条件」,在编辑器里设置规则:资源 → 资源组 → 创建者 → 等于 → 用户ID
(直接选变量里的「用户」就行,不用手动填ID) - 最后保存拒绝分配
用Azure CLI操作:
先获取用户的Object ID:
az ad user show --id 目标用户邮箱 --query id -o tsv
然后写拒绝分配的JSON(比如deny-other-rgs.json):
{ "Name": "DenyViewOthersRGs", "Description": "Denies viewing resource groups not created by the user", "Permissions": [ { "Actions": [], "NotActions": [], "DataActions": [], "NotDataActions": [], "Action": "Microsoft.Resources/subscriptions/resourceGroups/read", "Effect": "Deny" } ], "AssignableScopes": ["/subscriptions/你的订阅ID"], "Principals": [ { "Id": "刚才获取的用户Object ID", "Type": "User" } ], "Condition": "@Resource[Microsoft.Resources/subscriptions/resourceGroups, 'createdBy'] == @Principal.Id", "ConditionVersion": "2.0" }
运行命令创建拒绝分配:
az role assignment create --role-definition deny-other-rgs.json
四、验证效果
用目标用户登录Azure Portal试试:
- 尝试创建新资源组:应该能成功,并且能在资源组列表里看到自己刚建的
- 查看资源组列表:只会显示自己创建的那些,其他用户的组不会出现
- 直接输入其他资源组的URL访问:会收到“权限不足”的提示
几个注意点
- 拒绝分配的条件依赖于Azure的资源日志,默认是开启的,不用额外配置
- 如果是给用户组配置,条件里的
@Principal.Id会自动匹配当前登录用户的ID,不用改规则 - 自定义角色的权限可以按需调整,比如要允许用户删除自己的资源组,就加
Microsoft.Resources/subscriptions/resourceGroups/delete权限
内容的提问来源于stack exchange,提问作者macchiavalley
相关产品推荐
相关产品推荐

