你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用服务主体名称连接不同订阅中的虚拟网络
在某些情况下,无需使用用户帐户或来宾帐户即可连接不同订阅中的虚拟网络。 在此虚拟网络操作说明中,了解如何在不同的订阅中将两个虚拟网络与服务主体名称 (SPN) 对等互连。 不同订阅中的虚拟网络与 Microsoft Entra ID 租户之间的虚拟网络对等互连必须通过 Azure CLI 或 PowerShell 对等互连。 目前,Azure 门户中没有选择将虚拟网络与不同订阅中的 SPN 对等互连。
先决条件
一个 Azure 帐户,其中包含两个活动订阅和两个 Microsoft Entra ID 租户。 免费创建帐户。
帐户权限,用于创建服务主体、分配应用权限,并在与每个订阅关联的 Microsoft Entra ID 租户中创建资源。
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 中的 Bash 快速入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- 本操作指南文章需要 2.31.0 版或更高版本的 Azure CLI。 如果使用 Azure Cloud Shell,则最新版本已安装。
使用的资源
SPN | 资源组 | 订阅/租户 | 虚拟网络 | 位置 |
---|---|---|---|---|
spn-1-peer-vnet | test-rg-1 | subscription-1 | vnet-1 | 美国东部 2 |
spn-2-peer-vnet | test-rg-2 | subscription-2 | vnet-2 | 美国西部 2 |
创建 subscription-1 资源
使用 az sign-in,在与 subscription-1 相关联的 Microsoft Entra ID 租户中使用具有创建资源组、虚拟网络和 SPN 权限的用户帐户登录 subscription-1
az login
使用 az group create 创建资源组。
az group create \ --name test-rg-1 \ --location eastus2
使用 az network vnet create 在 subscription-1 中创建名为 vnet-1 的虚拟网络。
az network vnet create \ --resource-group test-rg-1 \ --location eastus2 \ --name vnet-1 \ --address-prefixes 10.0.0.0/16 \ --subnet-name subnet-1 \ --subnet-prefixes 10.0.0.0/24
创建 spn-1-peer-vnet
创建 spn1-peer-vnet,范围限定为上一步中创建的虚拟网络。 在将来的步骤中,此 SPN 将添加到 vnet-2 的范围内,以允许虚拟网络对等互连。
使用 az network vnet show 将前面创建的虚拟网络的资源 ID 放置在变量中,以便在后面的步骤中使用。
vnetid=$(az network vnet show \ --resource-group test-rg-1 \ --name vnet-1 \ --query id \ --output tsv)
使用 az ad sp create-for-rbac 创建 spn-1-peer-vnet,其角色网络参与者范围限定为虚拟网络 vnet-1。
az ad sp create-for-rbac \ --name spn-1-peer-vnet \ --role "Network Contributor" \ --scope $vnetid
记下步骤中创建的输出。 密码仅在此输出中显示。 将密码复制到安全位置,以便在后续登录步骤中使用。
{ "appId": "11112222-bbbb-3333-cccc-4444dddd5555", "displayName": "spn-1-peer-vnet", "password": "", "tenant": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e" }
服务主体的 appId 在后续步骤中用于完成 SPN 的配置。 使用 az ad sp list 将 SPN 的 appId 放入变量以供以后使用。
appid1=$(az ad sp list \ --display-name spn-1-peer-vnet \ --query [].appId \ --output tsv)
在上一步中创建的 SPN 必须具有重定向 URI 才能完成身份验证过程审批,并且必须转换为多租户使用。 使用 az ad app update 将 https://www.microsoft.com 添加为重定向 URI,并在 spn-1-peer-vnet 上启用多租户。
az ad app update \ --id $appid1 \ --sign-in-audience AzureADMultipleOrgs \ --web-redirect-uris https://www.microsoft.com
服务主体必须具有对目录的 User.Read 权限。 使用 az ad app permission add 和 az ad app permission grant 将 User.Read 的 Microsoft Graph 权限添加到服务主体。
az ad app permission add \ --id $appid1 \ --api 00000003-0000-0000-c000-000000000000 \ --api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope az ad app permission grant \ --id $appid1 \ --api 00000003-0000-0000-c000-000000000000 \ --scope User.Read
创建 subscription-2 资源
使用 az sign-in,在与 subscription-2 相关联的 Microsoft Entra ID 租户中使用具有创建资源组、虚拟网络和 SPN 权限的用户帐户登录 subscription-2
az login
使用 az group create 创建资源组。
az group create \ --name test-rg-2 \ --location westus2
使用 az network vnet create 在 subscription-2 中创建名为 vnet-2 的虚拟网络。
az network vnet create \ --resource-group test-rg-2 \ --location westus2 \ --name vnet-2 \ --address-prefixes 10.1.0.0/16 \ --subnet-name subnet-1 \ --subnet-prefixes 10.1.0.0/24
创建 spn-2-peer-vnet
创建 spn-2-peer-vnet,范围限定为上一步中创建的虚拟网络。 在将来的步骤中,此 SPN 将添加到 vnet-2 的范围内,以允许虚拟网络对等互连。
使用 az network vnet show 将前面创建的虚拟网络的资源 ID 放置在变量中,以便在后面的步骤中使用。
vnetid=$(az network vnet show \ --resource-group test-rg-2 \ --name vnet-2 \ --query id \ --output tsv)
使用 az ad sp create-for-rbac 创建 spn-2-peer-vnet,其角色网络参与者范围限定为虚拟网络 vnet-2。
az ad sp create-for-rbac \ --name spn-2-peer-vnet \ --role "Network Contributor" \ --scope $vnetid
记下步骤中创建的输出。 将密码复制到安全位置,以便在后续登录步骤中使用。 密码不会再次显示。
输出类似于以下输出。
{ "appId": "22223333-cccc-4444-dddd-5555eeee6666", "displayName": "spn-2-peer-vnet", "password": "", "tenant": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f" }
服务主体的 appId 在后续步骤中用于完成 SPN 的配置。 使用 az ad sp list 将 SPN 的 ID 放入变量以供以后使用。
appid2=$(az ad sp list \ --display-name spn-2-peer-vnet \ --query [].appId \ --output tsv)
在上一步中创建的 SPN 必须具有重定向 URI 才能完成身份验证过程审批,并且必须转换为多租户使用。 使用 az ad app update 将 https://www.microsoft.com 添加为重定向 URI,并在 spn-2-peer-vnet 上启用多租户。
az ad app update \ --id $appid2 \ --sign-in-audience AzureADMultipleOrgs \ --web-redirect-uris https://www.microsoft.com
服务主体必须具有对目录的 User.Read 权限。 使用 az ad app permission add 和 az ad app permission grant 将 User.Read 的 Microsoft Graph 权限添加到服务主体。
az ad app permission add \ --id $appid2 \ --api 00000003-0000-0000-c000-000000000000 \ --api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope az ad app permission grant \ --id $appid2 \ --api 00000003-0000-0000-c000-000000000000 \ --scope User.Read
在 subscription-1 中注册 spn-2-peer-vnet,并向 vnet-1 分配权限
Microsoft Entra ID 租户中具有管理员权限的用户帐户必须完成将 spn-2-vnet-peer 添加到 subscription-1 的过程。 完成后,可以为 spn-2-vnet-peer 分配 vnet-1 的权限。
在 subscription-1 中注册 spn-2-peer-vnet 应用
subscription-1 Microsoft Entra ID 租户中的管理员必须批准服务主体 spn-2-peer-vnet,以便可以将其添加到虚拟网络 vnet-1。 使用以下命令登录到 subscription-2,以查找 spn-2-peer-vnet的 appID。
使用 az login 登录到 subscription-2。
az login
使用 az ad sp list 获取 spn-2-peer-vnet 的 appId。 记下输出中的 appID。 此 appID 将在后续步骤的身份验证 URL 中使用。
appid2=$(az ad sp list \ --display-name spn-2-peer-vnet \ --query [].appId \ --output tsv) echo $appid2
使用 spn-2-peer-vnet 的 appid 和 subscription-1 的 Microsoft Entra ID 租户 ID 生成用于审批的登录 URL。 URL 基于以下示例生成:
https://login.microsoftonline.com/entra-tenant-id-subscription-1/oauth2/authorize?client_id={$appid2}&response_type=code&redirect_uri=https://www.microsoft.com
URL 类似于以下示例。
https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/oauth2/authorize?client_id=22223333-cccc-4444-dddd-5555eeee6666&response_type=code&redirect_uri=https://www.microsoft.com
在 Web 浏览器中打开 URL,并在 subscription-1 中的 Microsoft Entra ID 租户中以管理员帐户登录。
批准应用程序 spn-2-peer-vnet。 microsoft.com 主页显示身份验证是否成功。
将 spn-2-peer-vnet 分配到 vnet-1
管理员批准 spn-2-peer-vnet 后,将其作为网络参与者添加到虚拟网络 vnet-1。
使用 az login 登录到 subscription-1。
az login
使用 az ad sp list 查找适用于 spn-2-peer-vnet 的 appId,并将其置于变量中供以后使用。
appid2=$(az ad sp list \ --display-name spn-2-peer-vnet \ --query [].appId \ --output tsv)
使用 az network vnet show 获取 vnet-1 的资源 ID,以便在后续步骤中使用。
vnetid=$(az network vnet show \ --resource-group test-rg-1 \ --name vnet-1 \ --query id \ --output tsv)
使用 az role assignment create 以下命令将 spn-2-peer-vnet 添加到 vnet-1 作为网络参与者。
az role assignment create --assignee $appid2 \ --role "Network Contributor" \ --scope $vnetid
在 subscription-2 中注册 spn-1-peer-vnet,并向 vnet-2 分配权限
Microsoft Entra ID 租户中具有管理员权限的用户帐户必须完成将 spn-1-peer-vnet 添加到 subscription-2 的过程。 完成后,可以为 spn-1-peer-vnet 分配 vnet-2 的权限。
在 subscription-2 中注册 spn-1-peer-vnet 应用
subscription-2 Microsoft Entra ID 租户中的管理员必须批准服务主体 spn-1-peer-vnet,以便将其添加到虚拟网络 vnet-2。 使用以下命令登录到 subscription-1,查找 spn-1-peer-vnet 的 appID。
使用 az login 登录到 subscription-1。
az login
使用 az ad sp list 获取 spn-1-peer-vnet 的 appId。 记下输出中的 appID。 此 appID 将在后续步骤的身份验证 URL 中使用。
appid1=$(az ad sp list \ --display-name spn-1-peer-vnet \ --query [].appId \ --output tsv) echo $appid1
使用 spn-1-peer-vnet 的 appid 和 subscription-2 的 Microsoft Entra ID 租户 ID 生成用于审批的登录 URL。 URL 基于以下示例生成:
https://login.microsoftonline.com/entra-tenant-id-subscription-2/oauth2/authorize?client_id={$appid1}&response_type=code&redirect_uri=https://www.microsoft.com
URL 类似于以下示例。
https://login.microsoftonline.com/bbbbcccc-1111-dddd-2222-eeee3333ffff/oauth2/authorize?client_id=11112222-bbbb-3333-cccc-4444dddd5555&response_type=code&redirect_uri=https://www.microsoft.com
在 Web 浏览器中打开 URL,并在 subscription-2 中的 Microsoft Entra ID 租户中以管理员帐户登录。
批准应用程序 spn-1-peer-vnet。 microsoft.com 主页显示身份验证是否成功。
将 spn-1-peer-vnet 分配到 vnet-2
管理员批准 spn-1-peer-vnet 后,将其作为网络参与者添加到虚拟网络 vnet-2。
使用 az login 登录到 subscription-2。
az login
使用 az ad sp list 查找适用于 spn-1-peer-vnet 的 appId,并将其置于变量中供以后使用。
appid1=$(az ad sp list \ --display-name spn-1-peer-vnet \ --query [].appId \ --output tsv)
使用 az network vnet show 获取 vnet-2 的资源 ID,以便在后续步骤中使用。
vnetid=$(az network vnet show \ --resource-group test-rg-2 \ --name vnet-2 \ --query id \ --output tsv)
使用 az role assignment create 将 spn-1-peer-vnet 添加到 vnet-2 作为网络参与者。
az role assignment create --assignee $appid1 \ --role "Network Contributor" \ --scope $vnetid
将 vnet-1 对等互连到 vnet-2,将 vnet-2 对等互连到 vnet-1
若要将 vnet-1 对等互连到 vnet-2,请使用服务主体 appId 和密码登录到与 subscription-1 关联的 Microsoft Entra ID 租户。
获取 spn-1-peer-vnet 和 spn-2-peer-vnet 的 appId
在本文中,请登录到每个订阅,并获取每个 SPN 的 appID 以及每个虚拟网络的资源 ID。 使用这些值在后续步骤中使用 SPN 登录到每个订阅。 如果双方已有 SPN 的 appID 和虚拟网络的资源 ID,则不需要执行这些步骤即可对等互连虚拟网络。
使用 az login 使用常规用户帐户登录到 subscription-1。
az login
使用 az network vnet show 获取 vnet-1 的资源 ID,以便在后续步骤中使用。
vnetid1=$(az network vnet show \ --resource-group test-rg-1 \ --name vnet-1 \ --query id \ --output tsv)
使用 az ad sp list 获取 spn-1-peer-vnet 的 appId,并将其置于变量中,以便在后续步骤中使用。
appid1=$(az ad sp list \ --display-name spn-1-peer-vnet \ --query [].appId \ --output tsv)
使用 az login 使用常规用户帐户登录到 subscription-2。
az login
使用 az network vnet show 获取 vnet-2 的资源 ID,以便在后续步骤中使用。
vnetid2=$(az network vnet show \ --resource-group test-rg-2 \ --name vnet-2 \ --query id \ --output tsv)
使用 az ad sp list 获取 spn-2-peer-vnet 的 appId,并将其置于变量中,以便在后续步骤中使用。
appid2=$(az ad sp list \ --display-name spn-2-peer-vnet \ --query [].appId \ --output tsv) echo $appid2
使用 az logout 通过以下命令注销 Azure CLI 会话。 不要关闭终端。
az logout
对等互连虚拟网络
使用 az login 通过 spn-1-peer-vnet 登录到 subscription-1。 需要与 subscription-1 关联的 Microsoft Entra ID 租户的租户 ID 来完成命令。 该密码以变量占位符显示在示例中。 替换为在创建资源期间记录的密码。 将
--tenant
中的占位符替换为与 subscription-1 关联的 Microsoft Entra ID 租户的租户 ID。az login \ --service-principal \ --username $appid1 \ --password $password \ --tenant aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
使用 az login 通过 spn-2-peer-vnet 登录到 subscription-2。 需要与 subscription-2 关联的 Microsoft Entra ID 租户的租户 ID 才能完成命令。 该密码以变量占位符显示在示例中。 替换为在创建资源期间记录的密码。 将
--tenant
中的占位符替换为与 subscription-2 关联的 Microsoft Entra ID 租户的租户 ID。az login \ --service-principal \ --username $appid2 \ --password $password \ --tenant bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f
使用 az account set 将上下文更改为 subscription-1。
az account set --subscription "subscription-1-subscription-id-NOT-ENTRA-TENANT-ID"
使用 az network vnet peering create 在 vnet-1 和 vnet-2 之间创建虚拟网络对等互连。
az network vnet peering create \ --name vnet-1-to-vnet-2 \ --resource-group test-rg-1 \ --vnet-name vnet-1 \ --remote-vnet $vnetid2 \ --allow-vnet-access
使用 az network vnet peering list 验证 vnet-1 与 vnet-2之间的虚拟网络对等互连。
az network vnet peering list \ --resource-group test-rg-1 \ --vnet-name vnet-1 \ --output table
使用 az account set 将上下文更改为 subscription-2。
az account set --subscription "subscription-2-subscription-id-NOT-ENTRA-TENANT-ID"
使用 az network vnet peering create 在 vnet-2 和 vnet-1 之间创建虚拟网络对等互连。
az network vnet peering create \ --name vnet-2-to-vnet-1 \ --resource-group test-rg-2 \ --vnet-name vnet-2 \ --remote-vnet $vnetid1 \ --allow-vnet-access
使用 az network vnet peering list 验证 vnet-2 和 vnet-1 之间的虚拟网络对等互连。
az network vnet peering list \ --resource-group test-rg-2 \ --vnet-name vnet-2 \ --output table