このブログの記事では、Hueの検索アプリケーションでKerberosとSentryの使用方法を詳しく説明しています 。Kerberosのみを使用したい場合は、Sentryについての段落をスキップして下さい。
Kerberos はHadoopクラスタでユーザーを認証することができます。例えば、ジョブを投入している、ファイルを一覧している、あるいは検索を実行しているのが本当にユーザー「bob」であり、「Joe」でないことを保証します。次のステップは、ユーザーが何にアクセスできるかの設定で、これは認可と呼ばれます。Sentryは、Solrのコレクション/インデックスにあるデータを、誰が参照、クエリ、追加することができるかを定義する、セキュアな方法です。これは、Kerberosでアクションを実行するユーザ名を保証するようにすることのみが可能です。
Hueにはインストールする準備ができているコレクションとサンプルのセットが付属しています。しかし、Kerberosでは、これはワンクリックよりも少し多くの作業が必要です。
まず、あなたはSentryの設定がされているKerberos化されたクラスタ (とHueのSolr検索)を持っていることを確認して下さい。
それからコレクションを作成します。適切なSolrの環境変数がある場合、コマンドはそのまま動作するはずです。
cd $HUE_HOME/apps/search/examples/bin
./create_collections.sh
その後、コレクションが表示されるはずです:
solrctl instancedir --list
jobs_demo
log_analytics_demo
twitter_demo
yelp_demo
次のステップは、Solrのコアを作成することです。シンプルに保つために、私たちは1つのコレクションを使用してtwitterのデモを行います。コアを作成する際に、
sudo -u systest solrctl collection --create twitter_demo -s 1
Sentryを使用している場合、あなたはおそらく、このエラーを最初にご覧になるでしょう:
Error: A call to SolrCloud WEB APIs failed: HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
WWW-Authenticate: Negotiate
Set-Cookie: hadoop.auth=; Version=1; Path=/; Expires=Thu, 01-Jan-1970 00:00:00 GMT; HttpOnly
Content-Type: text/html;charset=utf-8
Content-Length: 997
Date: Thu, 11 Sep 2014 16:32:17 GMT</pre>
<pre>HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
WWW-Authenticate: Negotiate YGwGCSqGSIb3EgECAgIAb10wW6ADAgEFoQMCAQ+iTzBNoAMCARCiRgRE62zOpPwr+KLoFKdUX2I6FtbN0DyxSA5a8n4BSZRJMTf413TEXzJbVh3/G7jWiMasIIzeETrd0Bv8suBsuKS/HdqG068=
Set-Cookie: hadoop.auth="[email protected]&t=kerberos&e=1410489137684&s=qAkcQr4ZPBkn5Ewg/Ugz/CqgLkU="; Version=1; Path=/; Expires=Fri, 12-Sep-2014 02:32:17 GMT; HttpOnly
Content-Type: application/xml;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 11 Sep 2014 16:32:17 GMT
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">
401</int>
<int name="QTime">
18</int>
</lst>
<lst name="error">
<str name="msg">
org.apache.sentry.binding.solr.authz.SentrySolrAuthorizationException: User systest does not have privileges for admin</str>
<int name="code">
401</int>
</lst>
これは、デフォルトでは「systest」ユーザーがコアを作成する権限を持っていないためです。「systestの」は「admin」のUnix / LDAPグループに属しており、「admin」という名前の権限が含まれるSentryグループを作成する必要があります。私たちの「systest」ユーザーは、この役割を含むグループに属している必要があります。
これには更新を行う必要があります:
/user/solr/sentry/sentry-provider.ini
これに似たもので更新します:
[groups]
admin = eng_role
analyst = read_only_role
[roles]
eng_role = collection = twitter_demo, collection = admin
read_only_role = collection = twitter_demo -> action = query
update_only_role = collection = twitter_demo -> action = update
「systest」はLDAPの「admin」グループに属しています。 「admin」は「admin」権限を持つ「eng_role」の役割が割り当てられています。通常のアナリストのユーザーは、Sentryの「read_only」の役割とTwitterの収集のための「query」の許可を含む、LDAPの「analyst」グループに属しています。これが利用可能なの権限の一覧です。
備考
今度のHue3.7には、sentry-provider.iniを忘れることができ、Web UIからこれらを設定できる新しいSentryアプリがあります。また、SolrのSentryのサポートのAPIが利用可能になるとすぐに、私たちはHueに統合しています。
次は、コアを作成し、いくつかのデータをアップロードするための時間です。Kerberosで動作させるようにするためにpost.shコマンドを更新します。
以下の「curl 」を置き換えます:
curl --negotiate -u: foo:bar
URLに実際のホスト名を使用してください:
URL=http://hue-c5-sentry.ent.cloudera.com:8983/solr
テストを行う簡単な方法は、インデキシングコマンドを実行することです:
sudo -u systest curl --negotiate -u: foo:bar http://hue-c5-sentry.ent.cloudera.com:8983/twitter_demo/update --data-binary @../collections/solr_configs_twitter_demo/index_data.csv -H 'Content-type:text/csv'
これです!そのデータのコレクションは、SolrとHueに表示されます。そのグループに応じて、ユーザーはコレクションを変更することはできる、またはすることができません。
これであなたの企業、組織では、きめの細かいセキュリティを備えた検索アプリケーションの探索機能を活用することができます!次のバージョンでは、フィールドレベルでのセキュリティと、それを構成するための素晴らしいUIが搭載されるでしょう(もうsentry-provider.iniは不要です :)。