View a markdown version of this page

使用 Amazon EMR 启用 Lake Formation - Amazon EMR

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

使用 Amazon EMR 启用 Lake Formation

在 Amazon EMR 6.15.0 及更高版本中,当您在访问 G AWS lue 数据目录中数据的 EC2 集群上在 Amazon EMR 上运行 Spark 作业时,您可以使用 AWS Lake Formation 对基于 Hudi、Iceberg 或 Delta Lake 的表应用表、行、列和单元级别的权限。

在本节中,我们将介绍如何创建安全配置和设置 Lake Formation 以与 Amazon EMR 结合使用。还将介绍如何使用您为 Lake Formation 创建的安全配置启动集群。

步骤 1:为 EMR 集群设置运行时角色

要为 EMR 集群使用运行时角色,您必须创建安全配置。利用安全配置,您可以在集群中应用一致的安全性、授权和身份验证选项。

  1. 使用以下安全配置创建名为 lf-runtime-roles-sec-cfg.json 的文件。

    { "AuthorizationConfiguration": { "IAMConfiguration": { "EnableApplicationScopedIAMRole": true, "ApplicationScopedIAMRoleConfiguration": { "PropagateSourceIdentity": true } }, "LakeFormationConfiguration": { "AuthorizedSessionTagValue": "Amazon EMR" } }, "EncryptionConfiguration": { "EnableAtRestEncryption": false, "EnableInTransitEncryption": true, "InTransitEncryptionConfiguration": { "TLSCertificateConfiguration": {<certificate-configuration>} } } }

    以下示例说明了如何在 Amazon S3 中使用包含证书的 zip 文件进行证书配置:

    "TLSCertificateConfiguration": { "CertificateProviderType": "PEM", "S3Object": "s3://MyConfigStore/artifacts/MyCerts.zip" }

    以下示例说明了如何使用自定义密钥提供程序进行证书配置:

    "TLSCertificateConfiguration": { "CertificateProviderType": "Custom", "S3Object": "s3://MyConfig/artifacts/MyCerts.jar", "CertificateProviderClass": "com.mycompany.MyCertProvider" }
  2. 接下来,为确保会话标签可以授权 Lake Formation,请将 LakeFormationConfiguration/AuthorizedSessionTagValue 属性设置为 Amazon EMR

  3. 使用以下命令创建 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 步骤的运行时角色

第 3 步:使用 Amazon EMR 运行时角色设置 Lake Formation-based 列、行或单元格级权限

要使用 Lake Formation 在列、行或单元格级别应用精细访问控制,Lake Formation 的数据湖管理员必须将 Amazon EMR 设置为会话标签配置的值 AuthorizedSessionTagValue。Lake Formation 使用该会话标签来授权调用者并提供对数据湖的访问权限。您可以在 Lake Formation 控制台的应用程序集成设置部分设置此会话标签。123456789012用你自己的 AWS 账户 身份证替换。

下图显示了 Lake Formation 控制台中的 “外部数据筛选” 部分。

Lake Formation 控制台的 “外部数据过滤设置” 部分。

步骤 4:配置 AWS Glue 和 Lake Formation 为亚马逊 EMR 运行时角色提供资助

要继续使用亚马逊 EMR 运行时角色设置基于 Lake Formation 的访问控制,您必须为亚马逊 EMR 运行时角色配置 Gl AWS ue 和 Lake Formation 授权。要让您的 IAM 运行时角色与 Lake Formation 进行交互,请使用 lakeformation:GetDataAccessglue:Get* 向其授予访问权限。

Lake For AWS mation 权限控制对 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 访问控制概述)。

  1. 创建 emr-runtime-roles-lake-formation-policy.json 文件并输入以下内容。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "LakeFormationManagedAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "glue:Get*", "glue:Create*", "glue:Update*" ], "Resource": [ "*" ] } ] }
  2. 创建相关的 IAM policy。

    aws iam create-policy \ --policy-name emr-runtime-roles-lake-formation-policy \ --policy-document file://emr-runtime-roles-lake-formation-policy.json
  3. 要将此策略分配给您的 IAM 运行时角色,请按照管理 AWS Lake Formation 权限中的步骤操作。

现在您可以使用运行时角色和 Lake Formation 来应用表和列级别权限。您还可以使用源身份来控制操作和监控操作 AWS CloudTrail。

对于您计划用作运行时角色的每个 IAM 角色,设置以下信任策略,将 EMR_EC2_DefaultRole 替换为您的实例配置文件角色。要修改 IAM 角色的信任策略,请参阅修改角色信任策略

{ "Sid":"AllowAssumeRole", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS_ACCOUNT_ID>:role/EMR_EC2_DefaultRole" }, "Action":[ "sts:AssumeRole", "sts:TagSession" ] }

有关详细的端到端示例,请参阅 Introducing runtime roles for Amazon EMR steps(引入适用于 Amazon EMR 步骤的运行时角色)。

有关如何与 Iceberg 和 AWS Glue 数据目录集成以实现多目录层次结构的信息,请参阅在 Glue 数据目录中配置 Spark 以访问多目录层次结构 AWS 。