はじめに
前回は複数のデータソースを統合して横断検索する方法を紹介しました。 しかし、横断検索ができるようになると、新たな課題が浮上します。 それは「見せてよい情報」と「見せてはいけない情報」の制御です。
人事部門の機密資料が全社員の検索結果に表示されてしまっては困ります。 本記事では、Fess のロールベース検索を活用して、利用者の所属や権限に応じた検索結果の制御を設計・構築します。
対象読者
検索結果のアクセス制御が必要な方
社内の情報セキュリティを考慮した検索基盤を構築したい方
Active Directory や LDAP の基本的な知識がある方
シナリオ
ある企業には3つの部門があります。
営業部: 顧客情報、見積書、提案書を管理
開発部: 設計書、ソースコード仕様書、議事録を管理
人事部: 人事評価、給与情報、就業規則を管理
すべての部門が共通で参照できるドキュメント(社内規則、福利厚生案内など)もあります。
実現したいのは、以下の検索体験です。
営業部の社員は、営業部と共通のドキュメントのみ検索できる
開発部の社員は、開発部と共通のドキュメントのみ検索できる
人事部の社員は、人事部と共通のドキュメントのみ検索できる
経営層は、すべてのドキュメントを検索できる
ロールベース検索の仕組み
Fess のロールベース検索は、以下の流れで動作します。
クロール時: ドキュメントにロール情報(どのロールがアクセスできるか)を付与
ログイン時: 利用者のロール情報を取得(Fess 内部認証または外部認証連携)
検索時: 利用者のロールに一致するドキュメントのみを検索結果に表示
この仕組みにより、検索エンジンのレベルでアクセス制御が行われます。
ロール設計
ユーザーとグループの設計
まず、Fess 上でのユーザー・グループ・ロールの関係を整理します。
Fess でのグループ・ロール設定
ロールの作成
管理画面の [ユーザー] > [ロール] を選択
以下のロールを作成
sales_roleengineering_rolehr_rolemanagement_role
グループの作成
[ユーザー] > [グループ] を選択
以下のグループを作成
salesengineeringhrmanagement
ユーザーの作成とロール割り当て
[ユーザー] > [ユーザー] を選択
各ユーザーにグループとロールを割り当て
クロール設定でパーミッションを割り当てる
ドキュメントにアクセス制御情報を付与するには、クロール設定でパーミッションを指定します。 パーミッションは {role}ロール名、{group}グループ名、{user}ユーザー名 の形式で、改行区切りで入力します。
部門ごとのクロール設定
営業部のファイルサーバー
[クローラー] > [ファイルシステム] > [新規作成]
以下を設定
パス:
smb://fileserver/sales/パーミッション:
{role}sales_roleと{role}management_roleを改行区切りで入力
この設定により、営業部のファイルサーバーからクロールされたドキュメントは、sales_role と management_role を持つユーザーのみが検索結果で閲覧できます。
開発部のファイルサーバー
[クローラー] > [ファイルシステム] > [新規作成]
以下を設定
パス:
smb://fileserver/engineering/パーミッション:
{role}engineering_roleと{role}management_roleを改行区切りで入力
人事部のファイルサーバー
[クローラー] > [ファイルシステム] > [新規作成]
以下を設定
パス:
smb://fileserver/hr/パーミッション:
{role}hr_roleと{role}management_roleを改行区切りで入力
共通ドキュメント
[クローラー] > [ウェブ] または [ファイルシステム] > [新規作成]
パーミッション: デフォルトの
{role}guestのまま
デフォルトでは {role}guest が自動入力されます。ゲストユーザーを含むすべてのユーザーが guest ロールを持つため、すべてのユーザーが検索結果を閲覧できます。
外部認証との連携
実際の企業環境では、Fess 独自のユーザー管理ではなく、既存のディレクトリサービスと連携したいケースがほとんどです。
Active Directory / LDAP 連携
Fess は LDAP 連携をサポートしており、Active Directory のユーザー情報を使って認証とロール割り当てを行えます。
LDAP 連携を有効にするには、Fess の設定ファイルで LDAP 接続情報を設定します。
主な設定項目は以下の通りです。
LDAP サーバーの URL
バインド DN(接続用アカウント)
ユーザーの検索ベース DN
グループの検索ベース DN
ユーザー属性のマッピング
LDAP 連携が有効な場合、利用者は Active Directory のアカウントで Fess にログインできます。 所属グループの情報が自動的にロールとして反映されるため、Fess 上でユーザーごとにロールを手動設定する必要がありません。
SSO 連携
さらに進んだ構成として、シングルサインオン(SSO)との連携も可能です。 Fess は以下の SSO プロトコルをサポートしています。
OpenID Connect (OIDC): Entra ID (Azure AD)、Keycloak など
SAML: 各種 IdP との連携
SPNEGO/Kerberos: Windows 統合認証
SSO 連携により、利用者は普段のログイン情報で自動的に Fess にもアクセスでき、ロール情報も自動的に反映されます。 SSO 連携の詳細は、第15回「セキュアな検索基盤」で詳しく扱います。
動作確認
ロールベース検索の設定が完了したら、動作を確認しましょう。
確認手順
営業部のユーザーでログインし、「見積書」で検索 → 営業部と共通のドキュメントのみが表示されることを確認
開発部のユーザーでログインし、同じキーワードで検索 → 営業部のドキュメントが表示されないことを確認
経営層のユーザーでログインし、同じキーワードで検索 → すべての部門のドキュメントが表示されることを確認
確認のポイント
権限のないドキュメントが検索結果に一切表示されないこと
共通ドキュメントはすべてのユーザーで表示されること
ログインしていない状態での検索動作(ゲスト表示の範囲)
設計上の考慮点
ロールの粒度
ロールの粒度は、組織構造とセキュリティ要件に応じて決定します。
粗い粒度: 部門単位でロールを設定(本記事のシナリオ)
メリット: 設定がシンプル、管理が容易
デメリット: 部門内の細かなアクセス制御ができない
細かい粒度: プロジェクトやチーム単位でロールを設定
メリット: きめ細かなアクセス制御が可能
デメリット: ロール数が増え、管理が複雑になる
まずは粗い粒度から始め、必要に応じて細かくしていくアプローチが推奨です。
ファイルサーバーの ACL との連携
ファイルサーバーをクロールする場合、ファイルの ACL(アクセス制御リスト)情報を利用した権限制御も可能です。 この場合、ファイルシステム上の権限設定がそのまま検索結果の表示制御に反映されます。
ファイルサーバーの ACL を活用する場合は、クロール設定の権限に関する設定項目を確認してください。
まとめ
本記事では、Fess のロールベース検索を使って、部門ごとの検索結果制御を設計・構築しました。
ロール・グループ・ユーザーの設計と登録
クロール設定へのロール割り当て
Active Directory / LDAP 連携による自動ロール反映
SSO 連携の選択肢(OIDC、SAML、SPNEGO)
ロールベース検索により、情報セキュリティを担保しながら、横断検索の利便性を提供できます。 基礎編はここまでです。次回からは実践ソリューション編として、開発チームのナレッジハブ構築を扱います。