コラム
こんにちは、クラウド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側の作業です。
同様の作業を行ってください。
- サブスクリプションBへuserBでログイン
- vnet-bでピアリング設定(※1)
- userBで認証(※2)
※1 vnet-aのリソースIDを入力し、サブスクリプションAに紐づくテナントを選択します。
※2 現在作業しているuserBで認証
ピアリングの設定が完了しました。
ピアリングの状態は「接続済み」になっています。
ここでvnet-a側に戻ってみると、こちらもピアリング状態が「接続済み」になっていることがわかります。
以上です!
-
PICK UP
ピックアップ
-
ピックアップコンテンツがありません
-
RANKING
人気の記事
-
-
1
EKSのノードオートスケーラーとしてKarpent…
EKSのノードオートスケーラーとしてKarpenterを試す
2022/08/17
-
2
~マルチアカウントのベストプラクティスを手軽に実現…
~マルチアカウントのベストプラクティスを手軽に実現~AWS Control To…
2019/09/27
-
3
EBS CSI driverをEKSアドオンとして…
EBS CSI driverをEKSアドオンとして導入してみた
2022/09/27
-
4
Infrastructure as Codeを理解…
Infrastructure as Codeを理解する(第2回)AWS Clou…
2020/11/27
-
5
Ciliumを使ってマルチクラウドのKuberne…
Ciliumを使ってマルチクラウドのKubernetes間でService Di…
2024/07/25
-
-
ARCHIVE
アーカイブ
-
- July 2024 (1)
- January 2024 (1)
- December 2023 (2)
- June 2023 (2)
- May 2023 (1)
- April 2023 (1)
- March 2023 (2)
- February 2023 (2)
- January 2023 (1)
- December 2022 (2)
- October 2022 (2)
- September 2022 (2)