Published on

Secured(Kerberized) HBase 구축하기.

Authors
  • Name
    Twitter

Overview

HBase를 secure하게 관리하고 싶다면, kerberos 인증을 적용해야한다. HBase에 kerberos를 적용하기 Hadoop과 zookeeper 컴포넌트에 의존적이기 때문에 hadoop과 zookeeper도 secure하게 관리되어야한다. hadoop에 kerberos를 적용하는 방법은 Secured(Kerberized) Hadoop 구축하기 를 참고하고,zookeeper에 kerberos를 적용하는 법은 Secured(Kerberized) Zookeeper 구축하기를 참고한다.

또는 HBase 공식문서에서 Security 부분 hbase reference book (security)을 참고한다.

keytab 생성

hbase/{FQDN}@{realm} 형식의 principal이 kerberos에 등록되어야한다. 그리고 적절한 위치(ex /etc/hbase.keytab)에 keytab을 위치시킨다. 물론 HMaster나 region-servver는 hbase계정으로 실행하여야한다.

Configurations 변경

configuratoin 파일을 아래를 참고하여 수정한다.

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를 secure하게 사용할 수 있다. kerberos를 적용하게 되면, Table이나 Namespace 최신 HBase의 경우 row나 cell 단위로 ACL(Access Control List)을 관리하여 접근 제어가 가능하게 된다.