如何让Azure Policy触发并阻止虚拟网络(VNET)加入操作?
如何用Azure Policy阻止未授权资源加入指定VNET
你当前的策略仅针对Microsoft.Network/virtualNetworks类型的操作(比如创建、删除VNET本身),但资源加入VNET的操作是修改资源自身的网络配置(例如虚拟机、AKS集群更新子网关联),这类操作不会触发针对VNET资源的策略,因此需要调整策略目标到这些待限制的资源类型。
核心思路
要阻止未授权资源加入指定VNET,需要编写策略针对需要关联VNET的资源类型,检查它们的网络配置是否指向目标VNET,同时仅允许预先定义的资源列表进行关联。
示例策略(参数化版本)
以下策略可限制仅指定资源关联目标VNET,覆盖常见的虚拟机、AKS、App Service三类资源,你可根据业务场景扩展其他资源类型:
{ "mode": "All", "parameters": { "targetVnetId": { "type": "String", "metadata": { "description": "需要限制访问的VNET资源ID" } }, "allowedResourceIds": { "type": "Array", "metadata": { "description": "允许连接到该VNET的资源ID列表" } } }, "policyRule": { "if": { "allOf": [ { "anyOf": [ { "field": "type", "equals": "Microsoft.Compute/virtualMachines" }, { "field": "type", "equals": "Microsoft.ContainerService/managedClusters" }, { "field": "type", "equals": "Microsoft.Web/sites" } // 在此添加其他需要限制的资源类型,如Microsoft.Compute/virtualMachineScaleSets等 ] }, { "anyOf": [ // 检查虚拟机是否关联目标VNET的子网 { "allOf": [ { "field": "type", "equals": "Microsoft.Compute/virtualMachines" }, { "field": "properties.networkProfile.networkInterfaces[*].properties.ipConfigurations[*].properties.subnet.id", "contains": "[parameters('targetVnetId')]" } ] }, // 检查AKS集群是否关联目标VNET的子网 { "allOf": [ { "field": "type", "equals": "Microsoft.ContainerService/managedClusters" }, { "field": "properties.networkProfile.vnetSubnetID", "contains": "[parameters('targetVnetId')]" } ] }, // 检查App Service是否启用VNET集成并关联目标VNET { "allOf": [ { "field": "type", "equals": "Microsoft.Web/sites" }, { "field": "properties.vnetRouteAllEnabled", "equals": true }, { "field": "properties.vnetSubnetResourceId", "contains": "[parameters('targetVnetId')]" } ] } ] }, // 排除允许的资源 { "not": { "field": "id", "in": "[parameters('allowedResourceIds')]" } } ] }, "then": { "effect": "deny" } } }
关键说明
- 资源类型覆盖:不同资源的网络配置字段路径不同,你需要根据实际使用的资源(如Azure Functions、VMSS等),补充对应的类型检查和字段路径。可通过查看资源的ARM模板或Azure Policy的字段查找工具确认路径。
- 参数化优势:使用参数
targetVnetId和allowedResourceIds可让策略复用性更强,无需每次修改策略内容,仅需调整参数值即可。 - 策略范围:分配策略时,确保范围覆盖所有可能创建或修改这些资源的资源组、订阅,避免出现遗漏。
内容的提问来源于stack exchange,提问作者Aniruddha Chourasia
相关产品推荐
相关产品推荐

