Microsoft Teams は社外のユーザーをゲストとしてチームに招待することで、チームの中でチャットやファイル共有、Web 会議などさまざま行うことができます。しかし、チームの用途によってはユーザーが間違えて社外のメンバーを加えてしまっては困るといった場合もあるかもしれません。または、IT 部門などが許可したチームのみゲスト共有させたいと思うかもしれません。

Microsoft Teams では、社外のユーザーをゲストとして招待できるかどうかは、テナント全体の設定によって行うことができます。

Microsoft Teams でゲスト アクセスをきちんと設定する場合の設定項目を調べてみた
https://idea.tostring.jp/?p=5061

Office 365 / Azure Active Directory にゲスト招待できる社外ユーザーのメールドメインを制限する
https://idea.tostring.jp/?p=4807

しかしながら、チーム個別でゲスト共有の機能を設定することは GUI の操作では行えず、どうやら PowerShell を利用する必要があるようです。そこで今回は、せっかくならと PowerShell から Microsoft Teams にチームを作成し、そのついでにゲスト共有も無効化してしまおうと思いました。

(2021/1/27 追記)Microsoft のサポートに問い合わせたところ、チームの AllowToAddGuests プロパティを変更するには、Azure AD Premium のライセンスが必要とのことでした。検証ではライセンスが無くても設定ができ動作することを確認していますが、利用するためにはライセンスが必要です。ご注意ください。

利用する PowerShell モジュールは 2 つ

この操作を行うには、Microsoft Teams と AzureADPreview の 2 つの PowerShell モジュールをインストールしておく必要があります。

PowerShell Gallery | MicrosoftTeams
https://www.powershellgallery.com/packages/MicrosoftTeams/

PowerShell Gallery | AzureADPreview
https://www.powershellgallery.com/packages/AzureADPreview/

どちらも PowerShell から Install-Module コマンドで入手できると思います。

Install-Module -Name MicrosoftTeams
Install-Module -Name AzureADPreview

まずはここまで準備しておきましょう。

チームの作成とゲスト共有の無効化

チームを作成し、そのチームのゲスト共有を無効化する PowerShell は次のようになります。

# チーム名
$DisplayName = "かっこいいチーム"
# チームのメールアドレスの @ より前の部分
$MailNickName = "Cool"
# チーム所有者
$Owner = "john@contoso.com"
# チームのプライバシー設定( Public または Private )
$Visibility = "Private"

# Microsoft Teams と Azure AD のテナントへ接続
Connect-MicrosoftTeams
Connect-AzureAD -Credential

# チームの作成
$team = New-Team -DisplayName $DisplayName -MailNickName $MailNickName -Owner $Owner -Visibility $Visibility

# ゲスト共有の無効化
$template = Get-AzureADDirectorySettingTemplate | ? {$_.displayname -eq "group.unified.guest"}
$setting = $template.CreateDirectorySetting()
$setting["AllowToAddGuests"] = "False"
New-AzureADObjectSetting -TargetType Groups -TargetObjectId $team.GroupId -DirectorySetting $setting

# テナントから切断
Disconnect-MicrosoftTeams
Disconnect-AzureAD

コメントにもあるとおり、前半部分が Microsoft Teams にチームを作成する処理、後半部分がゲスト共有を無効化している処理です。ゲスト共有の設定は Azure AD の PowerShell で行う必要があるというわけですね。それぞれの設定を行うため、実行時に与える資格情報は、Microsoft Teams の全体管理ができる権限と、Azure AD のグループ管理者以上の権限が必要です。

Azure AD の PowerShell に関しては、公式のリファレンスがあります。

PowerShell を使用したグループ設定の構成 – Azure AD | Microsoft Docs
https://docs.microsoft.com/ja-jp/azure/active-directory/enterprise-users/groups-settings-cmdlets#create-settings-for-a-specific-group

特定の Microsoft 365 グループまたは Microsoft Teams チームにゲストが追加されるのを防ぐ
https://docs.microsoft.com/ja-jp/microsoft-365/solutions/per-group-guest-access?view=o365-worldwide

分かってしまえば簡単ですね。

この設定の注意点は、チームの既定の設定はゲスト共有が有効であり、作成後に特定のチームのゲスト共有を無効化できるという点です。既定の設定ではゲスト共有を無効化し、必要に応じて特定のチームのみゲスト共有を有効化したいといったことはできません。どういうことかと言うと、IT 部門などが PowerShell を利用してゲスト共有を無効化する前に招待されたゲストを防ぐことができません。そのため、この制限での運用を厳密に行いたい場合には、一般ユーザーによるチームの作成は無効化しておき、チームの作成はユーザーに代わり IT 部門が行うことになると思います。

さいごに

というわけで、運用でも使えそうな Microsoft Teams にチームを作成するついでにゲスト共有を無効化する PowerShell でした。

ここまで PowerShell で書けて動作確認ができれば、Power Automate と Azure Automation の組合せでいろいろな応用が利きそうです。実はこのあたりを上手く利用すると、ゲスト共有を無効化したチームをユーザーが自分たちで作れるようになりますね。そのあたりは別の記事に書きたいと思います。