安全 HBase 需要安全的 ZooKeeper 和 HDFS,以便用户无法访问和/或修改 HBase 下的元数据和数据。 HBase 使用 HDFS(或配置文件系统)来保存其数据文件以及预写日志(WAL)和其他数据。 HBase 使用 ZooKeeper 存储一些操作元数据(主地址,表锁,恢复状态等)。

63.1。保护 ZooKeeper 数据

ZooKeeper 具有可插入的身份验证机制,可以使用不同的方法从客户端进行访问。 ZooKeeper 甚至可以同时允许经过身份验证和未经身份验证的客户端。可以通过为每个 znode 提供访问控制列表(ACL)来限制对 znode 的访问。 ACL 包含两个组件,即身份验证方法和主体。 ACL 不是按层次强制执行的。有关详细信息,请参阅 ZooKeeper 程序员指南

HBase 守护进程通过 SASL 和 kerberos 向 ZooKeeper 进行身份验证(请参阅 SASL 身份验证与 ZooKeeper )。 HBase 设置 znode ACL,以便只有 HBase 用户和配置的 hbase 超级用户(hbase.superuser)可以访问和修改数据。如果 ZooKeeper 用于服务发现或与客户端共享状态,HBase 创建的 znode 也将允许任何人(无论身份验证)读取这些 znode(clusterId,主地址,元位置等),但只允许 HBase 用户可以修改它们。

63.2。保护文件系统(HDFS)数据

管理中的所有数据都保存在文件系统的根目录下(hbase.rootdir)。应限制对文件系统中的数据和 WAL 文件的访问,以便用户无法绕过 HBase 层,并从文件系统中查看底层数据文件。 HBase 假定使用的文件系统(HDFS 或其他)分层次地强制执行权限。如果未提供对文件系统(授权和身份验证)的充分保护,则 HBase 级别授权控制(ACL,可见性标签等)毫无意义,因为用户始终可以从文件系统访问数据。

HBase 将类似 posix 的权限 700(rwx------)强制执行到其根目录。这意味着只有 HBase 用户可以读取或写入 FS 中的文件。可以通过在 hbase-site.xml 中配置hbase.rootdir.perms来更改默认设置。需要重新启动活动主服务器,以便更改已使用的权限。对于 1.2.0 之前的版本,您可以检查是否已提交 HBASE-13780,如果没有,则可以根据需要手动设置根目录的权限。使用 HDFS,命令将是:

sudo -u hdfs hadoop fs -chmod 700 /hbase 

如果使用其他hbase.rootdir,则应更改/hbase

在安全模式下,应配置 SecureBulkLoadEndpoint 并将其用于将从 MR 作业创建的用户文件正确处理到 HBase 守护程序和 HBase 用户。用于批量加载的分布式文件系统中的暂存目录(hbase.bulkload.staging.dir,默认为/tmp/hbase-staging)应具有(模式 711 或rwx—​x—​x),以便用户可以访问在该父目录下创建的暂存目录,但不能做任何其他操作。有关如何配置 SecureBulkLoadEndPoint 的信息,请参阅安全批量加载