重要
目前,Azure Virtual Network Manager中的 IP 地址管理(IPAM)功能已在Azure Virtual Network Manager可用的所有区域中正式发布。
Azure 虚拟网络管理器可帮助你集中管理整个组织的虚拟网络。 虽然它为 VNet 提供治理,但它不会在虚拟网络创建或更新期间自动阻止重叠的地址空间。 通过将 Azure Policy 与 IP 地址管理(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 环境中强制实施不重叠的地址空间。 按照以下步骤实施策略:
- 确定现有的网络管理器和 IPAM 池 - 确保已创建现有的 Azure 虚拟网络管理器实例和至少两个 IPAM 池。 有关详细信息,请参阅 创建虚拟网络管理器 并 创建 IPAM 池。
- 创建 Azure Policy 定义 - 使用 JSON 示例在 Azure Policy 中创建策略定义。 可以通过 Azure 门户、Azure CLI 或 PowerShell 执行此作。 有关详细信息,请参阅 创建和分配策略定义。
- 分配策略 - 将策略分配给要在其中强制实施非重叠地址空间规则的特定范围(订阅或管理组)。
- 测试策略 - 创建或更新虚拟网络,而不使用来自指定池的 IPAM 分配。 如果策略正常工作,则应拒绝该操作。