【失敗】Microsoft Graphで特定のグループのみゲストを追加できるようにする
はじめに
Teamsでチームを作ると同時にAzure ADにMicrosoft 365グループが作成されます。
既定ではこのグループにゲストユーザー(例:別会社の人)も追加できます。
しかし、ゲストを追加するということは情報漏洩の危険にもさらされるので、特定のグループのみゲストを追加できるようにしたいといったニーズは少なからずあると思います。
今回はMicrosoft Graph groupSettingリソースの範囲で検証してみました。
groupSetting
Graphのドキュメントを見るとグループ設定(groupSetting)があるのでどんなリソースか見てみます。
テナント全体およびオブジェクト固有の制限と許可される動作をカスタマイズするために使用できる構成を定義します。 たとえば、グループ表示名の単語一覧をブロックしたり、ゲスト ユーザーをグループ所有者にするかどうかを定義したりできます。
https://learn.microsoft.com/ja-jp/graph/api/resources/groupsetting?view=graph-rest-1.0
Azure ADの管理画面では設定できないような項目も設定できそうです。
注意事項をまとめてみました。
- テナントレベルの既定値を変更するにはgroupSettingTemplates を使用して新しい設定オブジェクトを作成する必要がある
- グループレベルの設定 > テナントレベルの設定
- Microsoft 365グループのみ対応
- 基本的にはAzure AD Premium P1が必要
Graph ExplolerでgroupSettingリソースを取得してみます。
https://graph.microsoft.com/v1.0/groupSettings
レスポンスのvalueが空の状態、またはなにかしらの情報が返ってきます。
一例ですがdisplayNameがGroup.Unifiedとなったものが返ってきた場合、Azure ADのグループの名前付けポリシーやカスタム禁止用語を利用時に自動で作成されたと考えられます。

Group.UnifiedにAllowToAddGuestsという設定があるのでこの値をtrue、またはfalseに設定してあげるとM365グループにゲストを追加できるかできないかを制御できそうです。
公開情報にも記載があります。
To enable guest access for only a few Microsoft 365 groups, set AllowToAddGuests to be true at the tenant-level, and then selectively disable this setting for individual Microsoft 365 groups to exclude.
https://learn.microsoft.com/ja-jp/graph/group-directory-settings#groupunified
今回の要件ではテナントレベルでfalse・グループレベルでtrueにしたら要件は満たせそうです。
M365グループにゲストを既定で追加できるのでAllowToAddGuestsのテナントレベルの既定値はtrueと推測します。
groupSettingTemplates
テナント/グループそれぞれでgroupSettingのAllowToAddGuestsの値を設定すればいいことが分かったので実際に作成してみます。
groupSettingはgroupSettingTemplatesリソースをベースに作成するようです。
既定では、すべてのグループがプリセットの既定値を継承します。 既定の設定を変更するには、 groupSettingTemplates を使用して新しい設定オブジェクトを作成する必要があります。
https://learn.microsoft.com/ja-jp/graph/api/resources/groupsetting?view=graph-rest-1.0
groupSettingTemplatesは全テナント共通の設定値なので作成/更新/削除はできません。
代わりに読み取りができるのでgroupSettingを作成時にテンプレートIDを指定します。
groupSettingTemplatesは何種類かありますが、今回はAllowToAddGuestsが含まれるGroup.Unified(テナント)とGroup.Unified.Guest(グループ)を使用します。
テナントのgroupSettingを作成


https://graph.microsoft.com/v1.0/groupSettings
{
"templateId": "62375ab9-6b52-47ed-826b-58e47e0e304b",
"values": [
{
"name": "AllowToAddGuests",
"value": "false"
}
]
}
Content-type:application/json
この状態でhttps://graph.microsoft.com/v1.0/groupSettingsでGETすると作成されていることを確認できます。
2つ以上のgroupSettingリソースは設定できない
既にテナントに同一テンプレートをもとにしたgroupSettingが存在している場合、上記の手順では次のようなエラーになります。

よって、https://graph.microsoft.com/v1.0/groupSettingsでidを確認し、AllowToAddGuestsの値をfalseにする必要があります。(または削除して再作成)

https://graph.microsoft.com/v1.0/groupSettings/{setting-id}
{
"values": [
{
"name": "AllowToAddGuests",
"value": "false"
}
]
}
Content-type:application/json
グループのgroupSettingを作成
ゲストを追加できるグループはAllowToAddGuestsをtrueに設定します。


https://graph.microsoft.com/v1.0/groups/{groupid}/settings
{
"templateId": "08d542b9-071f-4e16-94b0-74abb372e3d9",
"values": [
{
"name": "AllowToAddGuests",
"value": "true"
}
]
}
Content-type:application/json
この状態でhttps://graph.microsoft.com/v1.0/groups/{groupid}/settingsでGETすると作成されていることを確認できます。
削除と更新
groupSettingを作成するとidも作成されるので、このidを頼りに削除(DELETE)や更新(PATCH)を行うことができます。
結果
テナント:AllowToAddGuests:false
チーム:AllowToAddGuests:true
| 場所 | ゲスト追加 | 頭の中 |
|---|---|---|
| Teamsアプリ | × | ここが〇になるはずなのにんなんで!? |
| Teams管理センター | 〇 | あ、管理センターから追加できるのか |
| Azure AD | 〇 | 同上 |
おかしい。。。と思い調査を進めると公開情報に以下のような記述がありました。
AllowToAddGuests is false at the tenant-level, the group-level setting is overwritten
https://learn.microsoft.com/en-us/graph/group-directory-settings#groupunifiedguest
なるほど。。。こんな制約が。。。
設定反映に時間かかりすぎじゃないと思ったのが間違いでした。
Microsoft的には今回のシナリオはそもそも想定していないようです。
というわけでMicrosoft GraphのgroupSettingリソースで特定のグループのみゲストを追加できるようにしたいという要件を満たすのはかなり難しいという結論です。
※テナントレベルではtrueにしておいて、チーム作成時はfalse・申請があったチームのみtrueに変更することで実現はできなくもないですが運用でカバーを超えています()
一応テナントとチームのAllowToAddGuestsのパターン別に検証してみたので気になる方はご確認ください。(設定反映時間はそんなにかかりません)
パターン別検証
テナント:AllowToAddGuests:true
チーム:AllowToAddGuests:true または 既定
| 場所 | ゲスト追加 |
|---|---|
| Teamsアプリ | 〇 |
| Teams管理センター | 〇 |
| Azure AD | 〇 |
テナント:AllowToAddGuests:true
チーム:AllowToAddGuests:false
| 場所 | ゲスト追加 |
|---|---|
| Teamsアプリ | × |
| Teams管理センター | 〇 |
| Azure AD | 〇 |
テナント:AllowToAddGuests:false
チーム:AllowToAddGuests:false または 既定
| 場所 | ゲスト追加 |
|---|---|
| Teamsアプリ | × |
| Teams管理センター | 〇 |
| Azure AD | 〇 |
代案
秘密度ラベルをMicrosoft 365グループに付与することでゲストの動きを制御できるので調べてみると良いかもしれません。(参考)
おわりに
Microsoft 365はすべて許可しておいて必要なところはブロックしてねという思想に基づいていそうです。
Discussion