如何配置Azure内置标签策略仅评估新创建资源?
如何让Azure内置标签策略仅评估新创建的资源?
你启用的Azure内置策略【Require a tag on resources】确实会同时对新创建资源和现有资源进行标签合规性检查,导致无标签的现有资源被标记为不合规。由于内置策略无法直接修改,你需要复制该策略并自定义规则,实现仅针对新资源(创建/更新操作)进行评估的效果。
现有策略的问题
原策略的规则仅检查标签是否存在,没有区分操作类型:
{ "properties": { "displayName": "Require a tag on resources", "policyType": "BuiltIn", "mode": "Indexed", "description": "Enforces existence of a tag. Does not apply to resource groups.", "metadata": { "version": "1.0.1", "category": "Tags" }, "version": "1.0.1", "parameters": { "tagName": { "type": "String", "metadata": { "displayName": "Tag Name", "description": "Name of the tag, such as 'environment'" } } }, "policyRule": { "if": { "field": "[concat('tags[', parameters('tagName'), ']')]", "exists": "false" }, "then": { "effect": "deny" } }, "versions": [ "1.0.1" ] }, "id": "/providers/Microsoft.Authorization/policyDefinitions/871b6d14-10aa-478d-b590-94f262ecfa99", "type": "Microsoft.Authorization/policyDefinitions", "name": "871b6d14-10aa-478d-b590-94f262ecfa99" }
自定义策略实现仅针对新资源检查
复制上述内置策略后,修改policyRule部分,添加对操作类型的判断,仅在资源创建/更新(*/write动作)时检查标签:
"policyRule": { "if": { "allOf": [ { "field": "[concat('tags[', parameters('tagName'), ']')]", "exists": "false" }, { "field": "requestContext.action", "like": "*/write" } ] }, "then": { "effect": "deny" } }
关键说明
- 操作类型匹配:
requestContext.action字段用于识别当前触发策略的操作,*/write涵盖所有资源的创建和更新动作,确保只有在资源被新建或修改时才执行标签检查,现有资源的合规评估不会触发该规则。 - 内置策略不可直接编辑:必须通过Azure门户的策略定义界面,找到该内置策略并点击「复制」,修改规则后保存为自定义策略,再重新分配到目标范围。
- 精细化控制(可选):如果仅需要阻止无标签资源的创建(允许更新现有无标签资源),可以将
like改为equals并指定具体资源类型的创建动作(如Microsoft.Compute/virtualMachines/write),但这种方式需要针对不同资源类型单独配置,通用性较差,一般推荐使用*/write覆盖创建和更新场景。
内容的提问来源于stack exchange,提问作者Abdul Khadar
相关产品推荐
相关产品推荐

