使用服務主體名稱連接不同訂用帳戶中的虛擬網路
在某些情況下,您需要連接不同訂用帳戶中的虛擬網路,而不需要使用使用者帳戶或來賓帳戶。 在此虛擬網路操作說明中,瞭解如何將不同訂用帳戶中的兩個虛擬網路與服務主體名稱 (SPN) 對等互連。 不同訂用帳戶中的虛擬網路與 Microsoft Entra ID 租使用者之間的虛擬網路對等互連必須透過 Azure CLI 或 PowerShell 對等互連。 目前 Azure 入口網站 中沒有選項可將不同訂用帳戶中的SPN與SPN對等互連。
必要條件
具有兩個作用中訂用帳戶和兩個Microsoft Entra ID 租使用者的 Azure 帳戶。 免費建立帳戶。
帳戶許可權,用來建立服務主體、指派應用程式許可權,以及在與每個訂用帳戶相關聯的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 | 資源群組 | 訂用帳戶/租使用者 | 虛擬網路 | Location |
---|---|---|---|---|
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 ,以在與 subscription-1 相關聯的 Microsoft Entra ID 租使用者中建立資源群組、虛擬網路和 SPN
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 ,將您稍早在變數中建立的虛擬網路資源標識碼放在稍後步驟中使用。
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 login 以具有許可權的用戶帳戶登入 subscription-2 ,在與 subscription-2 相關聯的 Microsoft Entra ID 租使用者中建立資源群組、虛擬網路和 SPN
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 ,將您稍早在變數中建立的虛擬網路資源標識碼放在稍後步驟中使用。
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 的識別碼放入變數以供稍後使用。
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 租使用者標識碼,以建置登入 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
在網頁瀏覽器中開啟 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 的資源識別碼取得為變數,以供後續步驟使用。
vnetid=$(az network vnet show \ --resource-group test-rg-1 \ --name vnet-1 \ --query id \ --output tsv)
使用 az role assignment create the following command to add spn-2-peer-vnet to vnet-1 as a Network Contributor.
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 租使用者標識碼,以建置登入 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
在網頁瀏覽器中開啟 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 的資源識別碼取得為變數,以供後續步驟使用。
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,以及每個虛擬網路的資源標識碼。 使用這些值,在後續步驟中使用SPN登入每個訂用帳戶。 如果雙方已經有SPN的appID和虛擬網路的資源標識碼,則不需要這些步驟才能對等互連虛擬網路。
使用 az login 以一般用戶帳戶登入 subscription-1 。
az login
使用 az network vnet show,將 vnet-1 的資源識別碼取得為變數,以供後續步驟使用。
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 的資源識別碼取得為變數,以供後續步驟使用。
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 租使用者的租使用者標識碼,才能完成命令。 密碼會顯示在具有變數佔位符的範例中。 將取代為您在資源建立期間所記錄的密碼。 將中的
--tenant
佔位元元取代為與 subscription-1 相關聯之Microsoft Entra 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 租使用者的租使用者標識符,才能完成命令。 密碼會顯示在具有變數佔位符的範例中。 將取代為您在資源建立期間所記錄的密碼。 將中的
--tenant
佔位元取代為與 subscription-2 相關聯之Microsoft Entra 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