将 Amazon S3 Access Grants 与 Amazon EMR 结合使用 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Amazon S3 Access Grants 与 Amazon EMR 结合使用

Amazon EMR 的 S3 Access Grants 概述

在 Amazon EMR 6.15.0 及更高版本中,Amazon S3 Access Grants 提供了一种可扩展的访问控制解决方案,您可以使用该解决方案来增强对 Amazon EMR 中的 Amazon S3 数据的访问权限。如果您的 S3 数据有复杂或大规模的权限配置,则可以使用 Access Grants 来扩展用户、角色和应用程序在集群上的 S3 数据权限。

使用 S3 Access Grants 可增强对 Amazon S3 数据的访问权限,其超出运行时系统角色或 IAM 角色授予的权限,这些权限附加到具有对 EMR 集群的访问权限的身份。有关更多信息,请参阅《Amazon S3 用户指南》中的使用 S3 Access Grants 管理访问权限

有关将 S3 Access Grants 与其他 Amazon EMR 部署结合使用的步骤,请参阅以下文档:

Amazon EMR 如何与 S3 Access Grants 结合使用

Amazon EMR 6.15.0 以及更高版本提供了与 S3 Access Grants 的本机集成。您可以在 Amazon EMR 上启用 S3 Access Grants 并运行 Spark 作业。当您的 Spark 作业请求获取 S3 数据时,Amazon S3 会提供限定于特定存储桶、前缀或对象的临时凭证。

以下是 Amazon EMR 如何访问受 S3 Access Grants 保护的数据的高级概览。

Amazon EMR 如何与 S3 Access Grants 结合使用
  1. 用户提交使用 Amazon S3 中存储的数据的 Amazon EMR Spark 作业。

  2. Amazon EMR 请求 S3 Access Grants,以允许该用户访问存储桶、前缀或对象。

  3. Amazon S3 以 Amazon Security Token Service (STS) 令牌的形式为用户返回临时证书。令牌限定为访问 S3 存储桶、前缀或对象。

  4. Amazon EMR 使用 STS 令牌从 S3 中检索数据。

  5. Amazon EMR 从 S3 接收数据并将结果返回给用户。

Amazon EMR 的 S3 Access Grants 注意事项

将 S3 Access Grants 与 Amazon EMR 结合使用时,请注意以下行为和限制。

功能支持

  • Amazon EMR 6.15.0 及更高版本支持 S3 Access Grants。

  • 当您将 S3 Access Grants 与 Amazon EMR 结合使用时,Spark 是唯一支持的查询引擎。

  • 将 S3 Access Grants 与 Amazon EMR 结合使用时,Delta Lake 和 Hudi 是唯一支持的开放表格式。

  • 以下 Amazon EMR 功能不支持与 S3 Access Grants 结合使用:

    • Apache Iceberg 表

    • LDAP 本机身份验证

    • Apache Ranger 本机身份验证

    • Amazon CLI 向使用 IAM 角色的 Amazon S3 发出的请求

    • 通过开源 S3A 协议访问 S3

  • 在 IAM Identity Center 中使用可信身份传播的 EMR 集群不支持 fallbackToIAM 选项。

  • 只有在 Amazon EC2 上运行的 Amazon EMR 集群才支持使用 Amazon Lake Formation进行 S3 Access Grants

行为注意事项

  • 作为 EMRFS S3 Apache Ranger 插件的一部分,Apache Ranger 与 Amazon EMR 的本机集成包含与 S3 Access Grants 一致的功能。如果您使用 Apache Ranger 进行精细访问控制(FGAC),我们建议您使用该插件而不是 S3 Access Grants。

  • Amazon EMR 在 EMRFS 中提供凭证缓存,以确保用户无需在 Spark 作业中重复请求相同的凭证。因此,Amazon EMR 在请求凭证时总是会请求默认级别的权限。有关更多信息,请参阅《Amazon S3 用户指南》中的请求对 S3 数据的访问

  • 如果用户执行了 S3 Access Grants 不支持的操作,则 Amazon EMR 将设置为使用为执行作业而指定的 IAM 角色。有关更多信息,请参阅 回退到 IAM 角色

