INFORMATION
テクノロジ

Apache ManifoldCF -MCF Security SearchComponent plugin-

MCFセキュリティサーチコンポーネントプラグインの概要

以前の記事(Apache ManifoldCF -Windows共有サーバのクロール-)で、ManifoldCFを使用しつつSolrでセキュリティを考慮した検索を行う方法をご紹介しました。
セキュリティを考慮した検索とは、任意のユーザが検索するときに、任意のユーザが許可されているドキュメントのみを検索できるようにすることです。
次の手順で実現することをご紹介しました。

1. ManifoldCF(略:MCF)を使用してWindows共有サーバをクロールする。
2. MCFにセキュリティアクセストークン(セキュリティ識別子)の取得問い合わせを行う。
3. 2のトークンを利用してフィルタークエリを構築する。
4. Solrに対して該当ユーザが検索可能なドキュメントを絞り込みする。

2-4の手順で実際に検索を行いますが、この手順では手間がかかります。
特に、アクセストークンを取得したりフィルタークエリを構築する部分は、自作でリクエストを組み立てる必要がありました。
今回、この部分を「MCFセキュリティサーチコンポーネントプラグイン」を導入して自動的に実現することが可能になります。MCFのtrunkにこのプラグインがあり利用可能です。
Solrの検索リクエストで、任意のユーザを渡すパラメータを付加するだけで、セキュリティを考慮した検索が実現できるようになります。

このプラグインは、経緯としては、もともとgoogle-codeで独立して公開されていたのですが、Solrに組み込まれていた方が使い勝手がよいということで、SOLR-1895で作業が進められました。結果としてはSolrのソースには組み込まれないのですが、MCFに格納されたプラグインjarファイルを、Solrが読めるようにしておくことで対応するようにしています。

ここで以下、このプラグインの利用手順をご紹介します。

利用手順


1. MCFセキュリティサーチコンポーネントプラグインをSolrが読めるようにします。

 最初に、trunkのMCFを取得します。
 $ svn co https://svn.apache.org/repos/asf/incubator/lcf/trunk
 プラグインのjarファイルを確認します。
 $ cd /trunk/connectors/solr/integration
 $ ls
 README-3.x.txt		apache-solr-mcf-3.x.jar #Solr 3.x用
 README-4.x.txt		apache-solr-mcf-4.x.jar #Solr 4.x用
 jarファイルをSolrのホームディレクトリのlibに配置します。
 mkdir -p /home/solr/apache-solr-3.4.0/solr/example/solr/lib
 cp apache-solr-mcf-3.x.jar /home/solr/apache-solr-3.4.0/solr/example/solr/lib

2.プラグインに関する設定を、solrconfig.xmlに追記します。

 以下のサーチコンポーネントを追加し、AuthorityServiceBaseURLにMCF問い合わせURLを入力します。
    :
  <searchComponent name="manifoldCFSecurity" class="org.apache.solr.mcf.ManifoldCFSearchComponent">
    <str name="AuthorityServiceBaseURL">http://localhost:8345/mcf-authority-service</str>
  </searchComponent>
    :
 searchリクエストハンドラにサーチコンポーネントを登録します。
    :
<requestHandler name="search" class="solr.SearchHandler" default="true">
  <!-- 以下を追加します -->
  <arr name="last-components">
    <str>manifoldCFSecurity</str>
  </arr>
   :
</requestHandler>
   :

3.セキュリティ管理用のフィールドを4つ、schema.xmlに追加します。
    :
  <!-- 以下の4フィールドを追加します -->
  <field name="allow_token_document" type="string" indexed="true" stored="false" multiValued="true" required="false" default="__nosecurity__"/>
  <field name="allow_token_share" type="string" indexed="true" stored="false" multiValued="true" required="false" default="__nosecurity__"/>
  <field name="deny_token_document" type="string" indexed="true" stored="false" multiValued="true" required="false" default="__nosecurity__"/>
  <field name="deny_token_share" type="string" indexed="true" stored="false" multiValued="true" required="false" default="__nosecurity__"/>
   :

以上で設定が完了です。
Solrを再起動して、MCFでWindows共有サーバのクロールジョブを再度実行します。

Solrで検索時には、任意のユーザを渡すパラメータ「AuthenticatedUserName」を付加してリクエストします。
 # usernameには、検索を行おうとしているユーザ(ユーザ名@ドメイン)を指定します。
 http://localhost:8983/solr/select?q=*:*&AuthenticatedUserName=username@domain"
このリクエストにより、プラグインでは、MCFを経由してセキュリティアクセストークン(セキュリティ識別子)を取得し、このトークンを使ってドキュメントをフィルタリングするクエリを生成します。そして、該当ユーザが検索可能なドキュメントが絞り込みされて検索結果が返ります。

  



トレーニングコース

ロンウイットのトレーニングは、Lucene/Solrの経験豊富なコミッターの
監修のもと開発されたハンズオン(実習)形式のコースです。

セミナー

ロンウイットのApache Software Foundationコミッターが、情報検索の基礎、自然言語処理、そして、ユーザにとっての効果についてご説明させていただきます。