異なるテナント間でのVNETピアリング構成方法(PowerShell)

異なるテナント間でのVNETピアリング構成方法(PowerShell)

異なるAzure ADテナントに紐づくサブスクリプションに作成されたVNET同士をピアリングする時の操作についてです.PowerShellからのみ実装可能でした.実装する場面になってから「あれ,これできるんだっけ?」となったのでメモ程度に.

異なるテナント間でVNETピアリング

今回は異なるAzure ADテナントに紐づくサブスクリプションに作成されたVNET同士をピアリングします.この場合,それぞれのテナントに操作するユーザーアカウントを用意する必要があります.また,現在この操作はPowerShellのみで実装可能です.

同サブスクリプション内のVNETピアリングもしくは同テナント内の異なるサブスクリプションであれば,単純に操作アカウントにそれぞれのサブスクリプションやリソースの権限があれば構成可能です.今では片側のVNETからピアリングの設定をすればもう片方のVNETにも設定が入るようになっていますね.(昔は両方からそれぞれピアリング設定を行う必要がありました)

想定環境全体図

事前に必要な作業

  • それぞれのAzure ADテナント内で作業用のユーザーを作成
  • 自テナント内のサブスクリプションでVNETを作成・ピアリングできる権限を与える
  • 自テナント内のサブスクリプションでユーザーアカウント制御をできる権限を与える

テナントA

USER: userA@contoso-a.com
subscription: subscriptionA
resourceGroup: RG-A
vnet: VNET-A

テナントB

USER: userB@contoso-b.com
subscription: subscriptionB
resourceGroup: RG-B
vnet: VNET-B

構築手順

1. 他方のテナントへユーザーをゲスト招待

それぞれのアカウントを他方のテナントへゲスト招待します. 招待が完了したら他方のサブスクリプション内で同様にピアリングできる権限を与えます.

作業用アカウントで招待メールを受け取れない!という場合はAzureポータルのURLの後ろにテナント名をつけることで特定のテナントにアクセスし、Azure AD ユーザーの情報でサインインすることで招待の受託確認を行えます.一例として次のようになります.
‘https://portal.azure.com/contoso-a.com’

2. 仮想ネットワークの作成

ここからは PowerShell での操作になります.Azure を操作するのに必要なモジュールは適宜準備してください.まず,リソースグループ と仮想ネットワークの作成を行います.

$resourceGroupNameA = 'RG-A'
$vNetNameA = 'VNET-A'
$vNetAddressA = '10.0.0.0/16'
$locationA = 'eastus'
# リソースグループ の作成
New-AzResourceGroup -Name $resourceGroupNameA -Location
# 仮想ネットワークの作成
$VNetA = New-AzVirtualNetwork `
    -ResourceGroupName $resourceGroupA `
    -Name $vNetNameA `
    -AddressPrefix $vNetAddressA `
    -Location $locationA

さらに,作成した仮想ネットワークを操作できる権限を招待したユーザーに付与します.

リソース単位でゲストユーザーに許可を与える場合は”ネットワーク共同作成者”レベルが最低限必要です.スコープのサブスクリプションIDやリソースグループ名、仮想ネットワーク名は適宜変更してください.この操作はテナントBでも行います.(AとBを入れ替えるようにしてください)

New-AzRoleAssignment `
     -SignInName UserB@contoso-b.com `
     -RoleDefinitionName "Network Contributor" `
     -Scope /Subscriptions/<SubscriptionA-Id>/resourceGroups/RG-A/providers/Microsoft.Network/VirtualNetworks/VNET-A

3. 仮想ネットワークのピアリング設定

テナントAのサブスクリプションで仮想ネットワークVNET-AからVNET-Bへピアリングの設定を行います.ピアリング先の仮想ネットワークがデプロイされているサブスクリプションのIDを指定する必要があることに注意してください.

Add-AzVirtualNetworkPeering `
    -Name 'vnetA-to-vnetB' `
    -VirtualNetwork $vNetA `
    -RemoteVirtualNetworkId "/subscriptions/<SubscriptionB-Id>/resourceGroups/RG-B/providers/Microsoft.Network/virtualNetworks/VNET-B"

この動作も同様にテナントBで行います.両方の仮想ネットワークで正しくピアリングが行われれば成功です.

+α. リモートゲートウェイ転送の有効化

リモートゲートウェイを使用するようにするには,まずゲートウェイがある側でゲートウェイ転送を許可します.ゲートウェイがあると想定するVNET-A側で転送許可をします.

$peeringA = Get-AzVirtualNetworkPeering -Virtualnetwork VNET-A -ResourceGroupName RG-A -Name vnetA-to-vnetB
$peeringA.AllowGatewayTransit = $true
Set-AzVirtualNetworkPeering -VirtualNetworkPeering $peeringA

その後,ゲートウェイを利用したい仮想ネットワークでリモートゲートウェイの使用を許可します.ピアリング先のゲートウェイを利用するVNET-B側で設定します.

$peeringB = Get-AzVirtualNetworkPeering -VirtualNetworkName VNET-B -ResourceGroupName RG-B -Name vnetB-to-vnetA
$peeringB.UseRemoteGateways = $true
Set-AzVirtualNetworkPeering -VirtualNetworkPeering $peeringB