在Amazon SageMaker Data Wrangler中使用AWS Lake Formation应用细粒度数据访问控制

使用AWS Lake Formation在SageMaker Data Wrangler中控制数据访问

Amazon SageMaker数据整理器可以将机器学习(ML)的数据收集和准备时间从几周减少到几分钟。您可以使用SageMaker数据整理器简化特征工程和数据准备的过程,并在单一的可视化界面中完成数据准备工作流的每个阶段(包括数据选择、净化、探索、可视化和大规模处理)。数据通常保存在由AWS Lake Formation管理的数据湖中,您可以使用简单的授权或撤销过程实现细粒度的访问控制。SageMaker数据整理器支持与Lake Formation和Amazon Athena连接的细粒度数据访问控制。

我们很高兴地宣布,SageMaker数据整理器现在支持使用Amazon EMR的Lake Formation,以提供细粒度的数据访问限制。

数据专业人员,如数据科学家,希望利用在Amazon EMR上运行的Apache Spark、Hive和Presto的强大功能进行快速数据准备;然而,学习曲线很陡峭。我们的客户希望能够连接到Amazon EMR,使用Hive或Presto运行临时SQL查询,查询内部元数据存储或外部元数据存储(如AWS Glue数据目录),并通过几次点击来准备数据。

在本文中,我们将展示如何使用Lake Formation作为集中式数据治理能力和Amazon EMR作为大数据查询引擎,实现对SageMaker数据整理器的访问。Lake Formation的功能简化了通过集中式方法对多个帐户中的分布式数据湖进行安全和管理,提供细粒度的访问控制。

解决方案概述

我们将使用示例数据集TPC数据模型来演示该解决方案的端到端用例。这些数据代表产品的交易数据,包括客户人口统计、库存、网上销售和促销等信息。为了演示细粒度的数据访问权限,我们考虑以下两个用户:

  • David,营销团队的数据科学家。他的任务是构建客户细分模型,只允许访问非敏感的客户数据。
  • Tina,销售团队的数据科学家。她的任务是构建销售预测模型,并需要访问特定区域的销售数据。她还在帮助产品团队进行创新,因此需要访问产品数据。

该架构的实现如下:

  • Lake Formation管理数据湖,原始数据可在Amazon Simple Storage Service(Amazon S3)存储桶中获取
  • 使用Amazon EMR从数据湖中查询数据,并使用Spark进行数据准备
  • 使用AWS Identity and Access Management(IAM)角色使用Lake Formation管理数据访问
  • 使用SageMaker数据整理器作为单一的可视化界面,用于交互式查询和准备数据

下图说明了这个架构。帐户A是数据湖帐户,存放通过抽取、转换和加载(ETL)过程获得的所有ML准备好的数据。帐户B是数据科学帐户,一组数据科学家使用SageMaker数据整理器编译和运行数据转换。为了使帐户B中的SageMaker数据整理器能够通过Lake Formation权限访问帐户A的数据湖中的数据表,我们必须激活必要的权限。

您可以使用提供的AWS CloudFormation堆栈来设置此解决方案的架构组件。

先决条件

在开始之前,请确保具备以下先决条件:

  • 一个AWS帐户
  • 具有管理员访问权限的IAM用户
  • 一个S3存储桶

使用AWS CloudFormation配置资源

我们提供了一个CloudFormation模板,用于部署架构中的服务,以进行端到端测试和重复部署的便利。该模板的输出如下:

  • 用于数据湖的S3存储桶。
  • 启用了EMR运行时角色的EMR集群。有关在Amazon EMR中使用运行时角色的详细信息,请参阅配置Amazon EMR步骤的运行时角色。在Amazon EMR 6.9中支持将运行时角色与EMR集群关联。请确保以下配置已就位:
    • 在Amazon EMR中创建安全配置。
    • EMR运行时角色的信任策略应允许EMR EC2实例配置文件扮演该角色。
    • EMR EC2实例配置文件角色应能够扮演EMR运行时角色。
    • 应创建具有传输加密的EMR集群。
  • 用于访问数据湖中数据的IAM角色,具有细粒度的权限:
    • Marketing-data-access-role
    • Sales-data-access-role
  • 一个Amazon SageMaker Studio域和两个用户配置文件。用户的SageMaker Studio执行角色允许用户扮演其对应的EMR运行时角色。
  • 启用选择用于EMR连接的角色的生命周期配置。
  • 使用TPC数据填充的Lake Formation数据库。
  • 设置所需的网络资源,如VPC、子网和安全组。

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

