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

Azure Policy定义求助:限制含特定关键词的预留子网操作

问题排查与修正方案

解析失败原因

你编写的Policy里使用了matchAny操作符,但Azure Policy规则表达式并不支持这个操作符,这是导致解析失败的直接原因。此外,原Policy的字段路径也存在问题:针对子网资源本身时,无需使用Microsoft.Network/virtualNetworks/subnets[*].name,直接用name字段即可定位子网名称。

满足需求的完整Policy定义

以下Policy会同时实现两个核心需求:

  1. 禁止修改、删除名称包含"123"或"reserved"的子网;
  2. 禁止在这类子网下部署任何资源。
{
  "mode": "All",
  "policyRule": {
    "if": {
      "anyOf": [
        // 场景1:针对子网本身的修改/删除操作
        {
          "allOf": [
            {
              "field": "type",
              "equals": "Microsoft.Network/virtualNetworks/subnets"
            },
            {
              "anyOf": [
                {
                  "field": "name",
                  "contains": "123"
                },
                {
                  "field": "name",
                  "contains": "reserved"
                }
              ]
            }
          ]
        },
        // 场景2:针对部署到目标子网的资源操作
        {
          "allOf": [
            {
              "field": "Microsoft.Network/virtualNetworks/subnets/id",
              "exists": true
            },
            {
              "anyOf": [
                {
                  "field": "Microsoft.Network/virtualNetworks/subnets/id",
                  "contains": "123"
                },
                {
                  "field": "Microsoft.Network/virtualNetworks/subnets/id",
                  "contains": "reserved"
                }
              ]
            }
          ]
        }
      ]
    },
    "then": {
      "effect": "Deny"
    }
  }
}

关键说明

  • 使用anyOf组合两个场景,只要满足其中一个就触发Deny效果;
  • 针对子网本身,通过name字段结合contains判断名称是否包含指定字符串;
  • 针对部署到子网的资源,通过Microsoft.Network/virtualNetworks/subnets/id字段判断关联的子网ID是否包含目标字符串(子网ID中会包含子网名称);
  • 模式设为All,确保覆盖所有资源类型和操作类型(包括修改、删除、部署)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:17:31