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

基于资源组的Bicep RBAC权限分配改造需求(原订阅级已实现)

资源组级RBAC角色分配改造方案

需求背景

已实现订阅级别为对象ID分配RBAC角色的代码,支持角色集中管理且运行正常。但订阅覆盖多个团队,若为组授予订阅级Contributor权限,会导致其访问其他团队的资源,因此需要将代码改造为资源组级别,同时保留原有集中管理功能。

修改后的代码文件

1. Main.bicep(资源组级入口)

param principalID string
param principalType string
param roleIDs array
param resourceGroupName string

// 切换到资源组级别作用域
targetScope = 'resourceGroup'

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = [for (roleID, i) in roleIDs: {
  // 基于资源组ID生成唯一GUID,避免跨资源组冲突
  name: guid(resourceGroup().id, principalID, roleID)
  properties: {
    roleDefinitionId: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/${roleID}'
    principalId: principalID
    principalType: principalType
  }
}]

2. auth_roleassignment_rg.module.bicep(资源组级分配模块)

param principalID string
param principalType string
param roleIDs array

// 模块作用域设为资源组
targetScope = 'resourceGroup'

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = [for (roleID, i) in roleIDs: {
  name: guid(resourceGroup().id, principalID, roleID)
  properties: {
    roleDefinitionId: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/${roleID}'
    principalId: principalID
    principalType: principalType
  }
}]

3. var_roleAssignmentInfo_module.bicep(集中管理入口模块)

param assignments array
targetScope = 'subscription'

// 遍历分配项,为每个项指定对应的资源组作用域
module RBACAssignments './auth_roleassignment_rg.module.bicep' = [for assignment in assignments: {
  name: 'RBACAssignmentModule-${assignment.resourceGroupName}-${assignment.principalID}'
  // 绑定目标资源组作为模块作用域
  scope: resourceGroup(assignment.resourceGroupName)
  params: {
    principalID: assignment.principalID
    principalType: assignment.principalType
    roleIDs: assignment.roleIDs
  }
}]

修改后的参数文件 roles.json

新增resourceGroupName字段,确保权限仅作用于指定团队的资源组:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "assignments": {
            "value": [
                {
                    "resourceGroupName": "team-a-resource-group",
                    "principalID": "xxx",
                    "principalType": "Group",
                    "roleIDs": [
                        "b24988ac-6180-42a0-ab88-20f7382dd24c", // Contributor
                        "00482a5a-887f-4fb3-b363-3b7fe8e74483", // Attestation Reader
                        "fd1bd22b-8476-40bc-a0bc-69b95687b9f3"  // Key Vault Administrator
                    ]
                },
                {
                    "resourceGroupName": "team-b-resource-group",
                    "principalID": "xxx",
                    "principalType": "ServicePrincipal",
                    "roleIDs": [
                        "b86a8fe4-44ce-4948-aee5-eccb2c155cd7" // Log Analytics Contributor
                    ]
                }
            ]
        }
    }
}

关键修改点说明

  • 作用域调整:将核心模块的targetScope从subscription改为resourceGroup,限制权限范围
  • 唯一标识生成:用resourceGroup().id替代subscription().id生成角色分配名称,避免不同资源组间的ID冲突
  • 资源组绑定:在集中管理模块中通过scope: resourceGroup(...)为每个分配项指定目标资源组
  • 参数扩展:在参数文件中新增资源组名称字段,实现按团队资源组精准分配权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:53:17