从 Amazon EMR 版本 4.8.0 或更高版本开始,您可以选择使用安全配置来指定用于加密数据传输的工件。我们手动创建 PEM 证书,将其包含在 .zip 文件中,将其上传到 S3 存储桶中,然后在 Amazon S3 中引用该 .zip 文件。您可能希望将私钥 PEM 文件配置为通配符证书,以便访问您的集群实例所在的 VPC 域。例如,如果您的集群位于 us-east-1 区域,您可以在证书配置中指定一个公用名,该公用名允许通过在证书主题定义中指定 CN=*.ec2.internal 来访问集群。如果您的集群位于 us-west-2,您可以指定 CN=*.us-west-2.compute.internal

使用您的系统终端运行以下命令。这将生成 PEM 证书并将其整理到一个 .zip 文件中:

openssl req -x509 -newkey rsa:1024 -keyout privateKey.pem -out certificateChain.pem -days 365 -nodes -subj '/C=US/ST=Washington/L=Seattle/O=MyOrg/OU=MyDept/CN=*.us-east-2.compute.internal'

cp certificateChain.pem trustedCertificates.pem

zip -r -X my-certs.zip certificateChain.pem privateKey.pem trustedCertificates.pem

my-certs.zip 上传到与您计划运行此练习的同一区域中的 S3 存储桶中。复制已上传文件的 S3 URI。在启动 CloudFormation 模板时,您将需要这个 URI。

此示例仅用于概念演示。不推荐使用自签名证书,因为可能存在安全风险。对于生产系统,请使用受信任的认证机构(CA)来颁发证书。

部署 CloudFormation 模板

要部署解决方案,请完成以下步骤:

  1. 以 IAM 用户身份登录 AWS 管理控制台,最好是管理员用户。
  2. 选择 启动堆栈 来启动 CloudFormation 模板:

  1. 选择 下一步

  1. 对于 堆栈名称,输入一个名称。
  2. 对于 IdleTimeout,输入 EMR 集群的空闲超时时间(避免在不使用集群时支付费用)。
  3. 对于 S3CertsZip,输入带有 EMR 加密密钥的 S3 URI。

有关生成特定于您区域的密钥和 .zip 文件的说明,请参阅使用 Amazon EMR 加密提供用于加密数据传输的证书。如果您在美国东部(弗吉尼亚北部)部署,请记住使用 CN=*.ec2.internal。有关更多信息,请参阅创建用于数据加密的密钥和证书。确保将 .zip 文件上传到与您的 CloudFormation 堆栈部署相同区域的 S3 存储桶中。

  1. 在审核页面上,选择复选框以确认 AWS CloudFormation 可能创建资源。
  2. 选择创建堆栈

等待堆栈的状态从CREATE_IN_PROGRESS更改为CREATE_COMPLETE。该过程通常需要10-15分钟。

创建堆栈后,通过更新 Lake Formation 上的External Data Filtering设置,允许 Amazon EMR 查询 Lake Formation。有关说明,请参阅“入门指南”。在Session tag values下指定 Amazon EMR,并在AWS account IDs下输入您的 AWS 帐户 ID。

测试数据访问权限

现在,必要的基础设施已经就位,您可以验证两个 SageMaker Studio 用户是否可以访问细粒度数据。回顾一下,David 不应该能够访问关于您客户的任何私人信息。Tina 可以访问有关销售的信息。让我们对每种用户类型进行测试。

测试 David 的用户配置文件

