Azure管理组级别权限分配限制政策问题求助
Azure Policy 限制RBAC权限分配范围解决方案
你的核心问题是现有Policy没拦住管理组级别的角色分配,根源在于原规则逻辑存在漏洞,且Policy的分配范围未覆盖管理组,导致规则不生效。
问题分析
- 原规则中使用
subscription().id在管理组上下文下会返回空值,导致concat(subscription().id,'/resourceGroups')结果异常,无法正确识别管理组级别的权限分配操作。 - 若Policy仅分配在订阅级别,管理组本身的操作不受该Policy约束,自然无法拦截管理组的权限分配行为。
修正后的Policy规则
以下规则会拒绝所有非资源组/资源级别的角色分配(包括订阅级别和管理组级别):
"policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Authorization/roleAssignments" }, { "value": "[contains(field('Microsoft.Authorization/roleAssignments/scope'), '/resourceGroups/')]", "equals": "false" } ] }, "then": { "effect": "Deny" } }
逻辑说明:
- 资源组级别的scope格式为
/subscriptions/{subId}/resourceGroups/{rgName},资源级别的scope会在此基础上追加路径,两者都包含/resourceGroups/字符串,因此会被允许。 - 订阅级别scope仅为
/subscriptions/{subId},管理组级别scope为/providers/Microsoft.Management/managementGroups/{mgName},均不包含/resourceGroups/,因此会被拒绝。
关键配置步骤
必须将该Policy分配到目标管理组级别,而非单个订阅。只有这样,管理组本身的角色分配操作才会被这个Policy约束。
内容的提问来源于stack exchange,提问作者Jacek Czerniak
相关产品推荐
相关产品推荐

