初回ログオン時の Teams ブロックの確認画面 を抑制する

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

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


本記事では、Teams アプリ の起動時に 以下のような Windows Defender ファイアウォールの ブロック確認画面が出てしまう事象に遭遇したのですが、うまく対策を講じることができました。
その際のノウハウを共有したいと思います。
私は AVD 環境で検証していますが、その他の環境の場合でも 参考にしていただけると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e26f17c2-e7b7-bd61-f83a-6f39d8886bef.png)
（上記の画面内のテキスト文：検索ワード用）
- このアプリの機能のいくつかが Windows Defender ファイアウォールでブロックされています
- すべてのパブリック、プライベート、ドメイン ネットワークで、Windows Defender ファイアウォールにより Microsoft Teams の機能のいくつかがブロックされています。

# なぜ この対策が必要なのか？
Teams に必要な通信のためには、この画面が出た際に「アクセスを許可する」を押す必要があります。そうすることで Teams のために必要な通信の許可ルールが作成されます。
しかし、一般ユーザーでは 権限が足りずに このルールを作ることができません。

結果として、「キャンセル」を押すか「×」を押して閉じるしかなくなります。
その場合は、Teams に必要な通信を ブロックするルールが作成されてしまいます。
これでは、不都合が生じます。

一般ユーザーに対して、Teams に最適な通信を行わせるためには、あらかじめ この通信を「許可」するルールを構成しておく必要がある・・・ということになります。

本事象については、以下の公式ブログ記事でも説明されています。
（公式ブログ記事）
https://jpwinsup.github.io/blog/2021/04/11/Networking/Firewall/Conditions-for-displaying-FW-pop-ups/

# どういうシーンで 抑止を実施すべきか？
本ソリューションは、以下のような場合にお勧めします。
- ユーザーに ローカル管理者の権限 を許可していない
- キオスク端末などで、仕組み上 毎回が 初回ログオンのシチュエーションになる
- AVD などの VDI環境で ユーザーがサインインするごとに サインイン先の VM がランダムに変わる場合
- 出来栄え・見栄えの良いデスクトップ環境を ユーザーに提供したい
　→　正直、ブロックの確認画面が出てしまうのは、カッコ良くない。
　　 ユーザーエクスペリエンス的に 低いレベルに見えてしまいます。

# 導入方法による対処策の違い
Teams の導入は 「マシンごとのインストール」と「ユーザーごとのインストール」の２通りの方法があります。この導入方法ごとに、対処策が違ってくるので、注意が必要です。

## 導入方法について
導入方法の違いを分かりやすく説明した情報が なかなか見つからなかったのですが、そんな中でも 以下のリンク先が比較的わかりやすい方でした。
（参考）
https://learn.microsoft.com/ja-jp/azure/virtual-desktop/teams-on-avd#install-teams-on-azure-virtual-desktop

以下のように 導入方法によって インストールされるパス に違いが生じます。
このパスの違いによって、対処策が違ってきます。

|導入方法|コマンド|導入先のパス|
|:-:|:-:|:-:|
|マシンごと|msiexec /i <path_to_msi> /l*v <install_logfile_name> ALLUSER=1 ALLUSERS=1|Program Files配下で固定<br>64bit：C:\Program Files (x86)\～<br>32bit：C:\Program Files\～|
|ユーザーごと|msiexec /i <path_to_msi> /l*v <install_logfile_name> ALLUSERS=1|各ユーザープロファイルの<br>AppData配下で可変<br>%AppData%～|

:::note info
AVD の場合は、あらかじめ "Microsoft 365 Apps" が 導入済みのイメージが存在します。
その場合は、"マシンごとに導入" の場合と同じ扱いになります。
:::

## 対処方法について
導入方法によって、ブロック確認画面の抑止のためには、以下の対処方法を行います。
|導入方法|対処法|具体的な対処内容|
|:-:|:-:|:-:|
|マシンごと|グループポリシー|次章にて解説|
|ユーザーごと|スクリプト|後述する サンプルスクリプト の公開情報を参照|

マシンごとのインストールでは、導入されたパスが一律なので グループポリシーで URL を配布するだけで簡単に済みます。

