Microsoft Entra テナント制限v2 で 外部テナントへのアクセスをブロックする

# はじめに
現在は、Azure Virtual Desktop (AVD) で、ホストプールと仮想マシンを作成する際に、どれだけシンプルな画面からデプロイさせられるか？ を研究しています。
その際には、いくつかのハードルがあったのですが、そこで得られたノウハウを記事にしていこうと思っています。以下のリンク先で シリーズ化 していますので併せて参照ください。

https://qiita.com/carol0226/items/7318fdd7aff780f5177c

テナント制限v2 は、[2023年5月からパブリックプレビュー](https://jpazureid.github.io/blog/azure-active-directory/tenant-restriction-v2-is-now-public-preview/) で新しく提供された機能です。

この記事では、テナント制限v2 を AVD環境 で動作させる方法や 課題と その解決方法まで紹介したいと思います。
※私は、AVD で使用するために この記事を書きましたが それ以外の Windowsデバイス（PCやVM）でも同じように テナント制限を利用出来ると思います。

---

# テナント制限とは何か？
テナント制限とはどういうものか？
それと、機密情報の流出を防ぐうえで、テナント制限と組み合わせて考える必要があるアクセス制御はどういうものがあるのかを、以下の記事にまとめました。ぜひ こちらも参照ください。

https://qiita.com/carol0226/items/3bcf4e2014c422679733

---

# テナント制限 v1 と v2 の違い
テナント制限には v1 と v2 があります。
単純に v2 の方が良い・・・という訳では無く v1 と v2 でメリット・デメリットがあります。
私は、比較検討した結果、AVD で使う場合には v2 の方が良いと判断しました。

違いについては、以下の記事にまとめてあります。
ぜひ、ご参照ください。

https://qiita.com/carol0226/items/a5d11103506cee9e00fb

---

# テナント制限v2 の前提条件
- Microsoft Entra ID P1 以上のライセンス（旧名称：Azure AD Premium P1）
- グローバル管理者またはセキュリティ管理者のロールを持つアカウント
- Windows 10 / 11 に、最新の更新プログラムの適用

（参考：前提条件）
https://learn.microsoft.com/ja-jp/azure/active-directory/external-identities/tenant-restrictions-v2#prerequisites

---

# テナント制限v2 で サポートされていないシナリオ
認識しておかなければならない点が いくつかあるようです。
- Chrome、Firefox、および PowerShell などの .NET アプリケーション
　他社製アプリでは、制限されずにアクセス出来てしまいます。
　テナント制限v2 を使う上で 一番注意すべき点です。
　この穴を防ぐ方法は、本記事で後述していますので、参考にしてください。
- コンシューマー OneDrive アカウントの匿名アクセスがブロックできません。<br>https://onedrive.live.com/ をブロックすることで、プロキシ レベルで回避できます。
　個人用OneDriveと OneDrive For Business は、URLが違うので 個人用だけ URLフィルタでブロックする方法で対処する必要があります。
- ユーザーが、匿名リンクまたは Azure AD 以外のアカウントを使って、Slack などのサード パーティ アプリにアクセスする場合。
　これの対策として、不用なサードパーティのサービスには、URLフィルタでブロックしておくしか無いですね。
- ユーザーが、ホーム コンピューターから職場のコンピューターに Azure AD で発行されたトークンをコピーし、それを使って Slack などのサード パーティ アプリにアクセスする場合。
　こんな方法で 回避できちゃうんだ～。ハッカーの手口みたいな・・・
　私のテーマでは AVD での利用なので、他のPCから トークンをコピーしてこられないように対策することでカバーできそうです。

:::note info
URLフィルタとの組み合わせについては、「テナント制限とは何か？」でも紹介しましたが、こちらの記事（[リンク](https://qiita.com/carol0226/items/3bcf4e2014c422679733 "テナント制限、条件付きアクセス、URLフィルタ を組み合わた アクセス制御")）で説明しています。
併せて参照ください。
:::

（参考：サポートされていないシナリオ）
https://learn.microsoft.com/ja-jp/azure/active-directory/external-identities/tenant-restrictions-v2#unsupported-scenarios

---

# テナント制限v2 の構成手順
0. 既定の テナント制限v2 を構成（必須）
0. 特定のパートナー用にテナント制限 V2 を構成する（任意）
0. テナント制御v2 の有効化 を PC へ配布する（必須）

---

## 1. 既定の テナント制限v2 を構成
この章の手順を行う事で、該当のテナントにおいて テナント制限 が有効化されます。
以下の公開情報の通りに手順を進めれば問題ありません。
しかし、公開情報と Azure Portal の設定項目名に相違があって判りづらかったです。私が検証した際の画面キャプチャを貼っておきますので、比較しながら 該当の設定項目を見つけてください。

（参考：ステップ 1: 既定のテナント制限 V2 を構成する）
https://learn.microsoft.com/ja-jp/azure/active-directory/external-identities/tenant-restrictions-v2#step-1-configure-default-tenant-restrictions-v2

0. Azure Active Directory の設定ページで「External Identities」を選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/1377e6b2-55b7-7c3b-177e-fca5804d9400.png)

0. 「テナント間アクセス設定」を選び「既定の設定」を選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b7d9b177-3d65-43c2-fb67-90c4d68ac784.png)

