在亚马逊上使用 Amazon S3 访问授权 EMR - Amazon EMR

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

在亚马逊上使用 Amazon S3 访问授权 EMR

Amazon 的 S3 访问授权概述 EMR

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

除了运行时角色或附加到有权访问您的EMR集群的身份的IAM角色所授予的权限之外,使用 S3 访问权限来扩大对 Amazon S3 数据的访问权限。有关更多信息,请参阅《Amazon S3 用户指南》中的使用 S3 Access Grants 管理访问权限

有关将 S3 访问权限授予用于其他 Amazon EMR 部署的步骤,请参阅以下文档:

Amazon 如何EMR使用 S3 访问授权

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

以下简要概述EMR了 Amazon 如何访问受 S3 访问授权保护的数据。

Amazon 如何EMR使用 S3 访问授权
  1. 用户提交使用存储在亚马逊 S3 中的数据的 Amazon EMR Spark 任务。

  2. A EMR mazon 申请 S3 访问授权,以允许该用户访问存储桶、前缀或对象。

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

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

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

Amazon 的 S3 访问权限授予注意事项 EMR

在 Amazon 上使用 S3 访问授权时,请注意以下行为和限制EMR。

功能支持

  • Amazon 6.15.0 及更高EMR版本支持 S3 访问授权。

  • 当您将 S3 访问权限授予与 Amazon 配合使用时,Spark 是唯一支持的查询引擎EMR。

  • 当您在亚马逊上使用 S3 访问权限时,Delta Lake 和 Hudi 是唯一支持的开放表格式。EMR

  • S3 访问权限授予不支持使用以下 Amazon EMR 功能:

    • Apache Iceberg 表

    • LDAP本机身份验证

    • Apache Ranger 本机身份验证

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

    • 通过开源 S3A 协议访问 S3

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

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

行为注意事项

  • 作为 S3 Apache Ranger 插件的一部分,Apache Ranger 与亚马逊EMR的原生集成功能与 S3 Apache Ranger 插件EMRFS中的 S3 访问权限授权一致。如果您使用 Apache Ranger 进行精细的访问控制 (FGAC),我们建议您使用该插件而不是 S3 访问授权。

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

  • 如果用户执行了 S3 访问权限授权不支持的操作,Amazon 将设置EMR为使用为执行任务而指定的IAM角色。有关更多信息,请参阅 回退到IAM角色上

启动具有 S3 访问权限授权的 Amazon EMR 集群

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

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

  1. 为您的EMR集群设置任务执行角色。包括运行 Spark 作业所需的IAM权限,s3:GetDataAccess以及s3: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 访问权限授予增加了在IAM角色中设置的权限。如果您为任务执行指定的IAM角色包含直接访问 S3 的权限,则用户可能能够访问更多的数据,而不仅仅是您在 S3 访问权限授予中定义的数据。

  2. 接下来,使用创建具有 Amazon EMR 6.15 或更高版本的集群,使用emrfs-site分类来启用 S3 访问授权,类似于以下示例: AWS 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 访问权限授予与 AWS Lake Formation

如果您使用亚马逊EMR进行AWS Lake Formation 集成,则可以使用 Amazon S3 访问授权直接或以表格形式访问亚马逊 S3 中的数据。

注意

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

直接访问

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

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

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

表格访问

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

spark.sql("select * from test_tbl")

当您在亚马逊 AWS Lake Formation 上使用 S3 访问权限授予时EMR,所有表格访问模式都将通过 Lake Formation 进行。

回退到IAM角色上

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

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

注意

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