HBase ThriftServer Kerberos认证-阿里云开发者社区

开发者社区> 阿里云EMR> 正文
登录阅读全文

HBase ThriftServer Kerberos认证

简介:

1.前置

用户可以通过ThriftServer来访问HBase服务,它的特点如下:

  • ThriftServer代理用户访问HBase服务返回操作结果,用户客户端不需要直接跟HBase进行通信
  • 用户可以使用java/python/php/c++等语言的Thrift客户端代码访问HBase服务(HBase本身客户端只支持java语言)

2. Kerberos下的ThriftServer使用

如果HBase集群开启了Kerberos认证(E-MapReduce可一键创建安全集群,非常方便),那么用户怎么通过ThriftServer访问HBase服务呢?

2.1 ThriftServer配置Kerberos

ThriftServer其实是HBase服务的客户端,既然HBase开启了Kerberos认证,那么ThrifServer也必须配置Kerberos的信息才能正常访问HBase集群服务。

在ThriftServer的hbase-site.xml文件中添加新配置:

  <property>
    <name>hbase.security.authentication</name>
    <value>kerberos</value>
  </property>
    <property>
    <name>hbase.thrift.kerberos.principal</name>
    <value>hbase/_HOST@EMR.123456.COM</value>
  </property>
    <property>
    <name>hbase.thrift.keytab.file</name>
    <value>/etc/ecm/hbase-conf/hbase-thrift.keytab</value>
  </property>

上述配置中实际值以用户为准(principle和keytab需对应)。

2.2 ThriftClient访问ThriftServer

用户使用python/java/php等Thrift客户端访问ThrifServer有两种方式:

2.2.1 ThriftServer不对Client进行身份认证

任何用户都可以通过ThriftServer访问HBase服务,而且都是以ThriftServer本身配置的hbase.thrift.kerberos.principal中的用户名去访问HBase服务,即对HBase服务来说只有一个固定的用户来访问。

如下图所示:
image

这种方式使得HBase集群的Kerberos认证无效,不适合使用开启了Kerberos的场景。

2.2.2 ThriftServer对Client进行身份认证

ThriftServer可以开启对Client进行身份认证,而且以实际的用户身份访问HBase服务。

image

需要做如下配置:

  • ThriftServer的hbase-site.xml中增加新的配置:
  <property>
    <name>hbase.thrift.security.qop</name>
    <value>auth</value>
  </property>

其中hbase.thrift.security.qop可以是auth/auth-init/auth-conf中的一个

  • HBase集群的所有节点core-site.xml中增加新的配置:
  <property>
    <name>hadoop.proxyuser.$user.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.$user.groups</name>
    <value>*</value>
  </property>

备注:
a) $user为ThriftServer本身配置的hbase.thrift.kerberos.principal中的用户
b) 重启HBase集群(无需重启HDFS)

3. 代码示例

上述2.2.2节的场景代码

3.1 python

参考github上一个项目:
https://github.com/joshelser/hbase-thrift1-python-sasl

使用方式在README.md中:

-> 在客户端运行的账号下kinit初始化好Kerberos的TGT
-> ./setup.sh
-> python get_row.py

备注: get_row.py需要根据实际集群的配置修改相关参数

3.2 java

HBase官方的example jar有示例代码:
https://github.com/apache/hbase/tree/master/hbase-examples

https://github.com/apache/hbase/blob/master/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java

-> 在客户端运行的账号下kinit初始化好Kerberos的TGT
->
export HBASE_EXAMPLE_CLASSPATH=`hbase classpath`;

java -cp /usr/lib/hbase-current/lib/hbase-examples-1.1.1.jar:$HBASE_EXAMPLE_CLASSPATH org.apache.hadoop.hbase.thrift.DemoClient $thrift_server_host  $thrift_serve_port true

有兴趣或者有需求的用户可以关注一下E-MapReduce的安全相关的功能,有问题及时联系和反馈。

c7c8f09ebf3cc7795e0dd0da330cec88

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

阿里巴巴开源大数据技术团队成立阿里云EMR技术圈, 每周推送前沿技术文章,直播分享经典案例、在线答疑,营造纯粹的开源大数据氛围,欢迎加入!加入钉钉群聊阿里云E-MapReduce交流2群,点击进入查看详情 https://qr.dingtalk.com/action/joingroup?code=v1,k1,cNBcqHn4TvG0iHpN3cSc1B86D1831SGMdvGu7PW+sm4=&_dt_no_comment=1&origin=11

官方博客
官网链接