要测试 David 的用户配置文件的数据访问权限,请完成以下步骤:

  1. 在 SageMaker 控制台上,选择导航窗格中的Domains
  2. 从 SageMaker Studio 域中,从用户配置文件 david-non-sensitive-customer 启动 SageMaker Studio。

  1. 在 SageMaker Studio 环境中,创建 Amazon SageMaker Data Wrangler 流程,然后选择Import & prepare data visually

或者,在File菜单中选择New,然后选择Data Wrangler flow

我们将在本文的后续部分详细讨论创建数据流的步骤。

测试 Tina 的用户配置文件

Tina 的 SageMaker Studio 执行角色允许她使用两个 EMR 执行角色访问 Lake Formation 数据库。通过在 Tina 的文件目录中列出角色 ARN 来实现这一点。可以使用 SageMaker Studio 生命周期配置来设置这些角色,以便在应用程序重新启动时保留角色。要测试 Tina 的访问权限,请完成以下步骤:

  1. 在 SageMaker 控制台上,导航到 SageMaker Studio 域。
  2. 从用户配置文件 tina-sales-electronics 启动 SageMaker Studio。

在切换用户配置文件时,关闭浏览器上的任何先前的 SageMaker Studio 会话是一个好习惯。一次只能有一个活动的 SageMaker Studio 用户会话。

  1. 创建一个 Data Wrangler 数据流。

在接下来的部分中,我们展示在 SageMaker Data Wrangler 中创建数据流并连接到 Amazon EMR 作为数据源的步骤。David 和 Tina 在数据准备方面的体验类似,只是访问权限不同,因此他们将看到不同的表。

创建 SageMaker Data Wrangler 数据流

在本节中,我们介绍在 SageMaker Data Wrangler 中将通过 CloudFormation 模板创建的现有 EMR 集群作为数据源连接的过程。为了演示目的,我们使用 David 的用户配置文件。

完成以下步骤创建您的数据流:

  1. 在 SageMaker 控制台上,选择导航窗格中的Domains
  2. 选择通过运行 CloudFormation 模板创建的 StudioDomain。
  3. 选择一个用户配置文件(例如 David 的配置文件)并启动 SageMaker Studio。

  1. 选择Open Studio
  2. 在SageMaker Studio中,创建一个新的数据流,并选择Import & prepare data visually

或者,在文件菜单中选择新建,然后选择Data Wrangler flow

创建新的数据流可能需要几分钟的时间。创建完成后,您将看到导入数据页面。

  1. 要将Amazon EMR作为SageMaker Data Wrangler中的数据源添加,可以在添加数据源菜单中选择Amazon EMR

您可以浏览您的SageMaker Studio执行角色有权限查看的所有EMR集群。您有两个连接集群的选项:一个是通过交互式用户界面,另一个是先使用AWS Secrets Manager创建一个包含EMR集群信息的JDBC URL的密钥,并在用户界面中提供存储的AWS密钥ARN以连接到Presto或Hive。在本文中,我们使用第一种方法。

  1. 选择要使用的任意集群,然后选择下一步

  1. 选择要使用的端点。
  2. 输入一个名称以标识您的连接,例如emr-iam-connection,然后选择下一步

  1. 选择IAM作为您的身份验证类型,然后选择连接

连接成功后,您可以交互式地查看数据库树和表预览或模式。您还可以从Amazon EMR查询、探索和可视化数据。预览时,默认情况下只显示100条记录。在查询编辑器中提供SQL语句并选择运行后,查询将在Amazon EMR Hive引擎上运行以预览数据。如果查询花费的时间异常长,可以选择取消查询来取消正在进行的查询。

  1. 让我们访问David没有权限的表中的数据。

查询将导致错误消息“Unable to fetch table dl_tpc_web_sales. Insufficient Lake Formation permission(s) on dl_tpc_web_sales.”

最后一步是导入数据。当你准备好查询的数据时,你可以根据采样类型(FirstK、Random或Stratified)和导入数据的采样大小来更新数据选择的采样设置。

  1. 选择导入以导入数据。

在下一页中,你可以对数据集进行各种转换和重要分析。

  1. 导航到数据流并根据需要添加更多步骤进行转换和分析。

