在Bicep中使用同一角色的订阅与资源组角色ID的差异
Azure RBAC角色分配:订阅级与资源组级角色ID的差异
以Azure内置角色Key Vault Secrets User为例,在ARM模板的RBAC角色分配中,可通过订阅级或资源组级的角色ID来引用该角色,示例模板代码如下:
resource keyVaultRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { name: guid( resourceGroup().id, resourceId('Microsoft.Authorization/roleDefinitions', '4633458b-17de-408a-b874-0445c86b69e6') ) scope: keyVault properties: { principalId: appServiceApp.identity.principalId roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '4633458b-17de-408a-b874-0445c86b69e6') } }
两种层级的角色ID示例:
- 订阅级角色ID:
/subscriptions/ad47cf56-0e91-421b-9886-ea29cb833788/providers/Microsoft.Authorization/roleDefinitions/4633458b-17de-408a-b874-0445c86b69e6
- 资源组级角色ID:
/subscriptions/ad47cf56-0e91-421b-9886-ea29cb833788/resourceGroups/TodoAppTest/providers/Microsoft.Authorization/roleDefinitions/4633458b-17de-408a-b874-0445c86b69e6
两者的核心差异
本质指向同一角色:两种ID末尾的角色唯一标识符(
4633458b-17de-408a-b874-0445c86b69e6)完全一致,说明它们指向的是同一个内置角色定义,对应的权限集合没有任何区别。仅体现层级路径差异:
- 订阅级ID包含完整的订阅路径,代表该角色定义的注册层级是订阅(所有Azure内置角色默认都在订阅层级存在)
- 资源组级ID多了资源组路径,只是角色定义在资源组层级的引用形式,并不会在资源组下创建新的角色定义副本
实际使用无功能差异:
- 在ARM模板中,
resourceId()函数如果不指定资源组参数,默认生成订阅级ID;指定资源组则生成资源组级ID - 角色分配的权限生效范围完全由模板中的
scope字段决定(比如示例中的KeyVault资源),和角色ID的层级无关 - 资源组级ID仅在可读性上更贴近当前操作的资源组上下文,功能上和订阅级ID等价
- 在ARM模板中,
内容的提问来源于stack exchange,提问作者Shuzheng
相关产品推荐
相关产品推荐

