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

### 配置 Kerberos 与 IPA 在 Hortonworks Data Platform 中集成 #### 安装和配置 FreeIPA Server 为了使 HDP 能够利用 Kerberos 进行身份验证,首先需要安装并配置 FreeIPA 服务器。FreeIPA 是一个开源的身份管理解决方案,它集成了 LDAP 和 Kerberos 协议来提供集中式的用户管理和认证服务。 确保按照官方文档中的说明完成 FreeIPA 的部署[^1]。这通常涉及设置 DNS 记录、初始化目录以及创建必要的主机和服务主体账户。 #### 获取 GPG 密钥用于软件包签名验证 当从特定仓库获取 HDP 或其工具组件时,建议先导入相应的 GPG 公开密钥以确保下载的安全性和完整性。对于此场景下的 Jenkins 构建版本而言: ```bash rpm --import gpgkey=http://chavin.king/hdp/HDP-UTILS/centos7/1.1.0.22/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins ``` 上述命令会将指定 URL 下的公钥添加到系统的 RPM 数据库中以便后续操作可以信任来自该源的更新或新安装请求[^2]。 #### 设置 Ambari 来启用 Kerberos 支持 Ambari 提供了一个图形化的界面让用户能够轻松地开启集群级别的 Kerberos 功能。进入 Ambari Web UI 并导航至 "Admin" -> "Kerberos", 接着遵循向导提示输入关于 KDC(Key Distribution Center)、管理员凭证以及其他细节的信息。 重要的是要确认所填写的内容匹配之前已经建立好的 FreeIPA 实例参数,并且允许 Ambari 自动处理大部分复杂的配置工作,比如生成所需的 keytab 文件等。 #### 测试 Thrift 服务连接性 一旦完成了以上步骤并且成功启用了整个环境内的 Kerberos 安全机制之后,则可以通过如下方式测试 Thrift 服务是否正常运作: 停止现有的 Thrift 服务实例: ```bash ./hbase-daemon.sh stop thrift ``` 使用 `kinit` 工具加载目标应用程序对应的 keytab 文件来进行身份验证: ```bash kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase-dev_dmp & ``` 重新启动带有自定义端口映射选项的新版 Thrift 服务进程: ```bash /usr/hdp/3.0.0.0-1634/hbase/bin/hbase-daemon.sh start thrift -p 9090 --infoport 8086 ``` 最后通过 HTTP 模式或者二进制模式分别尝试访问远程机器上的 Thrift API 端点, 如下所示: HTTP Mode Test Command: ```bash hbase org.apache.hadoop.hbase.thrift.HttpDoAsClient DEVDIP.ORG 9090 hbase true ``` Binary Mode Test Command: ```bash hbase org.apache.hadoop.hbase.thrift.DemoClient DEVDIP.ORG 9090 true ``` 这些指令可以帮助验证当前环境下 Thrift 服务能否正确响应客户端发起的数据读写请求,在遇到任何异常情况时也便于快速定位问题所在位置[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值