使用 Amazon EMR 启用 Lake Formation
在 Amazon EMR 6.15.0 及更高版本中,当您在访问 AWS Glue 数据目录中数据的 Amazon EMR on EC2 集群上运行 Spark 作业时,您可以使用 AWS Lake Formation 对基于 Hudi、Iceberg 或 Delta Lake 的表应用表、行、列和单元格级别的权限。
在本节中,我们将介绍如何创建安全配置和设置 Lake Formation 以与 Amazon EMR 结合使用。还将介绍如何使用您为 Lake Formation 创建的安全配置启动集群。
步骤 1:为 EMR 集群设置运行时角色
要为 EMR 集群使用运行时角色,您必须创建安全配置。利用安全配置,您可以在集群中应用一致的安全性、授权和身份验证选项。
-
使用以下安全配置创建名为
lf-runtime-roles-sec-cfg.json
的文件。{ "AuthorizationConfiguration": { "IAMConfiguration": { "EnableApplicationScopedIAMRole": true, "ApplicationScopedIAMRoleConfiguration": { "PropagateSourceIdentity": true } }, "LakeFormationConfiguration": { "AuthorizedSessionTagValue": "Amazon EMR" } }, "EncryptionConfiguration": { "EnableInTransitEncryption": true, "InTransitEncryptionConfiguration": { "TLSCertificateConfiguration": {<certificate-configuration>} } } }
-
接下来,为确保会话标签可以授权 Lake Formation,请将
LakeFormationConfiguration/AuthorizedSessionTagValue
属性设置为Amazon EMR
。 -
使用以下命令创建 Amazon EMR 安全配置。
aws emr create-security-configuration \ --name 'iamconfig-with-iam-lf' \ --security-configuration file://lf-runtime-roles-sec-cfg.json
或者,您可以使用 Amazon EMR 控制台
创建具有自定义设置的安全配置。
第 2 步:启动一个 Amazon EMR 集群
现在您可以使用您在上一步中创建的安全配置启动 EMR 集群。有关安全配置的更多信息,请参阅 使用安全配置设置 Amazon EMR 集群安全性 和 Amazon EMR 步骤的运行时角色。
步骤 3a:使用 Amazon EMR 运行时系统角色设置基于 Lake Formation 的表级别权限
如果您不需要在列、行或单元格级别进行精细的访问控制,则可以使用 Glue 数据目录设置表级别的权限。要启用表级别的访问权限,请导航到 AWS Lake Formation 控制台,然后从边栏的管理部分中选择应用程序集成设置选项。然后,启用以下选项并选择保存:
允许外部引擎以完整表访问权限访问 Amazon S3 位置的数据
步骤 3b:使用 Amazon EMR 运行时系统角色设置基于 Lake Formation 的列、行或单元格级别权限
要使用 Lake Formation 应用表和列级别权限,Lake Formation 的数据湖管理员必须将 Amazon EMR
设置为会话标签配置的值 AuthorizedSessionTagValue
。Lake Formation 使用该会话标签来授权调用者并提供对数据湖的访问权限。您可以在 Lake Formation 控制台的 External data filtering(外部数据筛选)部分设置该会话标签。将 123456789012
替换为您自己的 AWS 账户 ID。
步骤 4:为 Amazon EMR 运行时系统角色配置 AWS Glue 和 Lake Formation 授权
要继续使用 Amazon EMR 运行时角色设置基于 Lake Formation 的访问控制,您必须为 Amazon EMR 运行时角色配置 AWS Glue 和 Lake Formation 授权。要让您的 IAM 运行时角色与 Lake Formation 进行交互,请使用 lakeformation:GetDataAccess
和 glue:Get*
向其授予访问权限。
Lake Formation 权限控制对 AWS Glue 数据目录资源、Amazon S3 位置以及这些位置的基础数据的访问。IAM 权限控制对 Lake Formation 和 AWS Glue API 及资源的访问。尽管您可能拥有访问数据目录 (SELECT) 中的表的 Lake Formation 权限,但如果没有 glue:Get*
API 的 IAM 权限,您的操作将失败。有关 Lake Formation 访问控制的更多信息,请参阅 Lake Formation access control overview(Lake Formation 访问控制概述)。
-
创建
emr-runtime-roles-lake-formation-policy.json
文件并输入以下内容。{ "Version": "2012-10-17", "Statement": { "Sid": "LakeFormationManagedAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "glue:Get*", "glue:Create*", "glue:Update*" ], "Resource": "*" } }
-
创建相关的 IAM policy。
aws iam create-policy \ --policy-name emr-runtime-roles-lake-formation-policy \ --policy-document file://emr-runtime-roles-lake-formation-policy.json
-
要将此策略分配给您的 IAM 运行时角色,请按照管理 AWS Lake Formation 权限中的步骤操作。
现在您可以使用运行时角色和 Lake Formation 来应用表和列级别权限。使用源身份时,您可以控制并监控对 AWS CloudTrail 执行的操作。有关详细的端到端示例,请参阅 Introducing runtime roles for Amazon EMR steps