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

如何阻止使用不合规现有Subnet创建Azure虚拟机?

如何阻止Azure虚拟机使用不合规的现有子网

要阻止虚拟机使用已关联“允许互联网访问”NSG的现有子网,你需要创建Deny类型的Azure自定义策略,针对虚拟机/网卡的创建/更新操作做合规检查。以下是具体实现步骤:

核心思路

通过Policy规则关联子网与对应的NSG,检查NSG是否存在允许互联网入站的规则。如果存在,直接拒绝虚拟机(或其网卡)的创建请求。

步骤1:编写自定义Policy规则

下面是一个示例Policy定义,逻辑是:

  • 监控虚拟机网卡的创建/更新操作
  • 提取网卡关联的子网ID
  • 通过子网ID获取绑定的NSG
  • 检查NSG是否包含入站允许0.0.0.0/0的规则
  • 若存在此类规则,触发Deny
{
  "properties": {
    "displayName": "Deny VM creation using subnets with internet-accessible NSGs",
    "policyType": "Custom",
    "mode": "Indexed",
    "description": "Blocks creation of virtual machines (or their network interfaces) that use subnets associated with NSGs allowing inbound internet access.",
    "parameters": {},
    "policyRule": {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Network/networkInterfaces"
          },
          {
            "value": "[reference(concat('Microsoft.Network/virtualNetworks/', split(field('Microsoft.Network/networkInterfaces/ipConfigurations[0].subnet.id'), '/')[8], '/subnets/', split(field('Microsoft.Network/networkInterfaces/ipConfigurations[0].subnet.id'), '/')[10]), '2023-04-01').networkSecurityGroup.id]",
            "notEquals": ""
          },
          {
            "count": {
              "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
              "where": {
                "allOf": [
                  {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
                    "equals": "Inbound"
                  },
                  {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
                    "equals": "Allow"
                  },
                  {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationAddressPrefix",
                    "equals": "0.0.0.0/0"
                  }
                ]
              }
            },
            "greaterOrEquals": 1
          }
        ]
      },
      "then": {
        "effect": "Deny"
      }
    }
  }
}

步骤2:部署并分配Policy

  1. 在Azure门户中进入Policy服务,选择定义 > + 自定义定义,粘贴上述JSON并完成创建。
  2. 找到刚创建的自定义Policy,选择分配,指定要应用的范围(订阅/资源组),按需设置排除项。
  3. 保存分配后,新的虚拟机创建请求如果使用不合规子网,会被直接阻止。

注意事项

  • 该Policy仅阻止新创建或更新的虚拟机/网卡,不会影响已存在的不合规虚拟机。
  • 若需要覆盖更复杂的NSG规则(比如包含Internet服务标签、非精确0.0.0.0/0的前缀),可修改Policy中的destinationAddressPrefix条件,比如用contains或in匹配多种前缀。
  • 测试阶段建议先将effect设为Audit,验证规则逻辑无误后再改为Deny,避免误拦截正常业务。

内容的提问来源于stack exchange,提问作者Mahmood Abushaireh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:00:27