将 EMR Serverless 与配合使用 AWS Lake Formation 以实现精细的访问控制 - Amazon EMR

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

将 EMR Serverless 与配合使用 AWS Lake Formation 以实现精细的访问控制

概述

在 Amazon 7.2.0 及更高EMR版本中,您可以利用 AWS Lake Formation 对由 S3 支持的数据目录表应用精细的访问控制。此功能允许您配置表、行、列和单元格级别的访问控制 read 在您的 Amazon EMR 无服务器 Spark 任务中进行查询。要为 Apache Spark 批处理作业和交互式会话配置精细的访问控制,请使用 Studio。EMR请参阅以下章节,详细了解 Lake Formation 以及如何将其与 EMR Serverless 配合使用。

使用 Amazon EMR Serverles AWS Lake Formation s 会产生额外费用。有关更多信息,请参阅 Amazon EMR 定价

EMR无服务器的工作原理 AWS Lake Formation

使用 EMR Serverless 和 Lake Formation 可以让你对每个 Spark 作业强制执行一层权限,以便在EMR无服务器执行作业时应用 Lake Formation 权限控制。EMRServerless 使用 Spark 资源配置文件创建两个配置文件以有效执行作业。用户配置文件执行用户提供的代码,而系统配置文件则强制执行 Lake Formation 策略。有关更多信息,请参阅什么是 AWS Lake Formation以及注意事项和限制

当你在 Lake Formation 中使用预先初始化的容量时,我们建议你至少有两个 Spark 驱动程序。每个支持 Lake Formation 的作业都使用两个 Spark 驱动程序,一个用于用户配置文件,一个用于系统配置文件。为了获得最佳性能,与不使用 Lake Formation 相比,在支持 Lake Formation 的工作中,你使用的司机数量应该是原来的两倍。

在 EMR Serverless 上运行 Spark 作业时,还必须考虑动态分配对资源管理和集群性能的影响。每个资源配置文件spark.dynamicAllocation.maxExecutors的最大执行者数量的配置适用于用户和系统执行者。如果您将该数字配置为等于允许的最大执行者数,则您的作业运行可能会停滞不前,因为一种类型的执行器使用了所有可用资源,这会在您运行作业时阻止其他执行器。

因此,您不会耗尽资源,EMRServerless 将每个资源配置文件默认的最大执行者数设置为该spark.dynamicAllocation.maxExecutors值的 90%。如果使用介于 0 和 1 之间的值spark.dynamicAllocation.maxExecutorsRatio进行指定,则可以覆盖此配置。此外,您还可以配置以下属性来优化资源分配和整体性能:

  • spark.dynamicAllocation.cachedExecutorIdleTimeout

  • spark.dynamicAllocation.shuffleTracking.timeout

  • spark.cleaner.periodicGC.interval

以下简要概述了EMR无服务器如何访问受 Lake Formation 安全策略保护的数据。

亚马逊如何EMR访问受 Lake Formation 安全策略保护的数据
  1. 用户向 AWS Lake Formation启用了EMR无服务器的应用程序提交 Spark 作业。

  2. EMRServerless 将任务发送给用户驱动程序,并在用户配置文件中运行该作业。用户驱动程序运行精简版的 Spark,该版本无法启动任务、请求执行器、访问 S3 或 Glue 目录。它制定了工作计划。

  3. EMRServerless 会设置第二个名为系统驱动程序的驱动程序,并在系统配置文件中运行该驱动程序(使用特权身份)。EMRServerless 在两个驱动程序之间设置了用于通信的加密TLS通道。用户驱动程序使用该通道将工作计划发送给系统驱动程序。系统驱动程序不运行用户提交的代码。它运行完整 Spark 并与 S3 和数据目录通信以进行数据访问。它请求执行者并将Job Plan编译成一系列执行阶段。

  4. EMR然后,Serverless 使用用户驱动程序或系统驱动程序在执行器上运行阶段。任何阶段的用户代码都只能在用户配置文件执行器上运行。

  5. 从受安全筛选器保护的数据目录表中读取数据的阶段 AWS Lake Formation 或应用安全筛选器的阶段将委托给系统执行者。