0. 下へスクロールさせ、「テナント制限の既定値を編集する」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b7d057b9-978d-cecc-41f7-d45834d255b3.png)

0. 「外部のユーザーとグループ」を選択して、「アクセスのブロック」と「外部のすべてのユーザーとグループ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/1a007bdf-bbab-80de-abbc-5580c71c3f7e.png)

0. 「外部アプリケーション」を選択して、「アクセスのブロック」と「すべての外部アプリケーション」を選択して、「保存」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/636f6d27-99fb-0fd8-a352-eb779e586226.png)

以上の設定で、テナント側の設定は完了です。

---

## 2. 特定のパートナー用にテナント制限 V2 を構成する
この設定は、特定の 提携している企業のテナントだけは アクセスを許可させたい場合に行う設定です。テナント制限v2 を構成する上で「必須」ではありません。
外部テナントへのアクセスを一部だけ 許可したい場合のみ、設定してください。

（参考：ステップ 2: 特定のパートナー用にテナント制限 V2 を構成する）
https://learn.microsoft.com/ja-jp/azure/active-directory/external-identities/tenant-restrictions-v2#step-2-configure-tenant-restrictions-v2-for-specific-partners

---

## 3. テナント制御v2 の有効化 を PC へ配布する
Intune または、GPO を使って、テナント制御v2 の機能を有効化する必要があります。
3-1. Intune による配布
3-2. GPO による配布

### 3-1. Intune による配布
以下に、別途 記事化してあるため、参照ください。

https://qiita.com/carol0226/items/8a5f11acd6282705b6fe

---

### 3-2. GPO による配布
テナント制限v2 の GPO設定は、Windows 10/11 に存在します。
ドメインコントローラーには、既定で Windows 10/11 のポリシーテンプレートが無いため、テナント制限v2 の構成ができません。

そのための手順として、以下の 2 STEP を行います。
3-2-1. ポリシーテンプレートのダウンロードと保存
3-2-2. テナント制限v2 のポリシー設定

（参考：ステップ 3: Windows マネージド デバイスでテナント制限を有効にする）
https://learn.microsoft.com/ja-jp/azure/active-directory/external-identities/tenant-restrictions-v2#step-3-enable-tenant-restrictions-on-windows-managed-devices

---

#### 3-2-1. ポリシーテンプレートのダウンロードと保存
クライアントデバイスに該当するバージョンの ポリシーテンプレート をダウンロードし、ドメインコントローラーの SYSVOL フォルダ配下の PolicyDefinitions に保存する必要があります。

（参考：Windows でグループ ポリシー管理用テンプレート用のセントラル ストアを作成および管理する方法）
【ダウンロードリンク】
https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/group-policy/create-and-manage-central-store#links-to-download-the-administrative-templates-files-based-on-the-operating-system-version

私の場合は、下図のように ドメインコントローラーのローカルストア（Cドライブ配下の SYSVOL ～ PolicyDefinitions 配下に Win10_22H2 のフォルダを作って テンプレートを配置しました。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/60c38c3b-0888-0974-0d64-94cb11a945e9.png)

:::note info
なお、上記の方法（ローカルストア）では、１台のドメインコントローラーに対してだけの配置になります。
各ドメインコントローラーに、テンプレートを同期させるには、セントラルストアを作成します。
（参考：Windows でグループ ポリシー管理用テンプレート用のセントラル ストアを作成および管理する方法）
【セントラルストア】
https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/group-policy/create-and-manage-central-store#the-central-store
:::

---

#### 3-2-2. テナント制限v2 のポリシー設定
以下の手順でポリシー設定を行ってください。

1. 「グループポリシーの管理」ツールを開き、デバイスのコンピューターオブジェクトが含まれる OU（この場合は AVD）の配下に、ポリシー（テナント制限v2）を作ります。
※テナント制限v2 以外のポリシーは無視してください（私が AVD の管理用に作ったポリシー）

1. 作成したポリシー（テナント制限v2）を右クリックして、「編集」で開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/fdd8a605-6618-2525-a40f-362b02d6250c.png)