你可以运行数据洞察报告来识别数据质量问题,并获取修复这些问题的建议。让我们看一些示例转换。

  1. 数据流视图中,你应该看到我们正在使用Amazon EMR作为数据源,使用Hive连接器。

  1. 选择数据类型旁边的加号,并选择添加转换

让我们探索数据并应用转换。例如,c_login列为空,作为特征它不会增加价值。让我们删除这一列。

  1. 所有步骤窗格中,选择添加步骤
  2. 选择管理列

  1. 对于转换,选择删除列
  2. 对于要删除的列,选择c_login列。
  3. 选择预览,然后选择添加

  1. 通过展开删除列部分来验证步骤。

你可以根据数据集的不同转换需求继续添加步骤。让我们回到数据流。现在你可以看到删除列块显示我们执行的转换。

机器学习实践者花费大量时间编写特征工程代码,将其应用于初始数据集,对经过特征工程的数据集进行模型训练,并评估模型准确性。由于这项工作的实验性质,即使是最小的项目也会进行多次迭代。同样的特征工程代码经常被反复运行,浪费时间和计算资源。在大型组织中,这可能导致更大的生产力损失,因为不同团队经常运行相同的作业,甚至编写重复的特征工程代码,因为他们没有了解之前的工作。为了避免重新处理特征,我们可以将转换后的特征导出到Amazon SageMaker特征存储。有关更多信息,请参阅新功能 – 使用 Amazon SageMaker 特征存储存储、发现和共享机器学习特征

  1. 选择删除列旁边的加号。
  2. 选择导出到SageMaker特征存储(通过Jupyter笔记本)

通过将其指定为目标,您可以轻松将生成的特征导出到SageMaker特征存储中。您可以将特征保存到现有的特征组中,也可以创建一个新的特征组。有关更多信息,请参阅在Amazon SageMaker中轻松创建和存储特征,无需编码。

我们现在使用SageMaker数据整理器创建了特征,并将这些特征存储在SageMaker特征存储中。我们展示了在SageMaker数据整理器用户界面中进行特征工程的示例工作流程。

清理

如果您已完成对SageMaker数据整理器的工作,请删除您创建的资源,以避免产生额外费用。

  1. 在SageMaker Studio中关闭所有选项卡,然后在文件菜单中选择关闭

  1. 当提示时,选择全部关闭

关闭可能需要几分钟,具体时间取决于实例类型。确保删除了与每个用户配置文件关联的所有应用程序。如果它们没有被删除,请手动删除使用CloudFormation模板创建的每个用户配置文件下的关联应用程序。

  1. 在Amazon S3控制台中,清空通过CloudFormation模板创建的任何S3存储桶。

存储桶应与CloudFormation启动堆栈名称和cf-templates-具有相同的前缀。

  1. 在Amazon EFS控制台中,删除SageMaker Studio文件系统。

您可以通过选择文件系统ID并在标签选项卡上确认ManagedByAmazonSageMakerResource标签来确认您是否拥有正确的文件系统。

  1. 在AWS CloudFormation控制台中,选择您创建的堆栈,然后选择删除

您将收到一个错误消息,这是预期的。我们将在后续步骤中回到这里并清理它。

  1. 识别由名为dw-emr-的CloudFormation堆栈创建的VPC,并按照提示删除VPC。

  1. 返回AWS CloudFormation控制台,并重试对dw-emr-堆栈的删除。

此帖子中描述的由CloudFormation模板提供的所有资源现已从您的帐户中删除。

结论

在本文中,我们介绍了如何使用Lake Formation应用细粒度访问控制,并使用Amazon EMR作为SageMaker Data Wrangler的数据源访问数据,以及如何转换和分析数据集,并将结果导出到数据流以在Jupyter笔记本中使用。通过使用SageMaker Data Wrangler内置的分析功能可视化数据集后,我们进一步增强了数据流程。创建一个数据准备流程而无需编写一行代码的事实是重要的。

要开始使用SageMaker Data Wrangler,请参阅使用Amazon SageMaker Data Wrangler准备机器学习数据。