<!-- AI_TASK_START: AI标题翻译 -->
[解决方案] 使用Azure Virtual Network Manager IP地址管理部署跨租户虚拟网络
<!-- AI_TASK_END: AI标题翻译 -->
<!-- AI_TASK_START: AI竞争分析 -->
# 解决方案分析
## 解决方案概述
本解决方案介绍如何使用 **Azure Virtual Network Manager (AVNM)** 的 **IP Address Management (IPAM)** 功能,在不同 **Azure 租户** 之间部署虚拟网络。核心目标是实现父组织对多个子组织的 **IP 地址分配** 的中央管理,解决多租户环境下的网络资源协调问题。背景在于,企业常常需要在分离的 **Azure 租户** 中管理网络,以满足隔离性和合规性需求,同时保持高效的 **IP 地址** 管理和分配。该方案适用于多租户架构场景,如大型企业或服务提供商的跨组织网络管理。
## 实施步骤
1. **准备环境**
- 在中央管理租户(Tenant A)中创建 **Azure Virtual Network Manager** 实例并设置 **IPAM 池**。
- 确保 **AVNM** 与目标管理租户(Tenant B)建立跨租户连接。
- 验证权限:在 Tenant A 中分配 **IPAM 池用户角色**,在 Tenant B 中分配 **Network Contributor 角色**。
2. **使用 Azure Portal 部署**
- 在 Tenant A 的 **Azure Portal** 中导航到 **Azure Virtual Network Manager**,选择 **IPAM 池** 并创建分配。
- 指定关联资源位于外部租户(Tenant B),并通过租户筛选器输入 Tenant B 的 ID。
- 进行跨租户认证,使用具有适当权限的凭据登录 Tenant B。
- 选择 Tenant B 中的资源(如虚拟网络),确认关联并验证分配。
3. **使用 CLI 或 REST API 部署**
- 配置多租户服务主体:在 Tenant B 中更新服务主体的 signInAudience 属性为多租户。
- 在 Tenant A 中创建存根服务主体,使用相同的应用 ID,并授予 **IPAM 池用户角色**。
- 部署虚拟网络:在 Tenant B 中使用 REST API 调用,包含 Tenant A 的辅助访问令牌,确保虚拟网络引用 Tenant A 的 **IPAM 池**。
- 验证部署:检查资源关联并确认 IP 前缀分配成功。
4. **移除关联(可选)**
- 在 Tenant A 的 **IPAM 池** 分配详情中,重新认证 Tenant B,并移除资源关联。
## 方案客户价值
- **简化跨租户管理**:通过中央 **IPAM 池** 实现统一 **IP 地址** 分配,减少手动配置,提高运营效率,与传统多租户方案相比,避免了重复设置带来的复杂性。
- **提升安全性与合规性**:利用 **Entra ID** 和 **Azure RBAC** 进行身份认证和授权,确保租户隔离,适用于高合规需求的环境。
- **资源优化**:允许子组织动态消费父组织的 **IP 资源**,潜在降低资源浪费,但需注意管理开销可能增加。
## 涉及的相关产品
- **Azure Virtual Network Manager (AVNM)**:负责 **IPAM 池** 的创建和管理,作为中央管理平台,支持跨租户网络协调。
- **Entra ID**:提供身份和认证服务,确保跨租户操作的安全性。
- **Azure RBAC**:处理授权机制,用于分配角色如 **IPAM 池用户** 或 **Network Contributor**,以控制访问权限。
## 技术评估
本方案的技术先进性体现在跨租户 **IPAM** 功能的支持,利用 **多租户服务主体** 和 **辅助访问令牌** 实现无缝集成,提高了网络管理的可行性,适用于大规模多租户场景。然而,可能的限制包括:依赖于正确的权限配置,如果角色分配不当,可能导致认证失败或安全风险;在高复杂度环境中,管理多租户关联可能增加操作复杂性,建议结合监控工具如 **Azure Monitor** 来缓解。总体上,该方案在 **Azure** 生态中展示出良好的扩展性和创新性,但需评估特定环境下的性能瓶颈。
<!-- AI_TASK_END: AI竞争分析 -->
<!-- AI_TASK_START: AI全文翻译 -->
# 使用 Azure Virtual Network Manager IP Address Management 跨租户部署虚拟网络
**原始链接:** [https://techcommunity.microsoft.com/blog/azurenetworkingblog/deploying-virtual-networks-across-tenants-using-azure-virtual-network-manager-ip/4410161](https://techcommunity.microsoft.com/blog/azurenetworkingblog/deploying-virtual-networks-across-tenants-using-azure-virtual-network-manager-ip/4410161)
**发布时间:** 2025-05-01
**厂商:** AZURE
**类型:** TECH-BLOG
---

Azure Networking Blog
# 使用 Azure Virtual Network Manager IP Address Management 跨租户部署虚拟网络
2025 年 5 月 1 日
## 概述
在本指南中,您将学习如何在托管租户 (Tenant B) 中部署一个虚拟网络,该虚拟网络从管理租户 (Tenant A) 中维护的 Azure Virtual Network Manager (AVNM) IP Address Management (IPAM) 池中获取地址。此过程展示了母公司如何集中管理跨多个子组织的 IP 地址分配,这些子组织存在于不同的 Azure 租户中。
## 关键概念:
* **Azure 租户和 Entra ID (Entra ID):** 每个 Azure 订阅都与一个 Entra ID 租户相关联。Entra ID 提供身份和认证服务,而 Azure RBAC 处理授权。
* **AVNM IPAM 池:** 在 AVNM 中,“池” 是 IP CIDR 块的集合。池可以具有层级关系 (父池和子池),允许将大型 IP 范围划分为较小的段,用于虚拟网络或外部资源。
* **多租户服务主体:** 服务主体代表用于非交互式认证的非人类身份。要以编程方式启用跨租户资源管理,可以在其中一个租户中使用多租户服务主体,然后在另一个租户中表示为存根 (企业应用程序)。
## 教程 1: 使用 Azure 门户进行跨租户 IPAM 部署
### 架构概述
以下跨租户部署场景将说明中央管理租户中的用户如何将目标托管租户中的虚拟网络与中央管理租户中的 IPAM 池相关联。
1. **中央管理租户 (Tenant A):**
* 托管 Azure Virtual Network Manager 实例。
* 包含权威 IPAM 池。
* **目标托管租户 (Tenant B):**
* 托管资源 (例如,虚拟网络),这些资源使用来自 Tenant A 的 IPAM 池。
### 先决条件
1. **在中央管理租户 (Tenant A) 中创建 Azure Virtual Network Manager.**
确保您在 Tenant A 中部署了 AVNM,并根据需要创建了 IPAM 池。
2. **AVNM 已建立与 Tenant B 的跨租户连接.** 请参阅 [此处 ](<https://learn.microsoft.com/en-us/azure/virtual-network-manager/how-to-configure-cross-tenant-portal>),了解在 Azure Virtual Network Manager 中添加远程租户范围的说明,以实现跨租户和订阅的中央网络管理。
3. **权限:**
* 您必须在 Tenant A (管理租户) 中拥有 IPAM 池用户角色。
* 您需要在目标托管租户中分配 _Network Contributor_ 角色。例如,此角色可以在订阅级别或托管租户 (Tenant B) 中的特定虚拟网络资源上应用,您计划在那里关联 IPAM 池。
### 门户步骤
**1\. 在中央管理租户中创建 IPAM 分配**
* 在 **Azure 门户** 中,导航到 Tenant A 下的 **Azure Virtual Network Manager**。
* 找到您要创建新分配的 IPAM 池。
* 通过关联资源创建分配。在此过程中,您可以指定要关联的资源位于不同的 (外部) 租户。

**2\. 选择要管理的外部租户**
* 当提示关联来自另一个租户的资源时,您将在租户筛选器中选择或指定 Tenant B 的租户 ID。
**3\. 认证跨租户**
* 门户将提示您使用在 Tenant B 中具有适当权限的凭据登录。
* 登录后,您可以继续选择 Tenant B 中的哪个 VNet (或其他网络资源) 要与 Tenant A 中的 IPAM 池关联。

**4\. 选择要管理的资源**
* 在门户工作流中,选择 Tenant B 的订阅和目标资源 (例如,一个 VNet 或新 VNet 将驻留的资源组)。
* 确认您在 Tenant B 中的订阅或资源级别具有足够的基于角色的访问权限 (例如,_Network Contributor_)。

**5\. 验证跨租户关联**
* 完成关联步骤后,跨租户资源应出现在 Tenant A 中与您的 IPAM 池关联的资源列表中。
* 您还可以切换到 Tenant B 的门户视图,并验证 VNet 识别来自 Tenant A 的 IPAM 池的分配前缀。

**6\. 移除关联 (如果需要)**
* 要移除关联,您必须再次在 Azure 门户中认证其他租户 (Tenant B)。
* 从 Tenant A 中的 IPAM 池分配详细信息中,移除与外部资源的关联。
* Tenant B 中的资源将失去其从 AVNM IPAM 池分配的前缀。
## 教程 2: 使用非门户 / CLI 和 REST 的详细实现步骤
### 架构概述
该跨租户部署场景涉及
1. **中央管理租户 (Tenant A):**
* 托管 AVNM 实例。
* 包含权威 IPAM 池。
* 接收代表托管租户服务主体的存根服务主体。
* 为 IPAM 操作提供 Azure RBAC 角色分配。
* **目标托管租户 (Tenant B):**
* 托管资源 (例如,虚拟网络),这些资源使用来自 Tenant A 的 IPAM 池。
* 包含用于认证部署的原始多租户服务主体。
该架构要求
* **步骤 1:** 在 Tenant A 中创建 AVNM 实例。
* **步骤 2:** 在两个租户中配置跨租户 AVNM 功能。
* **步骤 3:** 在 Tenant B 中创建或更新服务主体以支持多租户。
* **步骤 4:** 使用相同的应用程序 ID 在 Tenant A 中配置存根服务主体。
* **步骤 5:** 通过 Azure RBAC 在 Tenant A 中授予存根服务主体 IPAM 池用户角色。
* **步骤 6:** 在 Tenant B 中部署引用 Tenant A 中 IPAM 池的虚拟网络。
### 1\. 配置多租户服务主体
#### a. 在 Tenant B 中更新服务主体以支持多租户
登录 Tenant B 并将服务主体的 signInAudience 属性从单租户更新为多租户配置:
bash
Copy
az login --tenant <TENANTB_ID>
az ad app update --id "your-app-id" --set signInAudience=AzureADMultipleOrgs
_注意:_ 服务主体的 appid 属性用于跨租户标识应用程序。
#### b. 在 Tenant A 中配置存根服务主体
在 Tenant B 中更新服务主体后,登录 Tenant A 并使用相同的 appid 创建存根服务主体:
bash
Copy
az login --tenant <TENANTA_ID>
az ad sp create --id "your-app-id"
在 Tenant A 中创建此存根服务主体后,您应授予该服务主体适当的 Azure RBAC 角色 (IPAM 池用户)。
_在这种场景中,不需要管理同意,因为服务主体仅使用其直接分配的权限与 ARM API 交互。_
### 2\. 在 Tenant B 中部署虚拟网络
在配置多租户服务主体和角色分配后,继续在 Tenant B 中部署引用 Tenant A 中 IPAM 池的虚拟网络。有几种方法可以实现这一点;下面是探索的两种方法:
#### a. 使用 Terraform
* **AzureRm 提供程序:** 当前版本的 AzureRm 提供程序 (例如,4.21.1) 尚未支持此部署所需的 ipamPoolPrefixAllocations 属性。
* **AzApi 提供程序:** 虽然 AzApi 提供程序为 ARM REST API 提供轻量级叠加,但已知存在辅助租户认证处理问题 (通过 x-ms-authorization-auxiliary 标头)。
如果您选择使用 Terraform,您可能需要监控支持跨租户 IPAM 功能的提供程序更新。
#### b. 使用 Azure CLI 的直接 REST API 调用
当 Terraform 支持有限时,您可以使用 az rest 命令直接调用 ARM API。这需要获取两个租户的访问令牌,并在 API 请求中包含辅助令牌。
##### 步骤
**1\. 认证到两个租户:**
登录 Tenant B (用于部署) 和 Tenant A (用于获取辅助令牌):
bash
Copy
az login --service-principal --username "your-app-id" --password "CLIENT_SECRET" --tenant "<TENANTB_ID>"
az login --service-principal --username "your-app-id" --password "CLIENT_SECRET" --tenant "<TENANTA_ID>"
**2\. 从 Tenant A 获取访问令牌:**
检索 Tenant A 的访问令牌,作为辅助令牌使用:
bash
Copy
auxiliaryToken=$(az account get-access-token \
--resource=https://management.azure.com/ \
--tenant "<TENANTA_ID>" \
--query accessToken -o tsv)
**3\. 通过 ARM REST API 部署虚拟网络:**
使用包含来自 Tenant A 的令牌的 x-ms-authorization-auxiliary 标头执行 REST API 调用:
bash
Copy
az rest --method put \
--uri "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Network/virtualNetworks/<VNET_NAME>?api-version=2022-07-01" \
--headers "x-ms-authorization-auxiliary=Bearer ${auxiliaryToken}" \
--body '{
"location": "centralus",
"properties": {
"addressSpace": {
"ipamPoolPrefixAllocations": [
{
"numberOfIpAddresses": "100",
"pool": {
"id": "/subscriptions/<MANAGEMENT_SUBSCRIPTION_ID>/resourceGroups/<MANAGEMENT_RG>/providers/Microsoft.Network/networkManagers/<NETWORK_MANAGER_NAME>/ipamPools/<POOL_NAME>"
}
}
]
}
}
}'
执行成功将返回 200 状态码,确认已在 Tenant B 中创建虚拟网络并与 Tenant A 中的 IPAM 池关联。
## 总结和关键点
要使用 AVNM IPAM 跨多个 Azure 租户部署资源,
1. **创建多租户服务主体**
* 在托管租户 (Tenant B) 中更新您的服务主体以支持多租户。
* **在管理租户 (Tenant A) 中配置存根服务主体**
* 使用相同的应用程序 ID 创建存根。
* **分配适当权限**
* 通过 Azure RBAC 在 Tenant A 中授予存根服务主体 _IPAM 池用户_ 角色。
* **部署资源**
* **门户方法:** 使用 Azure 门户步骤在 IPAM 池中创建分配,认证到托管租户,并关联 VNet。
* **CLI/REST 方法:** 从两个租户获取访问令牌,并在 REST API 调用 (或其他部署方法) 中使用 x-ms-authorization-auxiliary 标头,以成功创建引用跨租户 IPAM 池的资源。
通过
更新于 2025 年 5 月 1 日
版本 1.0
<!-- AI_TASK_END: AI全文翻译 -->