クラウドで、アジリティを手に入れよう。
column

コラム

異なるサブスクリプション、異なるADテナントでVNet Peering

こんにちは、クラウドCoEの熊谷です。

みなさん、IT資格取得していますか。

私は2020年にAWSの資格を8つ、今年の2021年にAzureの資格を4つ取得しました。

AWS認定の有効期限が3年、Azure認定の有効期限が2年なので、私の2023年は認定更新YEARになる予定です。

この夏はKubernetesを勉強したので、CKA/CKAD/CKSも興味があります。計画的に取得しなくては。

異なるサブスクリプション、異なるADテナントでVNet Peering

前置き:なぜこの構成が必要だったか

さて本日はAzureのお話です。

異なるサブスクリプション、異なるADテナント間のVNet Peeringの設定方法について解説します。

既に複数のブログでも解説されているようですが、2021年8月に設定方法がシンプルになりました。

[公式ドキュメント]仮想ネットワーク ピアリングを作成する – Resource Manager、異なるサブスクリプション、および Azure Active Directory テナント

例えば異なるサブスクリプションに配置したVirtual Machine同士で通信したい場合は、こちらの設定が必要ですよね。

私の場合は、違う理由でこちらの構成を採用しました。

【今回のケース:サブスクリプションAのApp ServiceをVnet統合し、Private Linkに接続されたサブスクリプションBのAzure Functionへアクセスする】

PrivateLinkを利用しているAzureサービスの場合、一律インターネットからのアクセスが遮断されてしまいます。ファイアウォールによるグローバルIPの制御も無効になります。


ですがアクセス元がAzureサービスの場合、VNet統合・VNet Peering等の設定を行うことでインターネットを経由せずプライベートに接続することが出来ます


今回はアクセスを許容したいApp ServiceのアプリがたまたまAzure Functionとは異なるテナント・サブスクリプション内にあったため、こちらの構成でネットワークの構築をしました。

手順

さて、本題です。VNet Peeringの設定を入れていきましょう。

作業に入る前の状態はコチラです。

  • サブスクリプションA側:Azure ADにuserAが居て、Virtual Network Aが作成されている。userAはVirtual Network Aに対するネットワーク共同作成者権限を持っている(※)
  • サブスクリプションB側:Azure ADにuserBが居て、Virtual Network Bが作成されている。userBはVirtual Network Bに対するネットワーク共同作成者権限を持っている

※権限が付与されているかどうかは、Virtual NetworkのIAMの欄で確認できます。

作業1 サブスクリプションA側:userBのゲストユーザーを作る

イメージ

※以下の例ではわかりやすいように、サブスクリプションA側のテーマを白色、B側のテーマを黒色にしました。

まずはサブスクリプションB側で、userBのユーザープリンシパル名をメモっておきます。

サブスクリプションAのAzure ADを開き、「ユーザー」画面から「新しいゲストユーザー」をクリックします。

先ほどメモしたユーザープリンシパル名を「電子メールアドレス」欄に入力します。

招待メールを受信できなくてもゲストユーザーとしてサブスクリプションにログインできますので、メールを受信できるアドレスである必要はありません。

[公式ドキュメント]招待リンクまたはメールを使用せずに B2B コラボレーション ゲスト ユーザーを追加する

その他の項目は特に入力する必要はありません。



作成したuserB用のゲストユーザーがVirtual Network Aの操作が出来るよう、ネットワーク共同作成者のロールを付与します。

その後、ブラウザからhttps://portal.azure.com/[tenant id]にアクセスします。tenant idはサブスクリプションAのテナントIDを指します。「テナントのプロパティ」から確認しましょう。


テナントIDが確認出来たら、ブラウザにURLを入力し、userBのユーザープリンシパル名でログインしてみましょう。

passwordは、userBがサブスクリプションBにログインする際と同じものを利用できます。

userB(ゲスト)がサブスクリプションAのVirtual Network Aを閲覧できることを確認してください。


作業2 サブスクリプションB側:userAのゲストユーザーを作る

同様の作業をサブスクリプションB側でも行い、userAのゲストユーザーを作りましょう。

画面キャプチャや説明は割愛します。

  • 手順1:サブスクリプションA側で、userAのユーザープリンシパル名を確認
  • 手順2:サブスクリプションB側で、userAのゲストユーザーを作成
  • 手順3:サブスクリプションB側で、userAにvnet-bに対するネットワーク共同作成者ロールを付与
  • 手順4:サブスクリプションB側のテナントIDを確認し、userAでログイン

イメージ

作成したuserAでログインし、vnet-bを閲覧できることを確認してください。

これにより、userAはvnet-aだけでなくvnet-bの操作が出来る権限を、userBはvnet-bだけでなくvnet-aの操作が出来る権限を得ました。

作業3 サブスクリプションA側:userAを使ってPeering設定

さて、いよいよPeering設定です。

この作業を行う前に、vnet-aとvnet-bのリソースIDを控えておいてください。

プロパティからリソースIDを確認

サブスクリプションA・B双方で作業が必要になりますが、まずはAで作業しましょう。

userAでサブスクリプションAへログインします。

vnet-aのピアリングを追加します。

最初は以下のような画面が表示されます。

「この仮想ネットワーク」の「ピアリングリンク名」を入力します。

「リモート仮想ネットワーク」の設定では、まず「リソースIDを知っている」にチェックを入れます。


すると以下のように画面の表示内容が変わりますので、先ほどメモしておいたvnet-bリソースIDを入力しましょう。

またディレクトリは、サブスクリプションBと紐づくディレクトリを選択し、認証ボタンを押します。

すると認証画面が表示されますので、userA(今現在作業中のユーザー)で認証をします。

その後、何事もなかったかのように特にメッセージも表示されず認証画面が閉じますので、「追加」ボタンを押します。

これでvnet-a側の設定は完了です。

まだb側の作業が残っていますので、ピアリング状態は「開始済み」になっています。

作業4 サブスクリプションB側:userBを使ってPeering設定

さて今度はB側の作業です。

同様の作業を行ってください。

  • サブスクリプションBuserBでログイン
  • vnet-bでピアリング設定(※1)
  • userBで認証(※2)

※1 vnet-aのリソースIDを入力し、サブスクリプションAに紐づくテナントを選択します。


※2 現在作業しているuserBで認証

ピアリングの設定が完了しました。

ピアリングの状態は「接続済み」になっています。

ここでvnet-a側に戻ってみると、こちらもピアリング状態が「接続済み」になっていることがわかります。

以上です!