在亚马逊中启用 Lake Formation EMR

要启用 Lake Formation,在创建EMR无服务器应用程序时,必须将运行时配置参数设置spark.emr-serverless.lakeformation.enabledspark-defaults分类true下。

aws emr-serverless create-application \ --release-label emr-7.3.0 \ --runtime-configuration '{ "classification": "spark-defaults", "properties": { "spark.emr-serverless.lakeformation.enabled": "true" } }' \ --type "SPARK"

在 EMR Studio 中创建新应用程序时,也可以启用 Lake Formation。选择 “使用 Lake Formation” 进行精细的访问控制,可在 “其他配置” 下找到。

当您@@ 将 Lake Formation 与 EMR Serverless 结合使用时,默认情况下会启用工作器间加密,因此您不必再次明确启用工作器间加密。

为 Spark 作业启用 Lake Formation

要为单个 Spark 作业启用 Lake Formation,请在使用时spark.emr-serverless.lakeformation.enabled将其设置为 true spark-submit

--conf spark.emr-serverless.lakeformation.enabled=true

Job 运行时角色IAM权限

Lake For AWS mation 权限控制对 Glue 数据目录资源、Amazon S3 位置以及这些位置的基础数据的访问权限。IAM权限控制对 Lake Formation 和 AWS Glue APIs 以及资源的访问权限。尽管您可能拥有 Lake Formation 访问数据目录 (SELECT) 中表的权限,但如果您没有该操作的IAM权限,则glue:Get*API操作将失败。

以下是如何提供访问 S3 中的脚本、将日志上传到 S3 的IAM权限、 AWS Glue 权限以及访问 Lake Formation 的API权限的策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ScriptAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*.amzn-s3-demo-bucket/scripts", "arn:aws:s3:::*.amzn-s3-demo-bucket/*" ] }, { "Sid": "LoggingAccess", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/logs/*" ] }, { "Sid": "GlueCatalogAccess", "Effect": "Allow", "Action": [ "glue:Get*", "glue:Create*", "glue:Update*" ], "Resource": ["*"] }, { "Sid": "LakeFormationAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": ["*"] } ] }

为作业运行时角色设置 Lake Formation 权限

首先,在 Lake Formation 中注册 Hive 桌子的位置。然后在所需的表上为您的作业运行时角色创建权限。有关 Lake Formation 的更多详情,请参阅什么是 AWS Lake Formation? 在《AWS Lake Formation 开发人员指南》中。

设置 Lake Formation 权限后,您可以在 Amazon EMR Serverless 上提交 Spark 任务。有关 Spark 任务的更多信息,请参阅 Spark 示例

提交作业运行

完成 Lake Formation 授权的设置后,你可以在 EMRServerless 上提交 Spark 作业。要运行 Iceberg 作业,您必须提供以下spark-submit属性。

--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=<S3_DATA_LOCATION> --conf spark.sql.catalog.spark_catalog.glue.account-id=<ACCOUNT_ID> --conf spark.sql.catalog.spark_catalog.client.region=<REGION> --conf spark.sql.catalog.spark_catalog.glue.endpoint=https://glue.<REGION>.amazonaws.com

开放表格格式支持

亚马逊EMR版本 7.2.0 支持基于 Lake Formation 的精细访问控制。EMR无服务器支持 Hive 和 Iceberg 表类型。下表描述了所有支持的操作。

操作 Hive Iceberg
DDL命令 仅限IAM角色权限 仅限IAM角色权限
递增查询 不适用 完全支持
时间旅行查询 不适用于此表格格式 完全支持
元数据表 不适用于此表格格式 支持,但某些表格处于隐藏状态。有关更多信息,请参阅注意事项和限制
DML INSERT 仅限IAM权限 仅限IAM权限
DML UPDATE 不适用于此表格格式 仅限IAM权限
DML DELETE 不适用于此表格格式 仅限IAM权限
读取操作 完全支持 完全支持
存储过程 不适用 支持,但register_table和除外migrate。有关更多信息,请参阅注意事项和限制