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

使用 Amazon EMR 启用 Lake Formation

在 Amazon EMR 6.15.0 及更高版本中,当您在访问 Amazon Glue 数据目录中数据的 Amazon EMR on EC2 集群上运行 Spark 作业时,您可以使用 Amazon 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 的列、行或单元格级别权限

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

步骤 4:为 Amazon EMR 运行时系统角色配置 Amazon Glue 和 Lake Formation 授权

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

Lake Formation 权限控制对 Amazon Glue 数据目录资源、Amazon S3 位置以及这些位置的基础数据的访问。IAM 权限控制对 Lake Formation 和 Amazon 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 运行时角色,请按照管理 Amazon Lake Formation 权限中的步骤操作。

现在您可以使用运行时角色和 Lake Formation 来应用表和列级别权限。使用源身份时,您可以控制并监控对 Amazon 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 和 Amazon Glue Data Catalog 集成以获得多目录层次结构的信息,请参阅配置 Spark 以访问 Amazon Glue Data Catalog 中的多目录层次结构