FessのOIDCプラグインでissuerとIDトークンの検証条件を確認する

FessのOIDCプラグインに、IDトークンの対象クライアントと有効期限を確認する修正がマージされました。15.9への移行では、プラグイン導入に加え、プロバイダーの設定が新しい検証条件を満たすか確認します。

issuerを明示する

新しい oic.issuer は任意設定で、初期値は空文字です。未設定では iss の検証を省略し、最初のログイン時に警告を出します。プロバイダーのDiscovery文書の issuer をそのまま system.properties に指定してください。末尾のスラッシュも区別されます。この項目は管理画面の全般設定にはありません。

sso.type=oic
oic.issuer=https://op.example.com
oic.token.server.url=https://op.example.com/token
oic.client.id=your-client-id

上記URLは例です。既存の認可URL、クライアントシークレット、スコープなどもプロバイダーに合わせて設定し、修正を含む fess-sso-oidc を導入したFessでログインを確認します。

IDトークンの検証条件

aud に設定した oic.client.id が含まれる必要があります。クライアントIDが空では受け付けません。azp があればクライアントIDと一致する必要があり、複数のaudienceを持つトークンにはazpが必須です。

exp は数値で必須です。現在時刻が exp + 300秒 より前なら受け付けます。300秒は固定の許容差で設定項目ではありません。issuerを指定した場合はissが完全一致する必要があります。ログイン失敗時は画面に一般的なSSOエラー、ログに検証理由が記録されます。設定照合と時刻同期で原因を切り分けます。

HTTPSと残る制限

トークンエンドポイントはHTTPSが必須です。HTTPは localhost、127.0.0.0/8のリテラルIPv4アドレス、::1 に限ります。社内ホスト名や別ホストへのHTTP接続を許可するスイッチはありません。従来その構成を使っていた環境では、HTTPSへの変更が必要です。

JWT署名の暗号的な検証、nonce、PKCEは今回も実装されていません。IDトークンをブラウザから受け取るのではなく、Fessがプロバイダーのトークンエンドポイントから直接取得する設計で、TLSのサーバー検証に依存します。クレーム検証の追加を、署名検証まで実装された変更と混同しないでください。

関連PR

FessでAmazon BedrockをRAGと埋め込みに利用する設定

Fess 15.9向けのドキュメントに、Amazon BedrockのLLM・埋め込みプロバイダーの設定が追加されました。fess-llm-bedrockを使い、チャットはConverse API、文書チャンクの埋め込みはInvokeModel APIで実行します。

前提とインストール

プラグインはFess 15.9以降、Java 21以降を対象とします。利用リージョンでモデルへアクセスできるAWSアカウントと、モデル呼び出し用の認証情報が必要です。Fessのバージョンに合うプラグインを配置して再起動します。現時点の最新リリース15.8.0へそのまま適用する手順ではありません。

チャットの設定

管理画面の「システム」>「全般」、またはsystem.propertiesでプロバイダーを選びます。

rag.llm.name=bedrock

fess_config.propertiesではチャットを有効にし、リージョンとモデルを設定して再起動します。

rag.chat.enabled=true
rag.llm.bedrock.region=us-east-1
rag.llm.bedrock.model=us.amazon.nova-2-lite-v1:0

チャット自体の初期値は無効です。Bedrock側のリージョン初期値はus-east-1、モデルは上記のNova 2 Liteの米国クロスリージョン推論プロファイルです。モデルとリージョンは実際に利用できる組み合わせへ変更してください。リージョンはこの設定から取得し、AWS_REGIONは参照しません。

APIキーの初期値は空で、その場合はAWS認証情報を解決しSigV4署名を使います。IAMロールかFess実行ユーザーの共有認証情報を使う構成を検討できます。必要な権限はbedrock:InvokeModelとbedrock:InvokeModelWithResponseStreamです。推論プロファイルを使う場合は、ルーティング先のモデルにも権限が必要になります。IAM Identity CenterのSSOプロファイルには対応しません。

