FessでMicrosoft 365のコンテンツをクロールするためのプラグイン「fess-ds-microsoft365」を利用する際、Entra IDでどのMicrosoft Graph API権限を設定すればよいかを詳しく解説します。DataStoreごとに必要な権限が異なるため、使用する機能に応じて最小限の権限を設定することをお勧めします。
権限一覧(クイックリファレンス)
まず、各DataStoreで必要な権限を一覧で示します。
| DataStore | 必須権限 | 条件付き権限 |
|---|---|---|
| OneDriveDataStore | Files.Read.All | User.Read.All, Group.Read.All, Sites.Read.All |
| OneNoteDataStore | Notes.Read.All | User.Read.All, Group.Read.All, Sites.Read.All |
| TeamsDataStore | Team.ReadBasic.All, Group.Read.All, Channel.ReadBasic.All, ChannelMessage.Read.All, ChannelMember.Read.All, User.Read.All | Chat.Read.All, Files.Read.All |
| SharePointDocLibDataStore | Files.Read.All, Sites.Read.All | – |
| SharePointListDataStore | Sites.Read.All | – |
| SharePointPageDataStore | Sites.Read.All | – |
SharePoint系のDataStoreでは、site_idを指定する場合、Sites.Read.Allの代わりにSites.Selectedを使用できます。
OneDriveDataStore
ユーザー、グループ、SharePointサイトのOneDriveファイルをクロールします。
必要な権限
| 権限 | 必須/条件付き | 条件 |
|---|---|---|
| Files.Read.All | 必須 | ドライブとファイルへのアクセスに必要 |
| User.Read.All | 条件付き | user_drive_crawler=trueの場合(デフォルト: true) |
| Group.Read.All | 条件付き | group_drive_crawler=trueの場合(デフォルト: true) |
| Sites.Read.All | 条件付き | shared_documents_drive_crawler=trueの場合(デフォルト: true) |
使用されるGraph APIエンドポイント
| エンドポイント | 用途 | 条件 |
|---|---|---|
| GET /users | ライセンス付きユーザーの取得 | user_drive_crawler=true |
| GET /groups | Microsoft 365グループの取得 | group_drive_crawler=true |
| GET /users/{id}/drive | ユーザーのドライブを取得 | user_drive_crawler=true |
| GET /groups/{id}/drive | グループのドライブを取得 | group_drive_crawler=true |
| GET /sites | すべてのサイトを取得 | shared_documents_drive_crawler=true |
| GET /sites/{id}/sites | 子サイトを取得(再帰的) | shared_documents_drive_crawler=true |
| GET /sites/{id}/drives | サイトのドライブを取得 | shared_documents_drive_crawler=true |
| GET /drives/{id}/items/{id}/children | ドライブアイテムの一覧 | 常時 |
| GET /drives/{id}/items/{id}/content | ファイルコンテンツの取得 | 常時 |
| GET /drives/{id}/items/{id}/permissions | アイテムの権限を取得 | 常時 |
最小権限の設定
ユーザーのOneDriveのみをクロールする場合:
Files.Read.All, User.Read.All
グループ共有ドキュメントとSharePoint共有ドキュメントが不要な場合は、パラメータを以下のように設定します:
user_drive_crawler=true
group_drive_crawler=false
shared_documents_drive_crawler=false
OneNoteDataStore
OneNoteのノートブック、セクション、ページをクロールします。
必要な権限
| 権限 | 必須/条件付き | 条件 |
|---|---|---|
| Notes.Read.All | 必須 | OneNoteコンテンツへのアクセスに必要 |
| User.Read.All | 条件付き | user_note_crawler=trueの場合(デフォルト: true) |
| Group.Read.All | 条件付き | group_note_crawler=trueの場合(デフォルト: true) |
| Sites.Read.All | 条件付き | site_note_crawler=trueの場合(デフォルト: true) |
使用されるGraph APIエンドポイント
| エンドポイント | 用途 | 条件 |
|---|---|---|
| GET /users | ライセンス付きユーザーの取得 | user_note_crawler=true |
| GET /groups | Microsoft 365グループの取得 | group_note_crawler=true |
| GET /sites/root | ルートサイトの取得 | site_note_crawler=true |
| GET /users/{id}/onenote/notebooks | ユーザーのノートブックを取得 | user_note_crawler=true |
| GET /groups/{id}/onenote/notebooks | グループのノートブックを取得 | group_note_crawler=true |
| GET /sites/{id}/onenote/notebooks | サイトのノートブックを取得 | site_note_crawler=true |
| GET /onenote/notebooks/{id}/sections | ノートブックのセクションを取得 | 常時 |
| GET /onenote/sections/{id}/pages | セクションのページを取得 | 常時 |
| GET /onenote/pages/{id}/content | ページのコンテンツを取得 | 常時 |
TeamsDataStore
Teamsのチャンネル、メッセージ、チャットをクロールします。Teamsは他のDataStoreと比べて必要な権限が多くなります。
必要な権限
| 権限 | 必須/条件付き | 条件 |
|---|---|---|
| Team.ReadBasic.All | 必須 | チーム情報へのアクセスに必要 |
| Group.Read.All | 必須 | TeamsはMicrosoft 365グループに基づく |
| Channel.ReadBasic.All | 必須 | チャンネル情報へのアクセスに必要 |
| ChannelMessage.Read.All | 必須 | チャンネルメッセージの読み取りに必要 |
| ChannelMember.Read.All | 必須 | チャンネルメンバー情報(権限用)に必要 |
| User.Read.All | 必須 | ユーザータイプの解決に必要 |
| Chat.Read.All | 条件付き | chat_idを指定している場合 |
| Files.Read.All | 条件付き | append_attachment=trueの場合 |
使用されるGraph APIエンドポイント
| エンドポイント | 用途 | 条件 |
|---|---|---|
| GET /teams | すべてのチームを取得 | team_idを指定していない場合 |
| GET /groups/{id} | 特定のチームを取得 | team_idを指定した場合 |
| GET /teams/{id}/channels | チャンネルを取得 | channel_idを指定していない場合 |
| GET /teams/{id}/channels/{id} | 特定のチャンネルを取得 | channel_idを指定した場合 |
| GET /teams/{id}/channels/{id}/messages | チャンネルメッセージを取得 | 常時 |
| GET /teams/{id}/channels/{id}/messages/{id}/replies | リプライメッセージを取得 | ignore_replies=falseの場合(デフォルト) |
| GET /teams/{id}/channels/{id}/members | チャンネルメンバーを取得 | 権限用 |
| GET /chats/{id}/messages | チャットメッセージを取得 | chat_idを指定した場合 |
| GET /chats/{id}/members | チャットメンバーを取得 | chat_idを指定した場合 |
| GET /shares/{id}/driveItem/content | 添付ファイルのコンテンツを取得 | append_attachment=trueの場合 |
注意点
Teamsでチャンネルメッセージのみをクロールする場合(チャットは不要、添付ファイルも不要)の最小権限は以下の通りです:
Team.ReadBasic.All, Group.Read.All, Channel.ReadBasic.All, ChannelMessage.Read.All, ChannelMember.Read.All, User.Read.All
SharePointDocLibDataStore
SharePointドキュメントライブラリとそのファイルをクロールします。
必要な権限
| 権限 | 必須/条件付き | 条件 |
|---|---|---|
| Files.Read.All | 必須 | ドキュメントライブラリとファイルへのアクセスに必要 |
| Sites.Read.All | 必須 | site_idを指定しない場合(すべてのサイトを列挙) |
| Sites.Selected | 必須 | site_idを指定した場合(Sites.Read.Allの代替) |
Files.Read.Allに加えて、Sites.Read.AllまたはSites.Selectedのいずれかが必要です。
使用されるGraph APIエンドポイント
| エンドポイント | 用途 | 条件 |
|---|---|---|
| GET /sites | すべてのサイトを取得 | site_idを指定していない場合 |
| GET /sites/{id}/sites | 子サイトを取得(再帰的) | site_idを指定していない場合 |
| GET /sites/{id} | 特定のサイトを取得 | site_idを指定した場合 |
| GET /sites/{id}/drives | ドキュメントライブラリを取得 | 常時 |
| GET /drives/{id}/items/root/children | ドライブアイテムの一覧 | 常時 |
| GET /drives/{id}/items/{id}/content | ファイルコンテンツの取得 | 常時 |
| GET /drives/{id}/items/root/permissions | ドライブの権限を取得 | 常時 |
SharePointListDataStore
SharePointリストとそのアイテムをクロールします。
必要な権限
| 権限 | 必須/条件付き | 条件 |
|---|---|---|
| Sites.Read.All | 必須 | site_idを指定しない場合(すべてのサイトを列挙) |
| Sites.Selected | 必須 | site_idを指定した場合(Sites.Read.Allの代替) |
使用されるGraph APIエンドポイント
| エンドポイント | 用途 | 条件 |
|---|---|---|
| GET /sites | すべてのサイトを取得 | site_idを指定していない場合 |
| GET /sites/{id} | 特定のサイトを取得 | site_idを指定した場合 |
| GET /sites/{id}/lists | リストを取得 | 常時 |
| GET /sites/{id}/lists/{id} | 特定のリストを取得 | list_idを指定した場合 |
| GET /sites/{id}/lists/{id}/items | リストアイテムを取得 | 常時 |
| GET /sites/{id}/lists/{id}/items/{id} | アイテムの再取得(フォールバック) | フィールドが空の場合 |
| GET /sites/{id}/permissions | サイトの権限を取得 | 権限用 |
SharePointPageDataStore
SharePointページ(サイトページ、ニュースページ、Wikiページなど)をクロールします。
必要な権限
| 権限 | 必須/条件付き | 条件 |
|---|---|---|
| Sites.Read.All | 必須 | site_idを指定しない場合(すべてのサイトを列挙) |
| Sites.Selected | 必須 | site_idを指定した場合(Sites.Read.Allの代替) |
使用されるGraph APIエンドポイント
| エンドポイント | 用途 | 条件 |
|---|---|---|
| GET /sites | すべてのサイトを取得 | site_idを指定していない場合 |
| GET /sites/{id} | 特定のサイトを取得 | site_idを指定した場合 |
| GET /sites/{id}/pages | サイトページを取得 | 常時 |
| GET /sites/{id}/pages/{id} | ページのコンテンツを取得 | 常時 |
| GET /sites/{id}/permissions | サイトの権限を取得 | 権限用 |
Sites.Selected権限の設定方法
SharePoint系のDataStore(SharePointDocLib、SharePointList、SharePointPage)でsite_idを指定する場合、Sites.Read.Allの代わりにSites.Selectedを使用できます。これにより、特定のサイトにのみアクセスを限定できます。
設定手順
- Azure Portalでアプリ登録に
Sites.Selected権限を付与 - Microsoft Graph PowerShellまたはAPIを使用して、特定サイトへのアクセス権を付与
- 各対象サイトへのアクセスを明示的に許可
参考: https://learn.microsoft.com/en-us/graph/permissions-reference#sitesselected
全権限一覧
| 権限 | 用途 | 使用するDataStore |
|---|---|---|
| User.Read.All | ユーザー情報、ライセンス確認 | OneDrive, OneNote, Teams |
| Group.Read.All | Microsoft 365グループの取得 | OneDrive, OneNote, Teams |
| Files.Read.All | ファイルとドライブの読み取り | OneDrive, SharePointDocLib, Teams(添付ファイル) |
| Notes.Read.All | OneNoteコンテンツの読み取り | OneNote |
| Sites.Read.All | すべてのSharePointサイトの列挙 | OneDrive, OneNote, SharePointDocLib, SharePointList, SharePointPage |
| Sites.Selected | 特定サイトのみへのアクセス | SharePointDocLib, SharePointList, SharePointPage(site_id指定時) |
| Team.ReadBasic.All | チームの基本情報 | Teams |
| Channel.ReadBasic.All | チャンネルの基本情報 | Teams |
| ChannelMessage.Read.All | チャンネルメッセージの読み取り | Teams |
| ChannelMember.Read.All | チャンネルメンバーの読み取り | Teams |
| Chat.Read.All | チャットメッセージの読み取り | Teams(chat_id指定時) |
最小権限の考え方
アプリケーションに付与する権限は、必要最小限に抑えることが推奨されます。
- OneDriveDataStore: 不要なクローラーを無効化
user_drive_crawler=falseでUser.Read.Allを省略group_drive_crawler=falseでGroup.Read.Allを省略shared_documents_drive_crawler=falseでSites.Read.Allを省略OneNoteDataStore: OneDriveと同様のパターン
user_note_crawler=false、group_note_crawler=false、site_note_crawler=falseを必要に応じて設定SharePoint系DataStore:
site_idを指定Sites.Read.Allの代わりにSites.Selectedを使用Azure ADでサイトごとの追加設定が必要
TeamsDataStore: オプション機能をスキップ
chat_idを指定しなければChat.Read.Allは不要append_attachment=falseでFiles.Read.Allは不要
まとめ
fess-ds-microsoft365プラグインでは、使用するDataStoreと設定パラメータによって必要な権限が異なります。本ガイドを参考に、使用する機能に応じた最小限の権限を設定してください。Entra IDの管理者に権限申請する際にも、「このDataStoreを使うからこの権限が必要」と具体的に説明できるようになります。