Azure中如何通过策略定义防止资源组特定标签被编辑/删除?
解决资源组特定标签不可编辑/删除的问题
你现有策略的问题主要有两点:
- 类型字段里的
Microsoft.Resources/subscriptions/resourceGroups未加引号,属于语法错误,导致策略无法正确生效。 - 规则逻辑偏差:当前规则只要资源组存在
my-lock标签,就直接拒绝所有标签相关操作和资源组操作,既没区分操作类型,也没判断是否真的修改了目标标签。
要实现禁止编辑/删除特定标签,但允许添加其他标签的需求,需要精准匹配「修改/删除my-lock标签」的操作,正确的策略定义如下:
"policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Resources/subscriptions/resourceGroups" }, { "anyOf": [ { "not": { "field": "tags['my-lock']", "exists": true } }, { "not": { "field": "tags['my-lock']", "equals": "my-lock" } } ] }, { "field": "action", "in": [ "Microsoft.Resources/subscriptions/resourceGroups/write", "Microsoft.Resources/tags/write" ] } ] }, "then": { "effect": "deny" } }
策略逻辑说明:
- 首先匹配目标类型为资源组(
Microsoft.Resources/subscriptions/resourceGroups) - 然后判断两种需要阻止的场景:
- 请求中的标签里不存在
my-lock键(即试图删除该标签) - 请求中的
my-lock标签值不等于原始值my-lock(即试图修改该标签)
- 请求中的标签里不存在
- 最后匹配触发操作:资源组写入操作或标签写入操作
- 满足以上所有条件时,执行拒绝操作
这样设置后,用户可以正常添加、修改其他标签,但一旦尝试删除或修改my-lock标签,就会被策略阻止。
内容的提问来源于stack exchange,提问作者Tom Morgan
相关产品推荐
相关产品推荐

