使用 Azure Policy 和 IPAM 防止虚拟网络地址空间重叠

重要

目前,Azure Virtual Network Manager中的 IP 地址管理(IPAM)功能已在Azure Virtual Network Manager可用的所有区域中正式发布。

Azure 虚拟网络管理器可帮助你集中管理整个组织的虚拟网络。 虽然它为 VNet 提供治理,但它不会在虚拟网络创建或更新期间自动阻止重叠的地址空间。 通过将 Azure PolicyIP 地址管理(IPAM)池相结合,确保环境中没有 IP 冲突的网络连接,可以强制实施不重叠的地址空间。

策略如何防止地址空间重叠

IPAM 池会向从该池分配地址的虚拟网络分配互不重叠的 CIDR 前缀。 因此,一个策略定义要求每个虚拟网络都持有指定IPAM池的分配,从而防止地址空间重叠,因为虚拟网络如果没有该池中一个不重叠的前缀,就无法创建或更新。

下一节中的示例策略定义要求,在该策略定义范围内的任何虚拟网络(Microsoft.Network/virtualNetworks)都必须具有来自两个指定池之一的 IPAM 池前缀分配。 如果虚拟网络缺少任一池的分配,策略将拒绝创建或更新该虚拟网络。

示例策略定义

用托管你IPAM池的网络管理器的值替换 <subscriptionID><resourceGroupName> ,并将池名替换为你自己的。

{
  "mode": "All",
  "parameters": {},
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Network/virtualNetworks"
        },
        {
          "not": {
            "anyOf": [
              {
                "field": "Microsoft.Network/virtualNetworks/addressSpace.ipamPoolPrefixAllocations[*].pool.id",
                "equals": "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/networkManagers/network-manager/ipamPools/IPAM-pool-2"
              },
              {
                "field": "Microsoft.Network/virtualNetworks/addressSpace.ipamPoolPrefixAllocations[*].pool.id",
                "equals": "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/networkManagers/network-manager/ipamPools/IPAM-pool-3"
              }
            ]
          }
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  }
}

策略定义检查的内容

策略定义执行以下操作:

  • 资源检查 ——仅适用于虚拟网络(Microsoft.Network/virtualNetworks)。
  • 池分配检查 ——它验证虚拟网络是否有来自以下任一的IPAM池分配:
    • IPAM-pool-2
    • IPAM-pool-3
  • 强制 - 如果没有任何分配,策略则拒绝该操作。 为了进行池分配,必须在池中不重叠 IP 前缀,因此无法创建具有重叠前缀的 VNet。

策略的实施步骤

使用策略定义,可以在 Azure 环境中强制实施不重叠的地址空间。 按照以下步骤实施策略:

  1. 确定现有的网络管理器和 IPAM 池 - 确保已创建现有的 Azure 虚拟网络管理器实例和至少两个 IPAM 池。 有关详细信息,请参阅 创建虚拟网络管理器创建 IPAM 池
  2. 创建 Azure Policy 定义 - 使用 JSON 示例在 Azure Policy 中创建策略定义。 可以通过 Azure 门户、Azure CLI 或 PowerShell 执行此作。 有关详细信息,请参阅 创建和分配策略定义
  3. 分配策略 - 将策略分配给要在其中强制实施非重叠地址空间规则的特定范围(订阅或管理组)。
  4. 测试策略 - 创建或更新虚拟网络,而不使用来自指定池的 IPAM 分配。 如果策略正常工作,则应拒绝该操作。

后续步骤