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

如何允许Azure用户创建资源组且无法查看其他资源组?

如何让Azure用户创建自己的资源组且无法查看其他资源组

这个需求在Azure RBAC配置里挺常见的,我来给你一步步拆解怎么实现——核心就是既要给用户开创建资源组的权限,又要精准限制他们只能看到自己建的那些组。

一、先搞懂核心逻辑

要实现这个目标,我们需要组合两个RBAC配置:

  1. 给用户订阅级别的权限,允许他们创建资源组(毕竟资源组是订阅下的顶层资源)
  2. 通过拒绝分配+条件,阻止用户查看不属于自己创建的资源组

直接用默认角色肯定不行,要么权限太宽(比如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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:29:49