本文档适用于希望使用商业智能 (BI) 工具(如 Tableau 和 Looker)为数据分析师设置安全数据访问权限的操作人员和 IT 管理员。该文档未提供有关如何使用 BI 工具或如何与 Dataproc API 交互的指导。
本文档是系列文章中的第一篇,可帮助您构建端到端的解决方案,让数据分析师能够使用 BI 工具安全地访问数据。本文档介绍以下概念:
- 建议的架构。
- 架构中组件边界、互动和网络的概览视图。
- 架构中身份验证和授权的概览视图。
本系列的第二部分将可视化图表软件连接到 Hadoop on Google Cloud 介绍了如何在 Google Cloud 上设置架构。
架构
下图展示了本文档中介绍的架构和事件流。如需详细了解此架构中使用的产品,请参阅架构组件。
- 客户端应用通过 Java 数据库连接 (JDBC) 连接到 Dataproc 集群上的单个入口点。入口点由安装在集群主节点上的 Apache Knox 提供。与 Apache Knox 的通信受 TLS 保护。
- Apache Knox 通过身份验证提供商将身份验证委派给某个系统,例如 LDAP 目录。
- 完成身份验证后,Apache Knox 将用户请求路由到一个或多个后端集群。您可以将路由和配置定义为自定义拓扑。
- 数据处理服务(如 Apache Hive)会侦听所选后端集群并获取请求。
- Apache Ranger 拦截请求,并根据用户是否拥有有效授权来确定是否应继续处理。
- 如果验证成功,数据处理服务将分析请求并返回结果。
架构组件
该架构由以下组件组成。
- 代管式 Hadoop 平台:
- Dataproc。 Dataproc 由 Google Cloud 管理的 Apache Spark,借助此 Apache Hadoop 服务,您可以充分利用开源数据工具来执行批处理、查询、流式传输和机器学习。Dataproc 是支持本文档中描述的解决方案的平台。
- 用户身份验证和授权:
- Apache Knox。 Apache Knox 充当 Hadoop 集群中所有基础服务的单个 HTTP 访问点。Apache Knox 设计为反向代理,使用可插拔的提供方提供身份验证、授权、审核和其他服务。客户端将请求发送到 Knox,并且根据请求网址和参数,Knox 将请求路由到适当的 Hadoop 服务。因为 Knox 是透明地处理客户端请求并隐藏复杂性的入口点,所以它是体系结构的中心。
- Apache Ranger。Apache Ranger 为用户提供了细粒度的授权,可以对 Hadoop 服务执行特定的操作。它还审核用户访问并实施管理措施。
- 处理引擎:
- Apache Hive。 Apache Hive 是数据仓库软件,可使用 SQL 访问和管理驻留在分布式存储中的大型数据集。Apache Hive 解析 SQL 查询,执行语义分析,并构建阶段的有向无环图 (DAG) 供处理引擎执行。在本文档所示的架构中,Hive 充当用户请求之间的转换点。它还可用作多个处理引擎之一。Apache Hive 在 Hadoop 生态系统中无处不在,它为熟悉标准 SQL 的从业人员打开了执行数据分析的大门。
- Apache Tez。 Apache Tez 是处理引擎,负责执行 Hive 准备的 DAG 并返回结果。
- Apache SparkApache Spark 是用于进行大规模数据处理的统一分析引擎,支持执行 DAG。 该架构展示了 Apache Spark 的 Spark SQL 组件,以演示本文档中介绍的方法的灵活性。一个限制是 Spark SQL 没有官方 Ranger 插件支持。因此,必须通过 Apache Knox 中的粗粒度 ACL 来执行授权,而不是使用 Ranger 提供的精细授权。
组件概览
在以下部分中,您将更详细地了解每个组件。您还将了解组件之间的交互方式。
客户端应用
客户端应用包括可以向 HTTPS REST 端点发送请求但不一定支持 Dataproc Jobs API 的工具。Tableau 和 Looker 等 BI 工具具有 HiveServer2 (HS2) 和 Spark SQL JDBC 驱动程序,可通过 HTTP 发送请求。
本文档假设客户端应用位于 Google Cloud 外部,在分析师工作站、本地或其他云等环境中执行。因此,您必须通过 CA 签名或自签名 SSL/TLS 证书来保护客户端应用与 Apache Knox 之间的通信。
入口点和用户身份验证
代理集群是托管 Apache Knox 网关的一个或多个长期 Dataproc 集群。
Apache Knox 充当客户端请求的单个入口点。Knox 安装在代理集群主节点上。Knox 可以执行 SSL 终止、委派用户身份验证、将请求转发到其中一个后端服务。
在 Knox 中,每个后端服务都以拓扑方式进行配置。拓扑描述符定义了以下操作和权限:
- 如何委派服务的身份验证。
- 后端服务将请求转发到的 URI。
- 简单的每项服务授权访问控制列表 (ACL)。
利用 Knox 可以将身份验证与企业和云身份管理系统集成。如需为每个拓扑配置用户身份验证,可以使用身份验证提供商。Knox 默认使用 Apache Shiro 针对本地演示 ApacheDS LDAP 服务器进行身份验证。
您也可以选择 Knox 以使用 Kerberos。在上图中,作为示例,您可以看到集群外部 Google Cloud 上托管的 Active Directory 服务器。
如需了解如何将 Knox 连接到企业身份验证服务(例如外部 ApacheDS 服务器或 Microsoft Active Directory (AD)),请参阅 Apache Knox 用户指南和 Google Cloud Managed Active Directory 以及 Federated AD 文档。
对于本文档中的使用场景,只要 Apache Knox 充当代理和后端集群的单个网关守卫中,则无需使用 Kerberos。
处理引擎
后端集群是 Dataproc 集群,用于托管处理用户请求的服务。Dataproc 集群可以自动扩缩工作器数量,以满足分析团队的需求,而无需手动重新配置。
我们建议您在后端中使用长期 Dataproc 集群。长期 Dataproc 集群可让系统不间断地处理来自数据分析师的请求。或者,如果集群只需要在短时间内处理请求,则可以使用特定于作业的集群(也称为临时集群)。临时集群还可能比长期集群更经济实惠。
如果您使用临时集群,为避免修改拓扑配置,请务必在同一可用区中以相同名称重新创建集群。使用相同的可用区和名称,可让 Knox 在重新创建临时集群时使用透明节点内部 DNS 名称以透明方式路由请求。
HS2 负责处理对 Apache Hive 执行的用户查询。HS2 可以配置为使用各种执行引擎,例如 Hadoop MapReduce 引擎、Apache Tez 和 Apache Spark。在本文档中,HS2 配置为使用 Apache Tez 引擎。
Spark SQL 是 Apache Spark 的一个模块,其中包含 JDBC/ODBC 接口,用于在 Apache Spark 上执行 SQL 查询。在前面的架构图中,Spark SQL 作为处理用户查询的替代选项。
处理引擎(Apache Tez 或 Apache Spark)调用 YARN 资源管理器,以在集群工作器机器上执行引擎 DAG。最后,集群工作器机器访问数据。如需在 Dataproc 集群中存储和访问数据,请使用 Cloud Storage 连接器,而不是 Hadoop 分布式文件系统 (HDFS)。如需详细了解使用 Cloud Storage 连接器的优势,请参阅 Cloud Storage 连接器文档。
上述架构图展示了一个将 Apache Knox 请求转发到 Apache Hive 的拓扑,以及将请求转发到 Spark SQL 的另一个拓扑。该图还显示了将请求转发到相同或不同后端集群中的服务的其他拓扑。后端服务可以处理不同的数据集。例如,一个 Hive 实例可以提供对一组受限用户的个人身份信息 (PII) 访问权限,而另一个 Hive 实例可以提供对非 PII 数据的访问权限,从而更广泛地使用数据。
用户授权
您可以在后端集群上安装 Apache Ranger,以便为 Hadoop 服务提供细粒度授权。在架构中,Hive 的 Ranger 插件会拦截用户请求,并根据 Ranger 政策确定是否允许用户对 Hive 数据执行操作。
作为管理员,您可以使用 Ranger 管理页面定义 Ranger 政策。我们强烈建议您配置 Ranger 以将这些政策存储在外部 Cloud SQL 数据库中。外部化政策将带来两大优势:
- 如果任何后端集群被删除,则使其具有持久性。
- 它让您可以集中管理所有群组或后端集群自定义群组的政策。
如需将 Ranger 政策分配给正确的用户身份或群组,您必须配置 Ranger 以同步 Knox 连接到的同一目录中的身份。默认情况下,Ranger 使用的用户身份是从操作系统获取的。
Apache Ranger 还可以将审核日志外部化到 Cloud Storage,以将其设为永久性。Ranger 使用 Apache Solr 作为其索引和查询引擎,以将审核日志设为可供搜索。
与 HiveServer2 不同,Spark SQL 不提供官方的 Ranger 插件支持,因此您需要使用 Apache Knox 中可用的粗粒度 ACL 来管理其授权。如需使用这些 ACL,请在该服务的相应拓扑描述符中添加允许使用每项服务的 LDAP 身份,例如 Spark SQL 或 Hive。
如需了解详情,请参阅在 Dataproc 上使用 Apache Ranger 的最佳实践。
高可用性
Dataproc 提供高可用性 (HA) 模式。在此模式下,有多台机器配置为主节点,其中一台处于活跃状态。此模式允许不间断的 YARN 和 HDFS 操作,即使出现单节点故障或重新启动也是如此。
但是,如果主节点发生故障,单个入口点外部 IP 地址将会发生变化,因此您必须重新配置 BI 工具连接。以高可用性模式运行 Dataproc 时,应将外部 HTTP(S) 负载均衡器配置为入口点。负载均衡器将请求路由到捆绑集群主节点的非代管实例组。作为负载均衡器的替代方案,您可以应用轮询 DNS 技术,但这种方法存在缺点。这些配置不在本文档的探讨范围之内。
Cloud SQL 还提供高可用性模式,通过在不同可用区的主实例和备用实例之间进行同步复制来实现数据冗余。如果有实例或可用区发生故障,此配置可减少停机时间。但是,请注意,配置高可用性的实例的收费是独立实例价格的两倍。
Cloud Storage 充当数据存储区。如需详细了解 Cloud Storage 的可用性,请参阅存储类别说明。
网络
在分层网络架构中,代理集群位于边界网络中。后端集群位于受防火墙规则保护的内部网络中,这些防火墙规则仅允许来自代理集群的传入流量。
代理集群与其他集群相隔离,因为它们会公开给外部请求。防火墙规则仅允许一组受限的来源 IP 地址访问代理集群。在这种情况下,防火墙规则仅允许来自 BI 工具地址的请求。
分层网络的配置不在本文档的讨论范围内。在将可视化软件连接到 Google Cloud 上的 Hadoop 中,您将在本教程中使用 default
网络。如需详细了解分层网络设置,请参阅 VPC 网络安全的最佳做法,以及如何配置多个网络接口中的概览和示例。
后续步骤
- 阅读本系列文章的第二部分将可视化图表软件连接到 Hadoop on Google Cloud,并了解如何在 Google Cloud 上设置架构。
- 使用相关 Terraform 配置文件在 Google Cloud 上设置架构。
- 了解使用 Apache Ranger on Dataproc 的最佳做法。
- 探索有关 Google Cloud 的参考架构、图表和最佳做法。查看我们的 Cloud Architecture Center。