ユーザーごとのインストールでは、導入されるパスが 各ユーザーのフォルダ配下になっているため、グループポリシーで配布することができません。
そのため、スクリプトで対処する必要があるのです。
私は AVD で使うことを中心に記事を書いているので、スクリプトの方法の検証はしていません。
以下の公開情報の記事を参考に サンプルスクリプト を活用して 対策を行ってください。

https://learn.microsoft.com/ja-jp/microsoftteams/client-firewall-script

# マシンごとの導入向け、対策手順
「Windows Defender ファイアウォール」で「着信プログラムの例外を定義する」の項目を設定することで、ブロック画面 が抑止されます。

グループポリシー管理エディタを使い「コンピューターの構成」－「ポリシー」－「管理用テンプレート」－「ネットワーク」－「ネットワーク接続」－「Windows Defender ファイアウォール」－「ドメインプロファイル」を開きます。
そして、「Windows Defender ファイアウォール、着信プログラムの例外を定義する」を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/32268273-b7de-070d-15d2-95161baaaf84.png)

下図の通り「プログラムの例外」の値として、以下の値を設定します。
※実際に Teams.exe が導入されている場所を確認して そのパスを設定してください。

~~~
C:\Program Files (x86)\Microsoft\Teams\current\teams.exe:*:enabled:Teams1
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/3c19263d-3cb2-1801-0e40-45c36856cd78.png)

上記で作成したポリシーを 適用させたいコンピューターが所属する OU にリンクします。

# 動作確認
以下のいずれかの方法で Teams を導入したマシンにサインインします。
- 初回ログオン
- 管理者ユーザーで、テストユーザーの ユーザープロファイルを削除してから ログオン
※一度、サインインしてしまうと ファイアウォールルールが作られてしまうため、ユーザープロファイルが作成されていない状態でテストしてください。

サインインした際に、ブロックの確認画面が出なければ OK です。

# ご参考
本文内で紹介していた URL も含めて、以下に紹介します。

## Teams クライアントの導入方法
Teams のページで紹介されている「マシンごと」「ユーザーごと」の導入方法の記事です。
ですが、これがかなり判りづらい。

https://learn.microsoft.com/ja-jp/microsoftteams/get-clients?tabs=Windows

## Teams on Azure Virtual Desktop をインストールする
「マシンごと」「ユーザーごと」の導入方法は、こちらの説明の方が判りやすいです。

https://learn.microsoft.com/ja-jp/azure/virtual-desktop/teams-on-avd#install-teams-on-azure-virtual-desktop

## Windows ファイアウォールにより「Windows セキュリティの重要な警告」ポップアップが表示される条件と対処方法について
ブロックの確認画面が出てしまう事象についての解説になっています。

https://jpwinsup.github.io/blog/2021/04/11/Networking/Firewall/Conditions-for-displaying-FW-pop-ups/

注意点：上記の記事より抜粋

:::note alert
アプリケーションをユーザー フォルダーにインストールする場合、実行ファイルのフルパス名はユーザーごとに異なるものを指定する必要があるため、グループ ポリシーによる展開等ができません。（%USERPROFILE% 環境変数を利用した指定もできません。）
このため、弊社では、弊社製 Microsoft Teams アプリケーションを対象に、ユーザー フォルダーにインストールされたプログラムに対する受信許可の規則を自動作成する PowerShell スクリプトを以下の技術文書中で公開しております。
:::

## ユーザーごとの導入をした場合の対処策
公式には、以下のサンプルスクリプト を実行するように案内されています。

https://learn.microsoft.com/ja-jp/microsoftteams/client-firewall-script

なお、Windows Defender ファイアウォールに %UserProfile% のパスは指定できない・・と公式で明言されているのですが、以下の記事で紹介されている内容を見る限りは、うまく制御出来ているっぽいことが書かれています。これでうまく動作するなら、サンプルスクリプトを動かさなくても良いことになりますね。
これは 自己責任で試してみてください（私は、検証できていません）

https://admintokage.com/2023/04/01/how-to-allow-teams-on-firewall/