Skip to content
Published on

Secured (Kerberized) HBase クラスターの構築方法

Authors
  • Name
    Twitter

Overview

HBaseをセキュアに管理したい場合、Kerberos認証を適用する必要があります。HBaseにKerberosを適用するにはHadoopとZooKeeperコンポーネントに依存するため、HadoopとZooKeeperもセキュアに管理されている必要があります。HadoopにKerberosを適用する方法はSecured (Kerberized) Hadoopの構築を参考にし、ZooKeeperにKerberosを適用する方法はSecured (Kerberized) ZooKeeperの構築を参考にしてください。

または、HBase公式ドキュメントのSecurityセクションhbase reference book (security)を参照してください。

keytabの作成

hbase/{FQDN}@{realm}形式のprincipalがKerberosに登録されている必要があります。そして、適切な場所(例:/etc/hbase.keytab)にkeytabを配置します。もちろん、HMasterやRegionServerはhbaseアカウントで実行する必要があります。

Configurationsの変更

以下を参考にconfigurationファイルを修正します。

hbase-site.xml
<configuration>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.tmp.dir</name>
    <value>./tmp</value>
  </property>
  <property>
      <name>hbase.rootdir</name>
      <value>hdfs://mycluster/hbase</value>
  </property>
    <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>hadoop1.mysite.com,hadoop2.mysite.com,hadoop3.mysite.com</value>
  </property>
  <property>
    <name>hbase.security.authentication</name>
    <value>kerberos</value>
  </property>
  <property>
    <name>hbase.security.authorization</name>
    <value>true</value>
  </property>
  <property>
     <name>hbase.superuser</name>
     <value>hbase</value>
  </property>
  <property>
    <name>hbase.coprocessor.region.classes</name>
    <value>org.apache.hadoop.hbase.security.access.AccessController</value>
  </property>
  <property>
     <name>hbase.coprocessor.master.classes</name>
     <value>org.apache.hadoop.hbase.security.access.AccessController</value>
  </property>
  <property>
     <name>hbase.rpc.engine</name>
     <value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>
  </property>
  <property>
    <name>hbase.rpc.protection</name>
    <value>authentication</value>
  </property>
  <property>
    <name>hbase.zookeeper.client.keytab.file</name>
    <value>/etc/hbase.keytab</value>
  </property>

<property>
    <name>hbase.master.kerberos.principal</name>
    <value>hbase/_HOST@CHAOS.ORDER.COM</value>
  </property>

<property>
    <name>hbase.master.keytab.file</name>
    <value>/etc/hbase.keytab</value>
  </property>

<property>
    <name>hbase.regionserver.kerberos.principal</name>
    <value>hbase/_HOST@CHAOS.ORDER.COM</value>
  </property>
<property>
    <name>hbase.regionserver.keytab.file</name>
    <value>/etc/hbase.keytab</value>
  </property>
<property>
    <name>hbase.client.kerberos.principal</name>
    <value>hbase/_HOST@CHAOS.ORDER.COM</value>
  </property>
<property>
    <name>hbase.client.keytab.file</name>
    <value>/etc/hbase.keytab</value>
  </property>
</configuration>

そして、以下のようにconfフォルダの下にjaas.confファイルを作成します。このとき、principal部分には現在のホストに合わせて入力します。

Client {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  useTicketCache=false
  keyTab="/etc/hbase.keytab"
  principal="hbase/hadoop1.mysite.com@CHAOS.ORDER.COM";
};

ZooKeeperとHBaseの再起動

ZooKeeperとHBaseを再起動すると、HBaseをセキュアに使用できるようになります。Kerberosを適用すると、TableやNamespace、最新のHBaseではrowやcell単位でACL(Access Control List)を管理でき、アクセス制御が可能になります。