《CDP企业数据云平台从入门到实践》——CDP之数据储存(7) https://developer.aliyun.com/article/1226375?groupCode=ClouderaCDP
2. 管理 Kudu 的安全
1) Kudu 安全注意事项
Kudu 包括安全功能,允许加强 Kudu 集群以防止未经授权的用户访问。
Kudu 使用 Kerberos 的强身份验证和 Ranger 的授权。Kudu 客户端和服务器之间以及服务器与其他服务器之间的通信可以使用 TLS 加密。Kudu 还在 Web UI 上支持HTTPS。
只要 Impala 的用户被授予访问 Kudu 的权限,这些安全功能也应该在 Impala 中无缝运行。
2) Kudu 安全限制
以下是与 Kudu 中的数据加密和授权相关的一些限制。
• 静态数据加密并未直接内置于 Kudu 中。可以通过使用本地块设备加密软件(例如 dmcrypt)来实现静态 Kudu 数据的加密。
• 行级授权不可用。
• Kudu 使用内部 PKI 系统向集群中的服务器颁发 X.509 证书。因此,您无法使用公共 IP 运行 Kudu。
• Kudu IPKI 生成的服务器证书与 bouncycastle 1.52 及更早版本不兼容。
• 当您使用 Ranger Web UI 创建新的 Kudu 服务时,会显示“测试连接”按钮。
但是,TestConnection 选项卡未在 Kudu Ranger 插件中实现。因此,如果您尝试将它与 Kudu 一起使用,它将失败,但这并不意味着该服务无法正常工作。
3) Kudu 认证
配置 Kudu 以在服务器之间以及客户端和服务器之间强制执行安全身份验证。
身份验证可防止不受信任的参与者访问 Kudu,并安全地识别连接用户或服务以进行授权检查。Kudu 中的身份验证旨在通过使用 Kerberos 与其他安全 Hadoop 组件进行互操作。
4) 可扩展性
Kudu 身份验证旨在扩展到数千个节点,这意味着它必须避免为每个连接与中央身份验证机构(例如 Kerberos KDC)进行不必要的协调。
相反,Kudu 服务器和客户端使用 Kerberos 与 Kudu master 建立初始信任,然后使用备用凭据进行后续连接。Kudu master 在启动时向 tablet 服务器颁发内部 X.509证书,并在第一次联系时向客户端颁发临时身份验证令牌。
5) 内部私钥基础设施(PKI)
Kudu 使用内部 PKI 向集群中的服务器颁发 X.509 证书。同时获得证书的对等点之间的连接将使用 TLS 进行身份验证。在这种情况下,两个对等方都不需要联系Kerberos KDC。
X.509 证书仅用于 Kudu 服务器之间以及 Kudu 客户端和服务器之间的内部通信。这些证书永远不会出现在面向公众的协议中。通过使用内部颁发的证书,Kudu 提供强大的身份验证,可扩展到巨大的集群,并允许使用 TLS 加密,而无需您在每个节点上手动部署证书。
• 使用 Kerberos 的 Kudu 身份验证
您可以在 Kudu 服务器上配置身份验证。Kudu 中的身份验证旨在通过使用 Kerberos与其他安全 Hadoop 组件进行互操作。
• Kudu 身份验证令牌
在对安全集群进行身份验证后,Kudu 客户端将自动向 Kudu 主服务器请求身份验证令牌。认证令牌封装了认证用户的身份,并带有 Kudu master 的 RSA 签名,以便验证其真实性。此令牌将用于验证后续连接。
• 客户端身份验证以保护 Kudu 集群
运行客户端 Kudu 应用程序的用户必须首先运行 kinit 命令以获取 Kerberos 票证授予票证。
6) Kudu 粗粒度授权
Kudu 支持基于客户端经过身份验证的 Kerberos 主体(用户或服务)对客户端请求进行粗粒度授权检查。访问级别是根据白名单样式的访问控制列表(ACL)授予的,
每个级别一个。每个 ACL 指定一个以逗号分隔的用户列表,或者可以设置为'*'以指示所有经过身份验证的用户都具有指定级别的访问权限。
可以配置的两个访问级别是:
• 超级用户:被授权为超级用户的主体可以执行某些管理功能,例如使用 kudu 命令行工具诊断和修复集群问题。
• 用户:授权为用户的主体能够访问和修改 Kudu 集群中的所有数据。这包括创建、删除和更改表以及读取、插入、更新和删除数据的能力。用户 ACL 的默认值为'*',它允许所有用户访问集群。但是,如果启用身份验证,这将限制访问权限,仅允许那些能够使用 Kerberos 成功进行身份验证的用户访问。与 Kudu 服务器在同一网络上的未经身份验证的用户将无法访问集群。
7) Kudu 细粒度授权
Kudu 可以配置为跨服务器强制执行细粒度授权。
细粒度授权确保用户只能看到他们被明确授权可以看到的数据。Kudu 通过利用Apache Ranger 中定义的策略来支持这一点。
• Kudu 和 Apache Ranger 集成
Apache Ranger 与 Kudu 集成以提供跨服务器的细粒度授权。
• Kudu 授权令牌
了解 Ranger 用来传播和检查权限的授权令牌。
• 指定受信任的用户
您可以指定哪些用户可以查看和修改存储在 Kudu 中的数据。此外,一些与 Kudu交互的服务可能会代表其最终用户授权请求。
• Kudu 授权策略
查看 Kudu masters 和 Kudu tablet 服务器强制执行的授权策略。
• Kudu 的 Ranger 策略
有两个 Kudu 相关的 Ranger 策略,它们根据您访问 Kudu 的方式应用。
• 数据编辑用于防止敏感数据包含在 Kudu 服务器日志或 Web UI 中。默认情况下启用数据编辑,但您可以使用–redact 或–webserver_enabled 标志禁用它。
a) 日志编辑
为了防止敏感数据包含在 Kudu 服务器日志中,所有行数据都被编辑。--redact 您可以使用标志关闭日志编辑。
b) Web UI 编辑
为防止敏感数据包含在 Web UI 中,所有行数据都经过编辑。表元数据(例如表名、列名和分区信息)不会被编辑。或者,您可以选择通过在 Kudu 服务器上设置--webserver_enabled 标志来完全禁用 Web UI。
3. Kudu 备份
Kudu 通过使用 Apache Spark 实现的作业支持完整和增量表备份和数据恢复。
4. Kudu 集成
1) 将 Hive Metastore 与 Apache Kudu 集成
您可以将 Kudu 自己的目录与 Hive Metastore(HMS)集成,从而允许外部 HMS 感知工具发现和使用 Kudu 表。
HMS是Hadoop生态系统中事实上的标准目录和元数据提供者。启用HMS集成后,Kudu 表可以被外部 HMS 感知工具发现和使用,即使它们不以其他方式感知或与Kudu 集成。无需创建 Impala 外部表来映射直接使用 API 或从 Spark 创建的任何Kudu 表。此外,这些组件可以使用 HMS 发现必要的信息以连接到拥有该表的 Kudu集群,例如 Kudu 主地址。
2) Impala 与 Kudu 的集成
您可以将 Kudu 自己的目录与 Hive Metastore(HMS)集成,从而允许外部 HMS 感知工具发现和使用 Kudu 表。
HMS是Hadoop生态系统中事实上的标准目录和元数据提供者。启用HMS集成后,Kudu 表可以被外部 HMS 感知工具发现和使用,即使它们不以其他方式感知或与Kudu 集成。无需创建 Impala 外部表来映射直接使用 API 或从 Spark 创建的任何Kudu 表。此外,这些组件可以使用 HMS 发现必要的信息以连接到拥有该表的 Kudu集群,例如 Kudu 主地址。
3) Impala 与 Kudu 的集成
Apache Kudu 与 Apache Impala 紧密集成。在开始使用 Impala 查询 Kudu 表之前,了解 Impala 数据库包含模型和 Impala 表,并了解集成的限制。Impala 和 Kudu 之间的紧密集成允许您使用 Impala 使用 Impala 的 SQL 语法从Kudu 平板电脑插入、查询、更新和删除数据,作为使用 Kudu API 构建自定义 Kudu应用程序的替代方法。此外,您可以使用 JDBC 或 ODBC 将以任何语言、框架或商业智能工具编写的现有或新应用程序连接到您的 Kudu 数据,使用 Impala 作为代理。
4) Kudu 与 Spark 集成
从 1.0.0 版开始,Kudu 通过数据源 API 与 Spark 集成。使用该选项包括 kudu-spark依赖--packages 项。
如果将 Spark 与 Scala2.10 一起使用,请使用 kudu-spark_2.10 工件。请注意,从
1.6.0 版开始,Kudu 不再支持 Spark 1。因此,为了使用与 Kudu 集成的 Spark 1,
最新的版本是 1.5.0。
spark-shell --packages org.apache.kudu:kudu-spark_2.10:1.5.0-
cdh5.13.91 --repositories