文書チャンクの埋め込み

こちらはsystem.propertiesに設定します。チャットの設定ファイルとは異なり、fess_config.propertiesへ書いても読み込まれません。

content_chunker.enabled=true
content_chunker.embedding.name=bedrock
content_chunker.embedding.dimension=1024
content_chunker.embedding.bedrock.region=us-east-1
content_chunker.embedding.bedrock.model=amazon.titan-embed-text-v2:0

Bedrock埋め込みのモデル初期値はTitan Text Embeddings V2です。Titanは256・512・1024次元を利用できます。Cohere Embed v3は1024次元、v4は256・512・1024・1536次元で、モデルが返せる次元数と設定を合わせる必要があります。埋め込みは子JVMで実行するため、WebプロセスだけのJVM認証情報では届かない場合があります。

制限と運用上の注意

Cohere v3は1テキスト2048文字までで、プラグインは自動短縮・分割しません。ストリーミングは開始前のリクエストを再試行できますが、回答が流れ始めた後の失敗は再試行しません。

APIキーはチャット用ならfess_config.properties、埋め込み用ならsystem.propertiesの専用キーで指定すると管理画面のシステム情報でマスクします。環境変数やJVMシステムプロパティ経由のキーはそこでマスクされないため、長期キーをその方法で渡す運用は避けてください。fess-storage-s3と併用する場合は、AWS SDKの版を合わせるためプラグインも一緒に更新します。

利用できるバージョン

Fess 15.9.0に含まれる予定の機能になります。現時点では、まだ、リリースしていないので、今後のテストで変更される可能性もあります。

関連PR

Fessでファイルの所有者と最終更新者を検索する

Fessがクロールしたファイルに、所有者ownerと最終更新者last_modifierを記録する変更が入りました。検索結果の表示と詳細検索から、担当者を手がかりに資料を探せます。

どの情報を取り込むか

所有者はSMB、ローカルファイルシステム、FTPクライアントが取得したファイルのメタデータを使います。DOMAIN\aliceのような値はドメイン部分を除き、aliceを記録します。

最終更新者はOffice文書などから抽出するmeta:last-authorを優先し、なければ所有者を利用します。WebのHTMLにはファイル所有者がありませんが、HTTPで取得したOfficeファイルの最終更新者は対象になります。既にメタデータマッピングで値を設定している場合は上書きしません。

初期値と検索方法

fess_config.propertiesでは両方とも初期状態で有効です。

crawler.document.file.owner.enabled=true
crawler.document.file.last.modifier.enabled=true

個別のクロール設定のパラメーターではconfig.owner.enabled=false、config.last.modifier.enabled=falseのように上書きできます。所有者を無効にした場合は、最終更新者への代用にもその所有者を使いません。

標準bootstrapテーマの結果情報に値を表示し、詳細検索にも入力欄を追加します。検索例はowner:alice、last_modifier:"Taro Yamada"です。部分一致ではなく、keyword型の値との完全一致を使います。APIでもfields.owner=aliceによる絞り込みやfacet.field=ownerの集計に利用できます。

既存インデックスの移行

既存の文書インデックスには新フィールドのマッピングを自動追加しません。次のクロールの前に、管理画面のメンテナンスから再インデックスするか、ownerとlast_modifierをkeyword型として追加してください。最初のクロールで動的にtext型になると、完全一致の絞り込みやファセットを正しく利用できません。

クロールを無効化する設定は今後の取得を制御するもので、既に格納した値を即座に消す操作ではありません。アカウント名を表示する運用が適切かを確認し、必要に応じて既存データの処理と再クロールも計画してください。検索結果には従来どおり文書の閲覧ロールが適用されます。所有者名だけでアクセス権が増える機能ではありません。

利用できるバージョン

Fess 15.9.0に含まれる予定の機能になります。現時点では、まだ、リリースしていないので、今後のテストで変更される可能性もあります。

関連PR