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

Azure子网命名策略问题:无法豁免AzureBastionSubnet等特殊子网

问题分析与修正方案

你的AzureBastionSubnet豁免逻辑确实存在问题,主要有两个核心错误:

  1. 表达式语法错误:(equals(field('name'),'AzureBastionSubnet') 缺少闭合的右括号,且不需要额外括号包裹表达式。
  2. 逻辑结构错误:原策略使用anyOf意味着只要满足「不是AzureBastionSubnet」或「命名不符合规则」其中一个条件就会拒绝。但AzureBastionSubnet的命名不符合snet-<单元>-<环境>格式,会触发第二个条件的notEquals: 'isValid'判断,最终仍被拒绝。

修正后的策略代码

{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "equals": "Microsoft.Network/virtualNetworks/subnets",
          "field": "type"
        },
        {
          "not": {
            "equals": "AzureBastionSubnet",
            "field": "name"
          }
        },
        {
          "notEquals": "isValid",
          "value": "[if(and(greaterOrEquals(length(split(field('name'), '-')), 3), equals(split(field('name'), '-')[0], 'snet')), if(contains(parameters('unit'), split(field('name'), '-')[1]), if(contains(parameters('env'), split(field('name'), '-')[2]), 'isValid', 'Environment not accepted'), 'Unit not accepted'), 'Invalid prefix or length')]"
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {
    "unit": {
      "type": "Array",
      "metadata": {
        "displayName": "允许的单元列表",
        "description": "子网命名中允许的单元值集合"
      }
    },
    "env": {
      "type": "Array",
      "metadata": {
        "displayName": "允许的环境列表",
        "description": "子网命名中允许的环境值集合"
      }
    }
  }
}

关键修正说明

  • 改用allOf组合条件:仅当子网是指定类型、不是AzureBastionSubnet、且命名不符合规则时,才执行拒绝操作,彻底豁免AzureBastionSubnet。
  • 优化命名校验逻辑:将原无意义的greaterOrEquals(length(...), 0)改为greaterOrEquals(length(...), 3),确保命名至少包含snet-<单元>-<环境>三个部分。
  • 补充表达式默认返回值:避免因命名格式完全不符合导致表达式返回null,引发判断异常。
  • 完善参数元数据:添加中文描述提升策略可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:46:11