温馨提示×

Debian上HBase安全设置方法

小樊
40
2025-12-13 05:24:30
栏目: 智能运维

Debian上HBase安全设置方法

一 前置准备

  • 准备一个可用的 MIT Kerberos KDC,确定 REALM(如:EXAMPLE.COM),并确保所有节点时间同步(建议 NTP)。
  • 规划服务主体与 keytab 路径:HBase 使用 hbase/_HOST@REALM,ZooKeeper 使用 zookeeper/_HOST@REALM;keytab 建议统一放在 /etc/security/keytabs/,权限 600/640,属主为 hbase:hadooproot:hadoop(仅服务账号可读)。
  • 规划目录与权限:HBase 日志、临时目录、WAL/数据目录需 700/750,仅 hbase 用户可写;禁用明文密码登录与不必要的端口与服务。

二 启用认证与授权

  • hbase-site.xml 启用 Kerberos 与 HBase ACL:
<property>
  <name>hbase.security.authentication</name>
  <value>kerberos</value>
</property>
<property>
  <name>hbase.security.authorization</name>
  <value>true</value>
</property>
  • 指定 HBase 服务 keytab 与主体(_HOST 会自动替换为实际主机名):
<property>
  <name>hbase.master.keytab.file</name>
  <value>/etc/security/keytabs/hbase.service.keytab</value>
</property>
<property>
  <name>hbase.master.principal</name>
  <value>hbase/_HOST@EXAMPLE.COM</value>
</property>
<property>
  <name>hbase.regionserver.keytab.file</name>
  <value>/etc/security/keytabs/hbase.service.keytab</value>
</property>
<property>
  <name>hbase.regionserver.principal</name>
  <value>hbase/_HOST@EXAMPLE.COM</value>
</property>
  • 创建主体并导出 keytab(在 KDC 或管理节点执行):
kadmin.local -q "addprinc -randkey hbase/node1.example.com@EXAMPLE.COM"
kadmin.local -q "xst -k /etc/security/keytabs/hbase.service.keytab hbase/node1.example.com@EXAMPLE.COM"
# 其他节点替换 node1 为对应主机名,完成后分发 keytab 并设权限 600/640
  • 分发 keytab 示例:
for h in node{1..3}; do
  scp /etc/security/keytabs/hbase.service.keytab $h:/etc/security/keytabs/
  ssh $h "chown hbase:hadoop /etc/security/keytabs/hbase.service.keytab && chmod 600 /etc/security/keytabs/hbase.service.keytab"
done
  • 重启 HBase(先停后起),使用 kinit 测试:
kinit -kt /etc/security/keytabs/hbase.service.keytab hbase/node1.example.com@EXAMPLE.COM
hbase shell

以上配置与步骤可满足 HBase 的 Kerberos 认证ACL 授权 的基本要求。

三 加密与传输安全

  • 启用 Web UI 的 HTTPS(HBase 2.x 起支持):
<property>
  <name>hbase.ssl.enabled</name>
  <value>true</value>
</property>
<!-- 可选:自定义端口 -->
<property>
  <name>hbase.master.info.port</name>
  <value>16010</value>
</property>
<property>
  <name>hbase.regionserver.info.port</name>
  <value>16030</value>
</property>

启用后客户端需使用 https:// 访问 UI。

  • 启用 RPC/内部通信加密(SASL 与 SSL/TLS):
<property>
  <name>hbase.rpc.engine</name>
  <value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>
</property>
<property>
  <name>hbase.security.rpc.protection</name>
  <value>authentication,integrity,privacy</value>
</property>
  • 保护底层依赖:
    • HDFS:启用 RPC/HTTPS 与 HDFS 透明加密(TDE),确保 WAL/StoreFile 静态加密与传输加密一致。
    • ZooKeeper:启用 SASL 认证(jaas.conf 配置 Server/Client),必要时开启 TLS;ZooKeeper ACL 建议开启并与 HBase 权限模型一致。
  • 客户端安全访问:
    • 使用 kinit 获取票据后通过 hbase shell 或启用 SASL/SSL 的 Java API 访问。
    • 若启用 HTTPS,UI 与 REST 均使用 https:// 端点。 以上措施覆盖 HTTPSSASL/SSL/TLSHDFS/ZooKeeper 侧的安全加固要点。

四 授权与审计

  • 启用 HBase ACL 并进行细粒度授权(示例):
hbase shell
# 授予用户 user1 对表 ns1:tbl1 的读写权限
grant 'user1', 'RW', 'ns1:tbl1'
# 授予用户 user2 对表 ns1:tbl1 列族 cf1 的读权限
grant 'user2', 'R', 'ns1:tbl1', 'cf1'
# 查看权限
user_permission 'ns1:tbl1'
  • 建议结合 Apache RangerApache Sentry 实现集中策略管理与审计(可选,企业环境推荐)。
  • 审计与合规:开启 HBase 与访问网关/代理的访问日志,集中到 Ranger Audit/ELK 等系统,定期核查异常访问与权限变更。 以上完成 ACL 细粒度授权,并给出 Ranger/Sentry 与审计的落地建议。

五 快速验证与常见问题

  • 验证清单:
    • 使用 klist 确认票据有效;hbase shell 能正常列出/读写表。
    • 访问 https://:16010https://:16030,确认证书可信与页面可加载。
    • 使用 ranger-admin 或审计查看策略命中与访问记录(若启用 Ranger)。
  • 常见问题与处理:
    • 启动失败/无法连接 ZooKeeper:检查 ZooKeeper SASL 配置与 jaas.conf、主体/keytab 是否匹配,确保 ZooKeeper ACL 与 HBase 一致。
    • 权限被拒:确认 hbase.security.authorization=true 已设置,且已通过 grant 授予所需权限(含 namespace/表/列族 层级)。
    • UI 无法访问:确认 hbase.ssl.enabled=true 且证书链完整,客户端使用 https:// 访问。
    • 时间漂移导致认证失败:全集群启用 NTP 同步。 以上验证点与问题定位可快速确认 Kerberos/ACL/HTTPS 是否生效。

0