1. 左ペインでは、「コンピューターの構成」「ポリシー」「管理用テンプレート」「Windowsコンポーネント」「テナントの制限」の順に辿って開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/13697519-3dc2-c173-0672-7fcd6836b5b2.png)

1. 「クラウドポリシーの詳細」をダブルクリックで開きます。<br>以下のように Azure Portal の テナント間アクセス設定ーテナント制限の設定 ページから テナントID と ポリシーID を 同じ色の箇所にコピー＆ペーストしてから、ポリシーを保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/5bb66079-164e-3935-17fd-654140df874d.png)

以上で、テナント制限v2 の構成が完了しました。
対象のクライアント端末で、再起動するか、gpupdate /force のコマンドを実行すると、その端末で テナント制限 が機能します。
※ドメインに参加して、ポリシーを構成した OU に配置されたクライアント端末である必要があります。

---

# 動作確認
テストのために、https://office.com へアクセスし、外部テナントのアカウントでサインインを試みます。
テナント制限が機能していれば、以下のような画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/5ce686c2-ff85-b057-725f-92301a651a17.png)

:::note warn
Error Code : 80045C4D
Message : Signin restricted by cross tenant access policy for consumer accounts.
:::

そのあと、自社ドメインのアカウントでサインインを試みて、問題なくサインインすることができれば、テナント制御は 無事に構成されています。

---

# テナント制限v2 の課題と対策
## 課題
ここまで構成した状態で 外部テナント へのアクセスを実施した場合、以下の動作になります。

（自社テナントのみサインインが可能）
- Edge
- Officeアプリケーション

（外部のテナントにもサインインが可能）
- Google Chrome や Firefox などの他社ブラウザ
- PowerShell
- .NETアプリケーションで開発されたアプリケーション

せっかく テナント制限 を構成しても Microsoft製のアプリケーションでは機能しますが、それ以外では制限されません。この点が、セキュリティーホールになってしまいます。

左側の Edge ではテナント制限が機能しているが、Chrome だと 外部テナントに入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/fc67dea2-7b80-ca8f-ffd4-e112075b0026.png)

---

## 考察
以下の公開情報を見ると「Microsoft エンドポイントのファイアウォール保護を有効にする」にチェックを入れれば、良さそうに思います。しかし やってみて判りましたが そうではありませんでした。

（Chrome、Firefox、および PowerShell などの .NET アプリケーションをブロックする）
https://learn.microsoft.com/ja-jp/azure/active-directory/external-identities/tenant-restrictions-v2#block-chrome-firefox-and-net-applications-like-powershell

以下の画面の「緑枠」に注意事項が書かれています。これが重要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/2f1c5e70-6e07-cd8c-b9fb-b6e4a1006d3c.png)

:::note warn
対応する WDACポリシーなしで このチェックボックスを ON にすると、すべてのアプリケーションが Microsoftエンドポイントに到達できなくなります
:::

私の方で、試しに チェックボックスを ON にして試してみましたが、なんと Microsoft Entra アカウント（旧：Azure AD アカウント）でサインインするサービスには Edge でもアクセスができなくなりました。
左は、Edge、 右は Chrome
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/1ed818bf-56e0-8dd8-d7df-42c4cfe8fb81.png)

なお、https://office.com や、https://portal.azure.com などのサイトは アクセスできませんが、Microsoft Entra アカウントの認証とは関係無いサイト（例：http://www.yahoo.co.jp など）にはアクセスできます。ある意味 スゴい制御です。

---

## WDACポリシーで Edge や Officeアプリのブロックを解除する方法
WDACポリシーで、 Edge や Office はブロックされずに Chrome はブロックする方法は、別途 検証して 以下の記事にまとめました。

https://qiita.com/carol0226/items/c06e7f84dfe851885f12

上記の手順を構成した結果が 以下の状態です。
左側は Edge で自社テナントにサインイン。 右側の Chrome だと Office365のサインインさえできない。ここまで制御ができていれば、テナント制限v2 は使えそうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/8f9c919a-6219-6ac0-03e8-4178aa888f82.png)

---

## WDAC を使わない場合の対策
WDAC の構成は、複雑で難しいと感じる場合は、回避策として 利用して欲しくないアプリケーションを AppLocker などでブロックする方法も考えられそうです。

他社製アプリの制御について、希望するような動作結果が得られない場合は、テナント制限v1 と組みあわせて利用することでも回避が可能です。
テナント制限v1 は、どのようなデバイスやアプリであっても、テナント制限 を構成する事ができるため、Chrome で 外部テナントへアクセスしようとすると テナント制限 が掛かります。

テナント制限v1 と組み合わせる際には、以下の記事も参考にしてみてください。

https://qiita.com/carol0226/items/a5d11103506cee9e00fb