異なるテナント間での 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