Pivotal Knowledge Base

フォローする

HBaseへのアクセス制御方法について

環境

製品 バージョン
Pivotal HD(PHD) 1.1.1
HBASE 0.94.8

目的

この記事はHBaseへのアクセスを制御するために必要な手順を示す。HBaseはバージョン0.92以降、カラムファミリーやテーブル単位のリソース保護をベースとしたアクセス制御リスト(ACL)をサポートしている。

ACLベースの保護は情報の傍受や盗聴といった試行を防ぐことはできない。もしそのような試行を防ぐ要望がある場合は、HBaseにセキュアな操作を行うための設定をする必要がある。 

解決策

手順 1: Pivotal HDクラスタ上のHBaseサービスを停止する。

Install & Configuration Manager(ICM)を用いて配備されたPivotal HDクラスタを使用している場合、HBaseサービスを停止するにはいくつかの方法がある。ここの例では、Pivotal Command Center GUIを利用し、HBase MasterとRegion-serverサービスを停止する。

メモ: 標準的な Linux ユーティリティーを用いてでも、サービスの制御を行うことが可能である

service <service-name> start/stop/restart
- service hbase-master stop(HBase-master ノード上で実行)
- service hbase-regionserver stop(全ての HBase-regionserver ノード上で実行)

手順 2: サービスが停止したら、HBase MasterとRegion-serverノード上の /etc/gphd/hbase/conf/hbase-site.xml を編集する。

すべてのPivotal HD HBase MasterとRegion-serverノードの hbase-site.xml に以下のパラメータを追記する。

<property> 
<name>hbase.rpc.engine</name>
<value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>
</property> <property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property> <property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>

手順 3: [オプション設定] もし専用のHBase Clientノードを使用している場合は、手順2で作成した/etc/gphd/hbase/conf/hbase-site.xml をHBase Clientノードにコピーする。

メモ:全クラスタノードの *-site.xmlファイルを同期状態に保つことが望ましいので、すべてのノードに同じ hbase-site.xml をコピーすることを推奨する。一方では、参考までに、HBase Client ノードだけは以下のパラメータが必要である。

<property> 
<name>hbase.rpc.engine</name> 
<value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value> 
</property>

手順 4: HBaseサービスを起動する。

メモ: 一度サービスを起動したら、任意のエラーが発生していないかどうか確認すること。しかしながら、これらサービスが以前動作しており、かつ適切に設定されていたら、すべてのサービスは起動するはずである。

手順 5: HBaseにACLが適用されたかどうか確認する。

標準ユーザ(ここでは、gpadmin ユーザを使用)でHBaseシェルにログインし、テーブル作成を試みる。ここでのテーブル作成操作は、以下のようなエラーで失敗するであろう。

[gpadmin@hdm1 ~]$ hbase shell
hbase(main):001:0> create 'test_acl', 'cf'
..(標準メッセージ省略)..
ERROR: org.apache.hadoop.hbase.security.AccessDeniedException: org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient permissions for user 'gpadmin' (global, action=CREATE)
     at org.apache.hadoop.hbase.security.access.AccessController.requirePermission(AccessController.java:426)
    ..(中略)..
     at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1426) hbase(main):001:0> exit

手順 6: スーパユーザhbaseでログインし、gpadminユーザに権限を与える。

[gpadmin@hdm1 ~]$ sudo -u hbase hbase shell
hbase(main):001:0> grant 'gpadmin', 'RWCA'
..(標準メッセージ省略)..
0 row(s) in 0.9490 seconds 

ただし、RWCA は以下を意味する。

R - READ

W - WRITE

C - CREATE

A - ADMIN

要件に応じて、必要とされ権限を与えることができる。上述の例は、単なる説明のためのものである。

手順 7: gpadminユーザがHBaseに対して許可された操作ができるかどうか試行。

[gpadmin@hdm1 ~]$ hbase shell
hbase(main):001:0> create 'test', 'cf'
SLF4J: Class path contains multiple SLF4J bindings.
..(標準メッセージ省略)..
0 row(s) in 1.8680 seconds 

環境設定に問題がなければ、テーブル作成に成功するはずである。

追加情報

PHD 1.1.0には、以下のjarファイルは含まれていない。そのため、一度上記の変更を実行しても、HBase MasterやRegion-serverは起動しないので、手動で以下のjarファイルを各HBase MasterとRegion-serverノードの/usr/lib/gphd/hbaseディレクトリに配備する必要がある。その後、これらのバイナリを各HBase MasterとRegion-serverノード上で実行することになる。

  • hbase-0.94.8-gphd-2.1.1.0-security.jar
  • hbase-0.94.8-gphd-2.1.1.0-security-tests.jar

そして /usr/lib/gphd/hbase/hbase.jar のシンボリックリンクのリンク先を/usr/lib/gphd/hbase/hbase-0.94.8-gphd-2.1.1.0-security.jar に変更する。

  • ln -s /usr/lib/gphd/hbase/hbase-0.94.8-gphd-2.1.1.0-security.jar /usr/lib/gphd/hbase/hbase.jar

注: 上記の jarファイルは emc.subscribenet.comからPHD 1.1.1バイナリをダウンロードすることで入手できる。またはsupport.pivotal.ioよりサービスリクエストにて依頼することもできる。

参考:

コメント

Powered by Zendesk