IntuneでTeamsのFirewall規則を設定するにはPowerShellを使うべき理由

Azure

IntuneでTeamsにFirewall規則を設定する方法を紹介します。

先日、以下の記事を参考にIntuneでTeamsのFirewall規則を設定しようとしたところ、見事にハマってしまいました…

どうやらTeamsにFirewall規則を設定するには、デバイスの構成プロファイルからエンドポイント保護設定をしてもダメなようです。

結論としては、Intuneから対象デバイスにPowerShellスクリプトを適用して設定します。

今回はその手順を紹介させて頂きます。

IntuneでTemasのFirewall規則を設定するにはPowerShellを使うべき理由

デバイスの構成プロファイルからTeamsのFirewall規則を設定するには、カスタムファイアウォール規則を追加し、Teamsアプリに割り当てる必要があります。

その際、環境変数を用いて対象デバイス上のTeamsアプリを指定すれば良いように考えられますが、Microsoftのサポートによると、環境変数を用いて指定することはできないようです。

代替方法として、IntuneからPowerShellスクリプトをデバイスに適用することで、TeamsアプリにFirewall規則を追加することができます。

Teamsに限らず他のアプリにFirewallを規則を設定する際も同様です。

IntuneでTemasのFirewall規則をPowerShellを用いて設定する方法

以下の手順で対象デバイスにTeamsのFirewall規則を設定することができます。

前提条件

IntuneでTeamsについてのFirewall規則を設定するには、以下の条件を満たしている必要がある。

  • Windows 10バージョン1607以降を実行しているデバイス
  • Azure Active Directoryに参加しているデバイス(Hybrid Azure AD joinを含む)
  • Intuneに登録されているデバイス

TeamsのFirewall規則を構成するPowerShellスクリプトの作成

1. 「スタート」>「Windows PowerShell ISE」をクリックし、PowerShellを起動する。

2. 次のスクリプトを入力し、任意の名前で保存する。※今回は「Creates_firewall_rules_for_Teams.ps1」という名前で作成した。


$users = Get-ChildItem (Join-Path -Path $env:SystemDrive -ChildPath 'Users') -Exclude 'Public', 'ADMINI~*'
if ($null -ne $users) {
    foreach ($user in $users) {
        $progPath = Join-Path -Path $user.FullName -ChildPath "AppData\Local\Microsoft\Teams\Current\Teams.exe"
        if (Test-Path $progPath) {
            if (-not (Get-NetFirewallApplicationFilter -Program $progPath -ErrorAction SilentlyContinue)) {
                $ruleName = "Teams.exe for user $($user.Name)"
                "UDP", "TCP" | ForEach-Object { New-NetFirewallRule -DisplayName $ruleName -Direction Inbound -Profile Private -Program $progPath -Action Allow -Protocol $_ }
                Clear-Variable ruleName
            }
        }
        Clear-Variable progPath
    }
} 

※上記のスクリプトでは、プライベートネットワークについてのFirewall受信規則を作成しているが、お客様が使用するネットワークに合わせて、次のようにプロファイルを変更する必要がある。
・ドメインネットワーク:Domain
・プライベートネットワーク:Private
・パブリックネットワーク:Public

IntuneによるWindows 10デバイスへのPowerShellスクリプト割り当て

3. Microsoft Endpoint Manager admin centerにサインインする。

4. 「デバイス」>「スクリプト」>「追加」をクリックする。
Intune_Firewall_Teams_1

5. 「基本」画面で、任意のプロパティを入力し、「次へ」をクリックする。今回は次のように設定した。
・名前:[Creates firewall rules for Teams]
・説明:[(c) Microsoft Corporation 2018. All rights reserved. Script provided as-is without any warranty of any kind. Use it freely at your own risks. Must be run with elevated permissions. Can be run as a GPO Computer Startup script, or as a Scheduled Task with elevated permissions. The script will create a new inbound firewall rule for each user folder found in c:\users. Requires PowerShell 3.0.]
Intune_Firewall_Teams_2

6. 「スクリプト設定」画面で、次のプロパティを入力し、「次へ」をクリックする。
・スクリプトの場所:作成したPowerShellスクリプトを参照する
・このスクリプトをログオンしたユーザーの資格情報を使用して実行する:[いいえ]
・スクリプト署名チェックを強制:[いいえ]
・64ビットのPowerShellホストでスクリプトを実行する:[いいえ]
Intune_Firewall_Teams_3

7. 「割り当て」画面で、「含めるグループを選択」をクリックする。PowerShellスクリプトを割り当てたいグループを選択し、「次へ」をクリックする。
Intune_Firewall_Teams_4

8. 「確認・追加」画面で、「追加」をクリックする。
Intune_Firewall_Teams_5

9. 「スクリプト」画面で、PowerShellスクリプトが正常に作成されたことを確認する。
Intune_Firewall_Teams_6

10. Firewall規則を割り当てたい対象デバイスを起動し、Azure ADで新しく作成したユーザーでサインインする。

サインインされた時点で対象デバイスがIntuneと同期されPowerShellスクリプトが割あてられます

11. 「スクリプト」画面で、作成したPowerShellスクリプトを選択し、クリックする。「デバイスの状態」をクリックし、サインインしたデバイスの状態が「成功」になっていることを確認する。
Intune_Firewall_Teams_7

※PowerShellスクリプトがデバイスに適用され、実行中にエラーが発生した場合は、「デバイスの状態」画面のデバイス状態に「失敗」と表示される。

また、冒頭に記した前提条件を満たしていないデバイスは、PowerShellスクリプトが割り当てられない為、「デバイスの状態」画面に、デバイス情報が表示されない。
Intune_Firewall_Teams_8

12. 対象デバイスで「コントロールパネル」>「システムとセキュリティ」>「Windows Defender ファイアウォール」>「詳細設定」>「受信の規則」をクリックし、「Teams.exe for user <ユーザー名>」が作成されていることを確認する。
※TCPとUDPについてのFirewall規則が作成される。
Intune_Firewall_Teams_9

おわりに

IntuneでTeamsのFirewall規則を設定する方法でした!

僕と同じように悩まれていた方は、ぜひ試してみてください。(公式ドキュメントに明記してくれればいいのに…)