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

Azure Policy需求:管理组级别拒绝创建CIDR重复的新VNet

管理组级别VNet CIDR重复检测的Azure Policy实现

需求说明

创建Azure Policy,当新创建的虚拟网络(VNet)的CIDR地址段与管理组级别下所有现有VNet的CIDR重复时,拒绝该VNet的创建,避免IP地址重叠引发的资源通信问题。

原示例的局限性

你提供的原Policy仅能检测当前订阅内的VNet CIDR,无法覆盖管理组下跨订阅的VNet资源,因此无法满足需求。

正确的Policy示例

以下是实现管理组级别CIDR重复检测的完整Policy定义:

{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Network/virtualNetworks"
        },
        {
          "anyOf": [
            {
              "field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
              "in": "[listResources('Microsoft.Network/virtualNetworks', 'all', managementGroup().name).[*].addressSpace.addressPrefixes[*]]"
            }
          ]
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {},
  "metadata": {
    "category": "Network"
  }
}

关键逻辑说明

  1. 资源类型匹配:通过field: type匹配所有Microsoft.Network/virtualNetworks类型的资源,确保Policy仅作用于VNet创建/更新操作。
  2. 跨订阅VNet CIDR查询:使用listResources函数,指定管理组范围(managementGroup().name),获取该管理组下所有订阅中所有VNet的CIDR地址段列表。
  3. 重复检测:通过in运算符检查待创建VNet的任意CIDR是否存在于上述查询到的CIDR列表中,若存在则触发拒绝操作。

注意事项

  • 分配范围:需将该Policy分配到目标管理组,而非单个订阅,确保覆盖所有下级订阅的VNet资源。
  • 权限配置:分配Policy时需启用系统托管身份,并为该身份授予管理组范围内的Reader角色,确保其有权读取所有下级订阅的VNet资源信息。
  • 重叠检测扩展:若需要检测CIDR地址段的重叠(而非精确重复,如10.0.0.0/16与10.0.0.0/24),需使用ipRangeContains函数构建更复杂的逻辑判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:05:13