如何修改现有Azure Policy定义以整合指定的allOf/anyOf规则?
Azure Policy 定义修改方案
你需要将指定的资源组标签检查规则(排除以MC_开头的托管资源组)整合到两个现有Policy中,具体修改方式如下:
一、修改含allOf逻辑的虚拟网络Policy
原Policy针对虚拟网络地址前缀做检查,现在要同时加入资源组标签缺失的检查,需将两个规则块用anyOf包裹,满足任一条件即触发拒绝。修改后的完整Policy规则如下:
"policyRule": { "if": { "anyOf": [ { "allOf": [ { "field": "type", "equals": "Microsoft.Network/virtualNetworks" }, { "field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]", "notContains": "11.22.33" } ] }, { "allOf": [ { "field": "type", "equals": "Microsoft.Resources/subscriptions/resourceGroups" }, { "field": "[concat('tags[', parameters('tagName'), ']')]", "exists": "false" }, { "anyOf": [ { "value": "[startsWith(field('name'), 'MC_')]", "notEquals": "true" } ] } ] } ] }, "then": { "effect": "deny" } }
修改说明
- 外层改用
anyOf,包含原有的虚拟网络检查规则块和新增的资源组标签检查规则块 - 保留原虚拟网络的
allOf逻辑不变,新增的资源组规则完全复用你提供的片段
二、修改含anyOf逻辑的标签合规Policy
原Policy检查资源的团队标签是否在允许列表内,现在要扩展检查资源组的标签缺失问题,只需将新规则块直接加入原anyOf数组即可。修改后的完整Policy规则如下:
"policyRule": { "if": { "anyOf": [ { "not": { "field": "[concat('tags[', parameters('tagnameteam'), ']')]", "in": "[parameters('listofallowedtagvalues')]" } }, { "allOf": [ { "field": "type", "equals": "Microsoft.Resources/subscriptions/resourceGroups" }, { "field": "[concat('tags[', parameters('tagName'), ']')]", "exists": "false" }, { "anyOf": [ { "value": "[startsWith(field('name'), 'MC_')]", "notEquals": "true" } ] } ] } ] }, "then": { "effect": "Deny" } }
修改说明
- 在原
anyOf数组末尾添加新的资源组标签检查规则块 - 原有的标签合规检查逻辑保持不变,新增规则独立生效
内容的提问来源于stack exchange,提问作者Senior Systems Engineer
相关产品推荐
相关产品推荐

