如何配置Azure策略阻止非指定资源组VM网卡公网IP创建
问题根因
你编写的两版策略均存在核心逻辑偏差,导致无法生效:
- 第一版策略的
allOf判断块同时要求评估对象的type属性既是网卡(Microsoft.Network/networkInterfaces)又是资源组(Microsoft.Resources/subscriptions/resourceGroups)。Azure Policy每次仅评估单个资源对象,单个资源不可能同时属于两种类型,因此该规则永远不会触发。 - 第二版策略使用
anyOf拼接两个判断块,会导致规则要么拦截所有关联公网IP的网卡(无论位于哪个资源组),要么拦截所有非指定名称的资源组,完全不符合需求。 - 额外逻辑错误:判断资源所属资源组不需要匹配资源组类型字段,Azure Policy提供了内置字段
resourceGroup.name,可直接读取当前评估资源所属的资源组名称,无需额外关联资源组资源做判断。
正确策略代码
你的需求对应的判断逻辑为:当评估资源是网卡、网卡的IP配置关联了公网IP、且网卡所在资源组不属于指定白名单时,拒绝操作。可直接使用以下代码:
{ "mode": "All", "policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Network/networkInterfaces" }, { "field": "Microsoft.Network/networkInterfaces/ipconfigurations[*].publicIpAddress.id", "exists": true }, { "field": "resourceGroup.name", "notEquals": "rg-backup-lab-001" } ] }, "then": { "effect": "deny" } }, "parameters": {} }
优化建议
如果后续需要扩展允许创建公网IP关联的资源组范围,建议将白名单资源组改为策略参数,无需每次修改规则主体:
- 在根节点添加参数定义:
"parameters": { "allowedResourceGroupNames": { "type": "Array", "metadata": { "displayName": "允许关联公网IP的资源组列表", "description": "列表内资源组中的网卡可正常关联公网IP" }, "defaultValue": [ "rg-backup-lab-001" ] } }
- 将原有的资源组名称判断条件替换为:
{ "field": "resourceGroup.name", "notIn": "[parameters('allowedResourceGroupNames')]" }
如果需要同时拦截独立公网IP资源的创建(而非仅拦截网卡关联公网IP的操作),可以在判断块外层增加anyOf分支,补充对Microsoft.Network/publicIPAddresses类型资源的判断即可。
内容的提问来源于stack exchange,提问作者stillnocake
相关产品推荐
相关产品推荐

