产品展示

通过与 AWS Lake Formation 集成的 Amazon EMR 在开放表格格式上实施精细

利用 Amazon EMR 与 AWS Lake Formation 强化开放表格式的细粒度访问控制

重点摘要

Amazon EMR 615 版推出基于 AWS Lake Formation 的细粒度访问控制FGAC,支持开放表格式OTF,如 Apache Hudi、Apache Iceberg 和 Delta Lake。新特性可以在表级、列级和行级别进行权限管理,简化事务数据湖的安全与治理。本文将展示如何使用 Amazon EMR 集成 Lake Formation 为 Apache Hudi 表实施 FGAC。

在 Amazon EMR 615 中,我们推出了基于 AWS Lake Formation 的细粒度访问控制FGAC,以支持开放表格式OTF,包括 Apache Hudi、Apache Iceberg 和 Delta Lake。这使得用户能够通过对 Amazon EMR 中运行的 Apache Spark 作业设置表级、列级和行级别的权限来简化对事务性数据湖(https//awsamazoncom/blogs/bigdata/choosinganopentableformatforyourtransactionaldatalakeonaws/)的安全性和治理。许多大型企业希望利用其事务性数据湖获取洞察并改善决策过程。结合使用 Amazon EMR 与 Lake Formation 构建湖仓架构,能够确保在安全可靠的环境中进行数据分析。

Amazon EMR 的记录服务器组件支持表级、列级、行级、单元格级以及嵌套属性级的数据过滤功能。它扩展了对 Hive、Apache Hudi、Apache Iceberg 和 Delta Lake 格式的支持,既适用于读取包括时间旅行和增量查询也适用于写入操作例如 INSERT 语句。此外,新版 615 的 Amazon EMR 还引入了对其应用程序 Web 界面如集群上的 Spark 历史服务器、Yarn 时间线服务器和 Yarn 资源管理器 UI的访问控制保护。

本文将展示如何利用 Amazon EMR 集成 Lake Formation 在 Apache Hudi 表上实施 FGAC。

事务数据湖用例

Amazon EMR 客户通常使用开放表格式来满足其在数据湖中的 ACID 事务和时间旅行需求。通过保留历史版本,数据湖的时间旅行提供了审计与合规、数据恢复与回滚、可重现的分析和不同时间点的数据探索等好处。

另一个受欢迎的事务数据湖用例是增量查询。增量查询是一种查询策略,专注于处理和分析自上次查询以来仅新增或更新的数据。增量查询的关键在于利用元数据或变更跟踪机制识别上次查询以来的新数据或已修改数据。通过识别这些变化,查询引擎可以优化处理查询,仅处理相关数据,从而显著减少处理时间和资源需求。

解决方案概述

在本文中,我们将展示如何利用 Amazon EMR 在 Amazon Elastic Compute CloudAmazon EC2上集成 Lake Formation,为 Apache Hudi 表实施 FGAC。Apache Hudi 是一个开放源代码的事务数据湖框架,简化了增量数据处理和数据管道的开发。此新 FGAC 特性支持所有 OTF 格式。为了演示 Hudi 的用法,我们将使用位于 Amazon SageMaker Studio 的 notebook 通过不同用户访问权限读取和写入 Hudi 数据。这表现了真实世界的数据访问场景,例如工程用户需要完整的数据访问权限以排查数据平台问题,而数据分析师可能仅需访问不包含个人可识别信息PII的数据子集。通过 Amazon EMR 运行时角色 集成 Lake Formation,进一步提升数据安全性并简化 Amazon EMR 工作负载的数据控制管理。该解决方案确保了满足组织内部不同用户和角色的多样化需求和安全要求的数据访问的安全和控制环境。

以下图表展示了解决方案架构:

我们进行数据摄取流程,将 Hudi 数据集增补更新和插入到 Amazon Simple Storage ServiceAmazon S3桶,并在 AWS Glue 数据目录中持久化或更新表架构。通过零数据移动,我们可以通过多种 AWS 服务如 Amazon Athena、Amazon EMR 和 Amazon SageMaker查询由 Lake Formation 管理的 Hudi 表。

当用户通过任何 EMR 集群端点EMR Steps、Livy、EMR Studio 和 SageMaker提交 Spark 作业时,Lake Formation 会验证其权限并指示 EMR 集群过滤掉敏感数据,例如 PII 数据。

该解决方案有三种不同类型的用户,具有不同级别的访问 Hudi 数据的权限:

用户角色权限描述hudidbcreatorrole此角色用于数据湖管理员,具备进行数据库对象的创建、修改和删除等 DDL 操作的权限,可以在 Lake Formation 中定义行级和列级数据访问控制数据过滤规则。huditablepiirole此角色供工程用户使用,工程用户可以在 CopyonWriteCoW和 MergeonReadMoR上执行时间旅行与增量查询,且有权限访问基于任意时间戳的 PII 数据。huditablenonpiirole此角色供数据分析师使用,数据分析师的数据访问权限受数据湖管理员控制的 FGAC 授权规则管理。他们无法查看 PII 数据的列如姓名和地址,并且无法访问不符合特定条件的数据行,例如只能访问属于自身国家的数据行。

前提条件

可以从 GitHub 仓库 下载本文中使用的三个 notebook。

在您部署解决方案之前,请确保您具备以下条件:

轻舟加速器一个 AWS 账户一个具有管理员权限的 AWS 身份与访问管理IAM用户

完成以下步骤以设置权限:

通过与 AWS Lake Formation 集成的 Amazon EMR 在开放表格格式上实施精细使用管理员 IAM 用户登录到 AWS 账户,并确保位于 useast1 区域。在 useast1 区域创建一个 S3 桶例如,emrfgachudiuseast1ltACCOUNT IDgt。

接下来,我们通过 更改默认权限模型 开启 Lake Formation。

以管理员身份登录到 Lake Formation 控制台。在导航窗格中选择 Administration 下的 Data Catalog settings。在 Default permissions for newly created databases and tables 下,取消勾选 Use only IAM access control for new databases 和 Use only IAM access control for new tables in new databases。选择 Save。

或者,您需要撤销在启动 Lake Formation 时创建的资源数据库和表上的 IAMAllowedPrincipals 权限。

接下来,我们为 Amazon EMR 创建密钥对。

在 Amazon EC2 控制台中,选择导航窗格中的 Key pairs。选择 Create key pair。在 Name 中输入一个名称例如 emrfgachudikeypair。选择 Create key pair。

生成的密钥对本帖子中为 emrfgachudikeypairpem将保存到本地计算机。

接下来,我们创建一个 AWS Cloud9 交互式开发环境IDE。

在 AWS Cloud9 控制台中,选择导航窗格中的 Environments。选择 Create environment。在 Name 中输入一个名称例如 emrfgachudienv。其余设置保持默认。

选择 Create。IDE 准备好后,选择 Open 以打开它。

在 AWS Cloud9 IDE 中,在 File 菜单中选择 Upload Local Files。

上传密钥对文件emrfgachudikeypairpem。选择加号,然后选择 New Terminal。

在终端输入以下命令:

bash

创建用于 EMR 传输加密的加密证书

openssl req x509 newkey rsa1024 keyout privateKeypem out certificateChainpem days 365 nodes subj /C=US/ST=Washington/L=Seattle/O=MyOrg/OU=MyDept/CN=computeinternal

cp certificateChainpem trustedCertificatespem

压缩证书

zip r X mycertszip certificateChainpem privateKeypem trustedCertificatespem

将证书 zip 文件上传到 S3 桶

将 替换为您的 AWS 账户 ID

aws s3 cp /mycertszip s3//emrfgachudiuseast1/mycertszip

请注意,上述示例代码仅为演示用途。对于生产系统,使用受信任的认证机构CA签发证书。更多细节请参考 为 Amazon EMR 加密传输中的数据提供证书。

通过 AWS CloudFormation 部署解决方案

我们提供了一个 AWS CloudFormation 模板,可以自动设置以下服务和组件:

一个用于数据湖的 S3 桶,包含示例 TPCDS 数据集。带安全配置和公有 DNS 的 EMR 集群。具有 Lake Formation 细粒度权限的 EMR 运行时 IAM 角色:hudidbcreatorrole 此角色用于创建 Apache Hudi 数据库和表。huditablepiirole 此角色提供对 Hudi 表的所有列包括包含 PII 的列的查询权限。huditablenonpiirole 此角色提供对经过 Lake Formation 过滤的 Hudi 表的查询权限,过滤掉 PII 列。SageMaker Studio 执行角色允许用户承担相应的 EMR 运行时角色。网络资源,如 VPC、子网和安全组。

完成以下步骤以部署资源:

选择 Quick create stack 启动 CloudFormation 堆栈。在 Stack name 中输入堆栈名称例如,rsv2emrhudiblog。在 Ec2KeyPair 中输入密钥对的名称。在 IdleTimeout 中输入 EMR 集群的空闲超时时间,以避免在不使用时仍支付集群费用。在 InitS3Bucket 中输入您创建的 S3 桶名称,以保存 Amazon EMR 加密证书 zip 文件。在 S3CertsZip 中输入 Amazon EMR 加密证书 zip 文件的 S3 URI。

选择 I acknowledge that AWS CloudFormation might create IAM resources with custom names。选择 Create stack。

CloudFormation 堆栈部署大约需要 10 分钟时间。

设置 Lake Formation 以集成 Amazon EMR

完成以下步骤以设置 Lake Formation:

在 Lake Formation 控制台中,选择导航窗格中 Administration 下的 Application integration settings。选择 Allow external engines to filter data in Amazon S3 locations registered with Lake Formation。选择 Amazon EMR 作为 Session tag values。在 AWS account IDs 中输入您的 AWS 账户 ID。选择 Save。

在导航窗格中选择 Databases 下的 Data Catalog。选择 Create database。在 Name 中输入 default。选择 Create database。

在导航窗格中选择 Data lake permissions 下的 Permissions。选择 Grant。选择 IAM users and roles。选择您的 IAM 角色。在 Databases 中选择 default。在 Database permissions 中选择 Describe。选择 Grant。

将 Hudi JAR 文件复制到 Amazon EMR HDFS

要 在 Jupyter notebook 中使用 Hudi,需要完成以下针对 EMR 集群的步骤,其中包括将 Hudi JAR 文件从 Amazon EMR 本地目录复制到其 HDFS 存储,以便配置 Spark 会话使用 Hudi:

授权入站 SSH 流量端口 22。从 EMR 集群 Summary 部分复制 Primary node public DNS 的值例如,ec2XXXXXXXXXXXXcompute1amazonawscom。

返回之前 AWS Cloud9 终端,运行以下命令以 SSH 登录 EMR 主节点。将占位符替换为您的 EMR DNS 主机名:

bashchmod 400 emrfgachudikeypairpemssh i emrfgachudikeypairpem hadoop@ec2XXXXXXXXXXXXcompute1amazonawscom

运行以下命令将 Hudi JAR 文件复制到 HDFS:

bashhdfs dfs mkdir p /apps/hudi/libhdfs dfs copyFromLocal /usr/lib/hudi/hudisparkbundlejar /apps

在您的 AWS 湖仓架构中使用可重用的 ETL 框架 架构博客

在 AWS 湖仓架构中使用可重用的 ETL 框架关键要点数据湖和湖仓架构已成为任何组织数据平台中不可或缺的一部分。在构建湖仓平台时,可能会遇到各种技术挑战。采用可重用的 ETL 框架,可以提高开发效率...