Fess Microsoft 365プラグイン(fess-ds-microsoft365)を使う際に、Azure App登録でどの権限を設定すればいいのかがわかりにくかったので、READMEに詳しくまとめました。fess-ds-microsoft365のPR #32 の話です。
背景
Microsoft 365プラグインでは、OneDrive、OneNote、Teams、SharePointなど複数のDataStoreをサポートしていますが、それぞれで必要なMicrosoft Graph APIの権限が異なります。今までは必要な権限がすべて列挙されているだけだったので、どのDataStoreを使う場合にどの権限が必要なのかがわかりにくい状態でした。
最小権限の原則に従って、必要な権限だけを設定できるようにドキュメントを整備しました。
DataStoreごとの必要権限
各DataStoreで必要な権限を表にまとめました。
| DataStore | 必須権限 | 条件付き権限 |
|---|---|---|
| OneDriveDataStore | Files.Read.All | User.Read.All (1), Group.Read.All (2), Sites.Read.All (*3) |
| OneNoteDataStore | Notes.Read.All | User.Read.All (1), Group.Read.All (2), Sites.Read.All (*4) |
| TeamsDataStore | Team.ReadBasic.All, Group.Read.All, Channel.ReadBasic.All, ChannelMessage.Read.All, ChannelMember.Read.All, User.Read.All | Chat.Read.All (5), Files.Read.All (6) |
| SharePointDocLibDataStore | Files.Read.All, Sites.Read.All (*7) | – |
| SharePointListDataStore | Sites.Read.All (*7) | – |
| SharePointPageDataStore | Sites.Read.All (*7) | – |
条件付き権限の説明:
– (1) user_drive_crawler=true または user_note_crawler=true の場合(デフォルト: true)
– (2) group_drive_crawler=true または group_note_crawler=true の場合(デフォルト: true)
– (3) shared_documents_drive_crawler=true の場合(デフォルト: true)
– (4) site_note_crawler=true の場合(デフォルト: true)
– (5) chat_id を指定している場合
– (6) append_attachment=true の場合
– (*7) site_id を指定している場合は Sites.Selected で代替可能
Sites.Selected権限について
site_id を指定してSharePoint系のDataStoreを使う場合、Sites.Read.All の代わりに Sites.Selected を使うことで、より制限されたアクセスが可能です。
- Azure PortalでアプリにSites.Selected権限を付与
- Microsoft Graph PowerShellまたはAPIで特定サイトへのアクセスを許可
- 各対象サイトへのアクセスを明示的に許可
参考: https://learn.microsoft.com/en-us/graph/permissions-reference#sitesselected
最小権限の設定例
OneDriveのみ(ユーザードライブ)の場合:
Files.Read.All, User.Read.All
SharePointリスト(特定サイト)の場合:
Sites.Selected(サイトごとの設定が必要)
Teams(チャンネルのみ、チャットなし)の場合:
Team.ReadBasic.All, Group.Read.All, Channel.ReadBasic.All, ChannelMessage.Read.All, ChannelMember.Read.All, User.Read.All
まとめ
これで、使用するDataStoreに応じて必要最小限の権限だけを設定できるようになりました。Azureの管理者に権限申請する際も、「このDataStoreを使うからこれだけの権限が必要」と説明しやすくなったと思います。