FessのMicrosoft 365プラグインの権限設定ドキュメントを追加

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必須権限条件付き権限
OneDriveDataStoreFiles.Read.AllUser.Read.All (1), Group.Read.All (2), Sites.Read.All (*3)
OneNoteDataStoreNotes.Read.AllUser.Read.All (1), Group.Read.All (2), Sites.Read.All (*4)
TeamsDataStoreTeam.ReadBasic.All, Group.Read.All, Channel.ReadBasic.All, ChannelMessage.Read.All, ChannelMember.Read.All, User.Read.AllChat.Read.All (5), Files.Read.All (6)
SharePointDocLibDataStoreFiles.Read.All, Sites.Read.All (*7)
SharePointListDataStoreSites.Read.All (*7)
SharePointPageDataStoreSites.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 を使うことで、より制限されたアクセスが可能です。

  1. Azure PortalでアプリにSites.Selected権限を付与
  2. Microsoft Graph PowerShellまたはAPIで特定サイトへのアクセスを許可
  3. 各対象サイトへのアクセスを明示的に許可

参考: 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を使うからこれだけの権限が必要」と説明しやすくなったと思います。

FessのMicrosoft365データストアでプロキシを利用する

FessのMicrosoft 365データストア(fess-ds-microsoft365)で、プロキシサーバー経由での接続がサポートされました。企業ネットワーク内からMicrosoft 365にアクセスする際に、プロキシサーバーの経由が必須な環境でも、FessでOneDriveやSharePoint、Teamsのコンテンツをクロールできるようになります。

設定パラメータ

データストアの設定画面で、以下のパラメータを追加できます。

パラメータ名説明
proxy_hostプロキシサーバーのホスト名またはIPアドレス
proxy_portプロキシサーバーのポート番号
proxy_usernameプロキシ認証のユーザー名(認証が必要な場合)
proxy_passwordプロキシ認証のパスワード(認証が必要な場合)

設定例

プロキシサーバーを利用する場合、データストアのパラメータに以下のように設定します。

認証なしプロキシの場合

proxy_host=proxy.example.com
proxy_port=8080

認証ありプロキシの場合

proxy_host=proxy.example.com
proxy_port=8080
proxy_username=proxyuser
proxy_password=proxypassword

補足

このプロキシ設定は、Azure ADへのOAuth認証時とMicrosoft Graph API呼び出し時の両方で利用されます。プロキシを設定しない場合は、従来通り直接接続でMicrosoft 365にアクセスします。

この機能は、PR #31で追加されました。

fesen-httpclientの改善

fesen-httpclientは、OpenSearch/Elasticsearch用のHTTPクライアントライブラリです。今回、OpenSearch 3.xの各種Stats APIに対応するためのHTTPアクション実装を追加しました。

追加したエンドポイント

以下の6つのStats API向けアクションを実装しました。

アクションクラスエンドポイント説明
HttpClusterStatsAction/_cluster/statsクラスター全体の統計情報(ノード数、インデックス数、リソース使用状況など)
HttpIndicesStatsAction/{index}/_statsインデックスレベルの詳細統計(ドキュメント数、ストアサイズ、インデキシング、検索など)
HttpDataStreamsStatsAction/_data_stream/_statsデータストリームの統計情報
HttpRemoteStoreStatsAction/_remotestore/statsリモートストアの統計情報
HttpSegmentReplicationStatsAction/_segment_replicationセグメントレプリケーションの統計情報
HttpWlmStatsAction/_wlm/statsワークロード管理(WLM)の統計情報

今後の予定

今回の変更でStats APIのサポートを拡充しましたが、まだ対応していないエンドポイントもあります。今後も対応できるものは追加していきたいと考えています。