この記事は、Azure Virtual WAN を使用して仮想ネットワークを別のテナントの仮想ハブに接続することに役立ちます。 このアーキテクチャは、同じネットワークに接続する必要があるのに異なるテナント上に置かれたクライアント ワークロードがある場合に便利です。 たとえば、次の図に示すように、Contoso 以外の仮想ネットワーク (リモート テナント) を Contoso の仮想ハブ (親テナント) に接続できます。
この記事では、次のことについて説明します。
- Azure サブスクリプションの共同作成者として別のテナントを追加します。
- クロステナント仮想ネットワークを仮想ハブに接続します。
この構成の手順では、Azure portal と PowerShell の組み合わせを使用します。 ただし、機能自体は PowerShell と Azure CLI でのみ提供されています。
注意
仮想ネットワークのテナント間接続は、ローカル コンピューターにインストールされている PowerShell または Azure CLI を使用してのみ管理できます。 Azure portal はテナント間操作をサポートしていないため、Azure portal または Azure portal CloudShell (PowerShell と CLI の両方) を使用して仮想ネットワークのテナント間接続を管理することはできません。
開始する前に
前提条件
この記事の手順を使用するには、環境内に以下の構成が既に設定されている必要があります。
- 親サブスクリプション内の仮想 WAN と仮想ハブ。
- 別の (リモート) テナントのサブスクリプション内で構成されている仮想ネットワーク。
リモート テナントの仮想ネットワーク アドレス空間が、親の仮想ハブに既に接続されている他の仮想ネットワーク内のどのアドレス空間とも重複していないことを確認してください。
Azure PowerShell を使用する
この記事では、PowerShell コマンドレットを使用します。 コマンドレットを実行するには、Azure Cloud Shell を使用できます。 Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。
Cloud Shell を開くには、コード ブロックの右上の隅にある [Cloudshell を開く] を選択するだけです。 https://shell.azure.com/powershell に移動して、別のブラウザー タブで Cloud Shell を開くこともできます。 [コピー] を選択してコードのブロックをコピーし、Cloud Shell に貼り付けてから、Enter キーを押して実行します。
アクセス許可の割り当て
リモート テナントの仮想ネットワークのサブスクリプションで、共同作成者ロールの割り当てを管理者 (仮想ハブを管理するユーザー) に追加します。 共同作成者のアクセス許可を使用すると、管理者が、リモート テナント内の仮想ネットワークにアクセスして変更することができます。
PowerShell または Azure portal のいずれかを使用して、このロールを割り当てることができます。 手順については、次の記事を参照してください。
次のコマンドを実行して、リモート テナント サブスクリプションと親テナント サブスクリプションを PowerShell の現在のセッションに追加します。 親にサインインしている場合は、リモート テナントに対してのみこのコマンドを実行する必要があります。
Connect-AzAccount -SubscriptionId "[subscription ID]" -TenantId "[tenant ID]"ロールの割り当てが成功したことを確認します。 親の資格情報を使用して Azure PowerShell にサインインし、次のコマンドを実行します。
Get-AzSubscriptionアクセス許可が親に正しく伝達され、セッションに追加されている場合は、親とリモート テナントが所有するサブスクリプションは、両方ともコマンドの出力に表示されます。
仮想ネットワークをハブに接続する
以下の手順では、コマンドを使用して、仮想ネットワークを仮想ハブにリンクするときに、2 つのサブスクリプションのコンテキストを切り替えます。 例の値は、実際の環境が反映されるように置き換えてください。
リモートアカウントのコンテキストにいることを確認してください。
Select-AzSubscription -SubscriptionId "[remote ID]"ハブに接続する仮想ネットワークのメタデータを格納するためのローカル変数を作成します。
$remote = Get-AzVirtualNetwork -Name "[vnet name]" -ResourceGroupName "[resource group name]"以下のように、親アカウントに接続します。
Connect-AzAccount -TenantID "[parent tenant ID]"以下のように、親サブスクリプションを選択します。
Select-AzSubscription -SubscriptionId "[parent ID]"仮想ネットワークをハブに接続します。
New-AzVirtualHubVnetConnection -ResourceGroupName "[parent resource group name]" -VirtualHubName "[virtual hub name]" -Name "[name of connection]" -RemoteVirtualNetwork $remote
新しい接続は、PowerShell または Azure portal のいずれかで表示できます。
- 接続が正常に作成された場合は、新しく作成された接続のメタデータが PowerShell コンソールに表示されます。
- Azure portal で、仮想ハブに移動し、[接続]>[仮想ネットワーク接続] を選択します。 その後で接続へのポインターを表示できます。 実際のリソースを表示するには、適切なアクセス許可が必要です。
シナリオ: 仮想ネットワーク ハブ接続に静的ルートを追加する
次の手順では、コマンドを使用して、仮想ハブの既定のルート テーブルと仮想ネットワーク接続に静的ルートを追加して、ネクスト ホップの IP アドレス (NVA アプライアンス) をポイントします。 例の値は、実際の環境が反映されるように置き換えてください。
注意
- コマンドを実行する前に、アクセス権があること、およびリモート サブスクリプションに対して承認されていることを確認してください。
- 宛先プレフィックスには、1 つまたは複数の CIDR を指定できます 1 つの CIDR の場合は、次の形式を使用します。
@("10.19.2.0/24")複数の CIDR の場合は、次の形式を使用します。@("10.19.2.0/24", "10.40.0.0/16")
親アカウントのコンテキストを使用していることを確認します。
Select-AzSubscription -SubscriptionId "[parent ID]"特定の IP アドレスを含まない仮想ハブの既定のルート テーブルにルートを追加します。
接続の詳細を取得します。
$hubVnetConnection = Get-AzVirtualHubVnetConnection -Name "[HubconnectionName]" -ParentResourceName "[Hub Name]" -ResourceGroupName "[resource group name]"仮想ハブ ルート テーブルに静的ルートを追加します (ネクスト ホップは仮想ネットワーク接続)。 ルート テーブルの既存のルートは、次のサンプル スクリプトで保持されます。
$routeTable = Get-AzVHubRouteTable -ResourceGroupName "[Resource group name]" -VirtualHubName "[Virtual hub name]" -Name "defaultRouteTable" $Route2 = New-AzVHubRoute -Name "[Route Name]" -Destination “[@("Destination prefix")]” -DestinationType "CIDR" -NextHop $hubVnetConnection.Id -NextHopType "ResourceId" $routeTable.Routes.add($Route2)ルート テーブルに新しいルートがあることを確認します。
$routeTable.Routesハブの現在の既定のルート テーブルを更新します。
Update-AzVHubRouteTable -ResourceGroupName "[resource group name]"-VirtualHubName [“Hub Name”] -Name "defaultRouteTable" -Route @($routeTable.Routes)仮想ネットワーク接続のルートを更新して、ネクスト ホップを IP アドレスとして指定します。 このサンプル スクリプトでは、VNET 接続に新しいルートが追加されます (既存のルートは保持されます)。
注意
ルート名は、前に静的ルートを追加したときに使用した名前と同じにする必要があります。 そのようにしないと、ルーティング テーブルに 2 つのルート (1 つは IP アドレスなし、もう 1 つは IP アドレスあり) が作成されます。
$newroute = New-AzStaticRoute -Name "[Route Name]" -AddressPrefix "[@("Destination prefix")]" -NextHopIpAddress "[Destination NVA IP address]" $hubVNetConnection.RoutingConfiguration.VnetRoutes.StaticRoutes.add($newroute) Update-AzVirtualHubVnetConnection -ResourceGroupName $rgname -VirtualHubName "[Hub Name]" -Name "[Virtual hub connection name]" -RoutingConfiguration $hubVNetConnection.RoutingConfiguration静的ルートがネクスト ホップ IP アドレスに確立されていることを確認します。
Get-AzVirtualHubVnetConnection -ResourceGroupName "[Resource group]" -VirtualHubName "[virtual hub name]" -Name "[Virtual hub connection name]"
トラブルシューティング
-
$remote(前のセクションのもの) 内のメタデータが、Azure portal の情報と一致していることを確認します。 - リモート テナント リソース グループの IAM 設定を使用するか、Azure PowerShell コマンド (
Get-AzSubscription) を使用して、アクセス許可を確認します。 - リソース グループの名前やその他の環境固有の変数の周囲が引用符で囲まれていることを確認します (例:
"VirtualHub1"または"VirtualNetwork1")。 - Azure Network SDK または直接 Rest API 要求を利用する場合は、プライマリ "ハブ" テナントの承認トークンを "Authorization" ヘッダーに渡し、2 番目の "VNet" テナントの追加の承認トークンを特別な "x-ms-authorization-auxiliary" ヘッダーで渡す必要があります。
- ドキュメントを参照してください: テナント間で要求を認証する
次のステップ
- Virtual WAN の詳細については、FAQ を参照してください。