如何创建Azure Policy禁止为Service Bus资源添加ReadOnly锁?
解决Azure Policy禁止Service Bus添加ReadOnly锁的问题
你之前的Policy失效的核心原因是:资源锁(Microsoft.Authorization/locks)是独立的Azure资源类型,并非Service Bus Namespace的属性字段,所以直接检查目标资源的locks/level字段找不到匹配项。
正确的做法是针对锁资源本身创建Policy,同时限定该锁的作用范围不能包含Service Bus Namespace。以下是可用的Policy配置:
{ "mode": "All", "policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Authorization/locks" }, { "field": "Microsoft.Authorization/locks/level", "equals": "ReadOnly" }, { "field": "Microsoft.Authorization/locks/scope", "contains": "Microsoft.ServiceBus/namespaces" } ] }, "then": { "effect": "deny" } }, "parameters": {} }
配置说明
type检查:明确Policy作用于锁资源类型,而非Service Bus本身locks/level检查:锁定ReadOnly级别的锁操作locks/scope检查:限定锁的作用范围包含Service Bus Namespace时触发拦截(即禁止给Service Bus Namespace添加该锁)
分配注意事项
- 分配Policy时,作用范围选订阅或资源组即可,无需直接指定Service Bus Namespace作为目标
- 确保Policy分配的身份具备基础的Policy执行权限(默认分配权限即可满足)
- 测试时尝试给Service Bus Namespace添加ReadOnly锁,此时会被Policy拦截
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