使用 S3 Access Grants 启动 Amazon EMR 集群

本部分介绍如何启动在 Amazon EC2 上运行的 EMR 集群,并使用 S3 Access Grants 来管理对 Amazon S3 中数据的访问权限。有关将 S3 Access Grants 与其他 Amazon EMR 部署配合使用的步骤,请参阅以下文档:

按照以下步骤启动在 Amazon EC2 上运行的 EMR 集群,并使用 S3 Access Grants 来管理对 Amazon S3 中数据的访问权限。

  1. 为 EMR 集群设置作业执行角色。包括运行 Spark 作业所需的 IAM 权限,s3:GetDataAccesss3:GetAccessGrantsInstanceForPrefix

    { "Effect": "Allow", "Action": [ "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": [ //LIST ALL INSTANCE ARNS THAT THE ROLE IS ALLOWED TO QUERY "arn:aws_partition:s3:Region:account-id1:access-grants/default", "arn:aws_partition:s3:Region:account-id2:access-grants/default" ] }
    注意

    在 Amazon EMR 中,S3 Access Grants 可增强在 IAM 角色中设置的权限。如果您为作业执行指定的 IAM 角色包含直接访问 S3 的权限,则用户可能能够访问比 S3 Access Grants 中定义的数据更多的数据。

  2. 接下来,使用创建具有 Amazon EMR 6.15 或更高版本的集群,并使用emrfs-site分类来启用 S3 访问授权,类似于以下示例: Amazon CLI

    aws emr create-cluster --release-label emr-6.15.0 \ --instance-count 3 \ --instance-type m5.xlarge \ --configurations '[{"Classification":"emrfs-site", "Properties":{"fs.s3.s3AccessGrants.enabled":"true", "fs.s3.s3AccessGrants.fallbackToIAM":"false"}}]'

S3 访问权限授予与 Amazon Lake Formation

如果您将 Amazon EMR 与 Amazon Lake Formation 集成结合使用,则可以使用 Amazon S3 Access Grants 直接或以表格形式访问 Amazon S3 中的数据。

注意

只有在 Amazon EC2 上运行 Amazon Lake Formation 的 Amazon EMR 集群才支持 S3 访问授权。

直接访问

直接访问涉及所有访问 S3 数据的调用,这些调用不会调用 Lake Formation 在亚马逊 EMR 中用作元存储的 Amazon Glue 服务的 API,例如,调用:spark.read

spark.read.csv("s3://...")

当您在 Amazon EMR Amazon Lake Formation 上使用 S3 访问授权时,所有直接访问模式都将通过 S3 访问权限授予来获得临时的 S3 证书。

表格访问

当 Lake Formation 调用元存储 API 来访问您的 S3 位置(例如,查询表数据)时,就会发生表格访问:

spark.sql("select * from test_tbl")

当你在 Amazon EMR Amazon Lake Formation 上使用 S3 访问权限授权时,所有表格访问模式都将通过 Lake Formation 进行。

回退到 IAM 角色

如果用户尝试执行 S3 Access Grants 不支持的操作,则 Amazon EMR 将默认设置为在 fallbackToIAM 配置为 true 时使用为执行作业而指定的 IAM 角色。在 S3 Access Grants 未涵盖的情况下,这使得用户能够依靠其作业执行角色来提供 S3 访问凭证。

fallbackToIAM 启用后,用户可以访问 Access Grants 所允许的数据。如果目标数据没有 S3 Access Grants 令牌,则 Amazon EMR 会检查其作业执行角色的权限。

注意

我们建议您在启用 fallbackToIAM 配置的情况下测试您的访问权限,即使您计划为生产工作负载禁用该选项。使用 Spark 作业时,用户可以通过其他方式使用自己的 IAM 凭证访问所有权限集。在 EMR 集群上启用后,来自 S3 的授权将允许 Spark 作业访问 S3 位置。您应确保保护这些 S3 位置,使其免受 EMRFS 外部的访问。例如,您应该保护 S3 位置,防止笔记本电脑中使用的 S3 客户端或不受 S3 Access Grants 支持的应用程序(例如 Hive 或 Presto)访问。