温馨提示×

HBase在Debian上的安全设置怎么做

小樊
33
2025-12-13 05:36:36
栏目: 智能运维

在 Debian 上落地 HBase 的安全基线


一 前置条件与系统加固

  • 使用受支持的 Java(推荐 OpenJDK 8 或更高),并在所有节点统一版本;为 HBase 服务账户 创建专属系统用户(如 hbase),避免使用 root 运行。
  • 启用 防火墙(UFW) 仅放行必要端口(如 16010/16030 Web UI、2181 ZooKeeper、16000/16020 HBase RPC 等),并限制管理网段访问。
  • 启用 Debian 安全更新(unattended-upgrades) 与日志集中(如 rsyslog/Journald),为 HBase 进程配置专用 systemd 服务单元 与最小权限的启动账户。
  • 若 HBase 使用 HDFS,务必先完成 HDFS 与 ZooKeeper 的基础安全配置(认证、权限、网络边界)再启用 HBase 安全,否则强认证会被底层绕开。
  • 准备 Kerberos KDC/Realm,并统一 域名/FQDN时间同步(NTP/chrony),避免因时间漂移导致票据失效。

二 启用强认证与授权

  • 在集群所有节点的 core-site.xmlhbase-site.xml 中启用 Kerberos 认证,并开启 HBase ACL
    • core-site.xml
      <property>
        <name>hadoop.security.authentication</name>
        <value>kerberos</value>
      </property>
      
    • hbase-site.xml
      <property>
        <name>hbase.security.authentication</name>
        <value>kerberos</value>
      </property>
      <property>
        <name>hbase.security.authorization</name>
        <value>true</value>
      </property>
      
  • 在 KDC 创建服务主体并导出 keytab(示例命令,按实际 Realm 调整):
    kadmin.local -q "addprinc -randkey hbase/_HOST@EXAMPLE.COM"
    kadmin.local -q "xst -k /etc/security/keytabs/hbase.service.keytab hbase/_HOST@EXAMPLE.COM"
    
  • 将 keytab 分发到各节点(如 /etc/security/keytabs/hbase.service.keytab),并设置严格权限:
    chown hbase:hbase /etc/security/keytabs/hbase.service.keytab
    chmod 400 /etc/security/keytabs/hbase.service.keytab
    
  • 在 hbase-site.xml 指定服务主体与 keytab:
    <property>
      <name>hbase.master.keytab.file</name>
      <value>/etc/security/keytabs/hbase.service.keytab</value>
    </property>
    <property>
      <name>hbase.master.kerberos.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.kerberos.principal</name>
      <versioned>hbase/_HOST@EXAMPLE.COM</versioned>
    </property>
    
  • 为 RegionServer 启用 令牌提供者(便于短任务获取访问令牌):
    <property>
      <name>hbase.coprocessor.region.classes</name>
      <value>org.apache.hadoop.hbase.security.token.TokenProvider</value>
    </property>
    
  • 完全停止并重启 HBase 集群以加载安全配置。

三 加密通信与 Web UI 防护

  • 启用 RPC 加密(可选等级:authentication / integrity / privacy;隐私级别性能约下降 ~10%):
    <property>
      <name>hbase.rpc.protection</name>
      <value>privacy</value>
    </property>
    
  • 启用 HTTPS 保护 Web UI(端口不变,客户端需使用 https://):
    <property>
      <name>hbase.ssl.enabled</name>
      <value>true</value>
    </property>
    
    如需变更 Web UI 端口,可同时设置:
    <property>
      <name>hbase.master.info.port</name>
      <value>16010</value>
    </property>
    <property>
      <name>hbase.regionserver.info.port</name>
      <value>16030</value>
    </property>
    
  • 若经由 Thrift 网关访问,为 Thrift 配置 keytab/principal 并将 Thrift API principal 加入 HBase ACL(如授予 RWCA):
    grant 'thrift_server', 'RWCA'
    
    注意:Thrift 的 principal 名称在不同版本/网关模式下可能为 $USER/_HOST@REALMHTTP/_HOST@REALM,需按实际网关类型与版本设置。

四 客户端访问与 ACL 实践

  • 客户端安全访问(HBase 2.2.0+ 支持在配置中指定 keytab,自动登录与凭据续订):
    <property>
      <name>hbase.security.authentication</name>
      <value>kerberos</value>
    </property>
    <property>
      <name>hbase.client.keytab.file</name>
      <value>/path/to/client.keytab</value>
    </property>
    <property>
      <name>hbase.client.keytab.principal</name>
      <value>client@EXAMPLE.COM</value>
    </property>
    
    老版本客户端可先执行 kinit 获取票据再访问。
  • 在 HBase Shell 中使用 ACL 进行细粒度授权(示例):
    # 授予用户 user1 对表 table1 的读写
    grant 'user1', 'RW', 'table1'
    
    # 授予用户 user2 对表 table1 列族 cf1 的只读
    grant 'user2', 'R', 'table1', 'cf1'
    
  • 常见权限:R(读)、W(写)、C(创建)、A(管理)。建议遵循最小权限原则,按表/列族/列级授权,并定期审计 ACL。

五 快速验证与运维要点

  • 验证项:
    • 使用 klist 检查票据;使用 hbase shell 执行 status 与简单读写,确认 SASL/GSSAPI 握手与 ACL 生效。
    • 访问 https://:16010 确认 Web UI 证书与 HTTPS 正常;使用 openssl s_client 或浏览器证书查看工具核验证书链。
    • 通过 Thrift 网关访问时,确认 Thrift principal 已加入 ACL 且客户端凭据正确。
  • 运维要点:
    • 统一 Realm/域名/FQDN时间;定期轮换 keytab
    • 变更安全配置需 滚动重启 或全停重启(视组件而定),先在测试环境验证。
    • HBase 安全配置 纳入配置管理(如 Ansible/Salt),与 HDFS/ZooKeeper 安全基线保持一致。

0