You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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"
    }
  }
}

关键说明

  1. 资源类型覆盖:不同资源的网络配置字段路径不同,你需要根据实际使用的资源(如Azure Functions、VMSS等),补充对应的类型检查和字段路径。可通过查看资源的ARM模板或Azure Policy的字段查找工具确认路径。
  2. 参数化优势:使用参数targetVnetId和allowedResourceIds可让策略复用性更强,无需每次修改策略内容,仅需调整参数值即可。
  3. 策略范围:分配策略时,确保范围覆盖所有可能创建或修改这些资源的资源组、订阅,避免出现遗漏。

内容的提问来源于stack exchange,提问作者Aniruddha Chourasia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:43:17