第15回 セキュアな検索基盤 -- SSO連携とゼロトラスト環境での検索アクセス制御

はじめに

企業の情報セキュリティ要件は年々厳しくなっています。 検索システムには膨大な機密文書が集約されるため、適切な認証・認可の仕組みが不可欠です。

本記事では、第5回で紹介したロールベース検索をさらに発展させ、SSO(シングルサインオン)との連携を中心としたセキュリティアーキテクチャを設計します。

対象読者

  • エンタープライズ環境で Fess を運用する方

  • SSO 連携(OIDC、SAML)の設計を行う方

  • ゼロトラストセキュリティの概念を理解している方

セキュリティ要件の整理

典型的な企業のセキュリティ要件を整理します。

セキュリティ要件
要件 説明
シングルサインオン 既存の IdP と連携し、追加のログイン操作を不要にする
ロールベースアクセス ユーザーの所属・権限に応じた検索結果の制御
通信の暗号化 HTTPS によるすべての通信の暗号化
API アクセス制御 トークンベースの API 認証と権限管理
監査ログ 誰が何を検索したかの記録

SSO 連携の選択肢

Fess がサポートする SSO プロトコルと、それぞれの適用場面を整理します。

SSO プロトコルの比較
プロトコル 代表的な IdP 適用場面
OpenID Connect Entra ID、Keycloak、Google クラウド環境、モダンな認証基盤
SAML 2.0 Entra ID、Okta、OneLogin エンタープライズ環境、既存の SAML IdP がある場合
SPNEGO/Kerberos Active Directory Windows 統合認証環境

OpenID Connect / Entra ID による SSO 連携

最もモダンで推奨されるアプローチです。 Fess では汎用の OpenID Connect 連携に加えて、Entra ID(Azure AD)専用の連携機能も提供されています。 ここでは Entra ID との連携を例に解説します。

認証フローの概要

  1. 利用者が Fess にアクセス

  2. Fess が Entra ID の認証画面にリダイレクト

  3. 利用者が Entra ID で認証(MFA 含む)

  4. Entra ID が認証トークンを Fess に返却

  5. Fess がトークンからユーザー情報とグループ情報を取得

  6. グループ情報をもとにロールを割り当て

  7. ロールに基づいた検索結果を提供

Entra ID 側の設定

  1. Entra ID でアプリケーションを登録

  2. リダイレクト URI を設定(Fess の OIDC コールバック URL)

  3. 必要な API 権限を付与(User.Read、GroupMember.Read.All など)

  4. クライアント ID とシークレットを取得

Fess 側の設定

管理画面の [システム] > [全般] のページ内で SSO の接続情報を設定します。 主な設定項目は以下の通りです。

  • OpenID Connect プロバイダの URL(Entra ID のエンドポイント)

  • クライアント ID

  • クライアントシークレット

  • スコープ(openid、profile、email など)

  • グループクレームの設定

グループとロールのマッピング

Entra ID のグループを Fess のロールにマッピングします。 これにより、Entra ID でのグループ管理がそのまま検索結果の制御に反映されます。

例: Entra ID のグループ「Engineering」→ Fess のロール「engineering_role」

SAML による SSO 連携

既存の SAML IdP がある環境では、SAML 連携が適しています。

認証フローの概要

SAML では、SP(Service Provider = Fess)と IdP 間で SAML Assertion をやり取りします。

  1. 利用者が Fess にアクセス

  2. Fess が SAML AuthnRequest を IdP に送信

  3. IdP が利用者を認証

  4. IdP が SAML Response(ユーザー属性を含む)を Fess に返却

  5. Fess がユーザー属性からロールを割り当て

Fess 側の設定

SAML 連携には、以下の設定が必要です。

  • IdP のメタデータ URL または XML ファイル

  • SP のエンティティ ID

  • Assertion Consumer Service URL

  • 属性マッピング(ユーザー名、メールアドレス、グループ)

SPNEGO / Kerberos 連携

Windows Active Directory 環境では、SPNEGO/Kerberos による統合 Windows 認証が利用できます。 ドメインに参加した PC からブラウザでアクセスすると、追加のログイン操作なしに自動的に認証されます。

この方式は利用者にとって最も透過的ですが、設定は最も複雑です。 Active Directory のドメイン環境が前提となります。

通信の暗号化

SSL/TLS の設定

本番環境では、Fess へのすべてのアクセスを HTTPS で行うことが推奨されます。

リバースプロキシ方式(推奨)

Nginx や Apache HTTP Server をリバースプロキシとして配置し、SSL 終端を行います。 Fess 自体は HTTP で動作し、リバースプロキシが HTTPS を処理します。

[クライアント] --HTTPS--> [Nginx] --HTTP--> [Fess]

この方式のメリットは、証明書の管理がリバースプロキシに集約されることです。

Fess 直接設定方式

Fess の Tomcat に直接 SSL 証明書を設定することも可能です。 小規模環境やリバースプロキシを設置しない場合に適しています。

API アクセスのセキュリティ

第11回で紹介した API 連携のセキュリティを強化します。

トークンの権限設計

アクセストークンに適切な権限を設定します。

トークン設計例
用途 権限 備考
検索ウィジェット用 検索のみ(読み取り専用) フロントエンドで使用
バッチ処理用 検索 + インデクシング サーバーサイドで使用
管理自動化用 管理 API アクセス 運用スクリプトで使用

トークンの管理

  • 定期的なローテーション(3〜6ヶ月ごと)

  • 不要になったトークンの即時無効化

  • トークンの利用状況の監視

監査とログ

検索システムにおける監査ログは、セキュリティインシデントの調査やコンプライアンス対応に重要です。

Fess が記録するログ

  • 検索ログ: 誰が何を検索したか(管理画面の [システム情報] > [検索ログ] で確認可能)

  • 監査ログ (audit.log): ログイン・ログアウト・アクセス・権限変更などの操作が統一的に記録される

ログの保管

セキュリティ要件に応じて、ログの保管期間を設定します。 コンプライアンス上の要件がある場合は、外部のログ管理システム(SIEM)への転送も検討します。

まとめ

本記事では、エンタープライズ環境での Fess のセキュリティアーキテクチャを設計しました。

  • SSO 連携の3つの選択肢(OIDC、SAML、SPNEGO)とそれぞれの適用場面

  • OpenID Connect による Entra ID 連携の設計

  • SSL/TLS による通信の暗号化

  • API アクセストークンの権限設計

  • 監査ログの管理

セキュリティと利便性のバランスを取りながら、安全な検索基盤を構築しましょう。

次回は、検索インフラの自動化について扱います。

参考資料