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

配置策略阻止创建带公网IP的VM时遇字段不接受错误

解决Azure策略阻止VM创建公网IP时的字段错误问题

错误原因

你使用的Microsoft.Network/publicIPAddresses.ipConfiguration.id是只读字段,在创建公网IP资源的阶段,该字段尚未被填充(公网IP需先创建完成,再关联到VM的网卡,或在创建网卡时关联),因此Azure策略引擎无法在创建公网IP时识别这个字段,导致"字段不被接受"的错误。

正确策略方案

方案1:阻止VM网卡关联公网IP(推荐)

该策略直接针对网络接口(Network Interface),拒绝任何关联了公网IP的网卡创建,从根源上阻止VM获得公网IP:

{
  "mode": "Indexed",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Network/networkInterfaces"
        },
        {
          "count": {
            "field": "Microsoft.Network/networkInterfaces/ipConfigurations[*].publicIPAddress.id"
          },
          "greaterOrEquals": 1
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {}
}

方案2:直接阻止创建带公网IP的VM

该策略针对VM资源本身,检查其关联的网卡是否带有公网IP,若有则拒绝VM创建:

{
  "mode": "Indexed",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Compute/virtualMachines"
        },
        {
          "exists": {
            "field": "Microsoft.Compute/virtualMachines/networkProfile.networkInterfaces[*].properties.ipConfigurations[*].publicIPAddress.id"
          }
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {}
}

方案3:完全禁止创建公网IP(可选)

如果需要彻底禁止所有公网IP资源的创建,可使用以下策略:

{
  "mode": "Indexed",
  "policyRule": {
    "if": {
      "field": "type",
      "equals": "Microsoft.Network/publicIPAddresses"
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {}
}

注意事项

  • 方案1和方案2允许公网IP用于其他资源(如负载均衡器),仅限制VM使用,更灵活;
  • 方案3会禁止所有公网IP的创建,适合完全封闭的环境;
  • 策略的mode设置为Indexed即可,无需使用All,因为仅需针对可索引的资源类型生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:03:10