

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

# 使用 Amazon EMR 启用 Lake Formation
<a name="emr-lf-enable"></a>

在 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 集群设置运行时角色
<a name="emr-lf-launch-cluster"></a>

要为 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 文件进行证书配置：
   + Amazon S3 中包含证书的 zip 文件用作密钥提供程序。（有关证书要求，请参阅 [为通过 Amazon EMR 加密来加密传输中的数据提供凭证](emr-encryption-enable.md#emr-encryption-certificates)。）

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

   以下示例说明了如何使用自定义密钥提供程序进行证书配置：
   + 使用自定义密钥提供程序。（有关证书要求，请参阅 [为通过 Amazon EMR 加密来加密传输中的数据提供凭证](emr-encryption-enable.md#emr-encryption-certificates)。）

   ```
   "TLSCertificateConfiguration": {
   	"CertificateProviderType": "Custom",
   	"S3Object": "s3://MyConfig/artifacts/MyCerts.jar",
   	"CertificateProviderClass": "com.mycompany.MyCertProvider"
       }
   ```

1. 接下来，为确保会话标签可以授权 Lake Formation，请将 `LakeFormationConfiguration/AuthorizedSessionTagValue` 属性设置为 `Amazon EMR`。

1. 使用以下命令创建 Amazon EMR 安全配置。

   ```
   aws emr create-security-configuration \
   --name 'iamconfig-with-iam-lf' \
   --security-configuration file://lf-runtime-roles-sec-cfg.json
   ```

   或者，您可以使用 [Amazon EMR 控制台](https://console.aws.amazon.com//emr)创建具有自定义设置的安全配置。

## 第 2 步：启动一个 Amazon EMR 集群
<a name="emr-lf-launch-cluster"></a>

现在您可以使用您在上一步中创建的安全配置启动 EMR 集群。有关安全配置的更多信息，请参阅 [使用安全配置设置 Amazon EMR 集群安全性](emr-security-configurations.md) 和 [Amazon EMR 步骤的运行时角色](emr-steps-runtime-roles.md)。

## 步骤 3：使用 Amazon EMR 运行时系统角色设置基于 Lake Formation 的列、行或单元格级别权限
<a name="emr-lf-fgac-perms"></a>

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

## 第 4 步：为亚马逊 EMR 运行时角色配置 AWS Glue 和 Lake Formation 授权
<a name="emr-lf-trust-policy"></a>

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

Lake For AWS mation 权限控制对 Glue 数据目录资源、Amazon S3 位置以及这些位置的基础数据的访问权限。IAM 权限控制对 Lake Formation 和 AWS Glue APIs 以及资源的访问。尽管您可能拥有访问数据目录 (SELECT) 中的表的 Lake Formation 权限，但如果没有 `glue:Get*` API 的 IAM 权限，您的操作将失败。有关 Lake Formation 访问控制的更多信息，请参阅 [Lake Formation access control overview](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-overview.html)（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": [
           "*"
         ]
       }
     ]
   }
   ```

------

1. 创建相关的 IAM policy。

   ```
   aws iam create-policy \
   --policy-name emr-runtime-roles-lake-formation-policy \
   --policy-document file://emr-runtime-roles-lake-formation-policy.json
   ```

1. 要将此策略分配给您的 IAM 运行时角色，请按照[管理 AWS Lake Formation 权限](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-permissions.html)中的步骤操作。

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

对于您计划用作运行时角色的每个 IAM 角色，设置以下信任策略，将 `EMR_EC2_DefaultRole` 替换为您的实例配置文件角色。要修改 IAM 角色的信任策略，请参阅[修改角色信任策略](https://docs.aws.amazon.com//IAM/latest/UserGuide/roles-managingrole-editing-console.html)。

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

有关详细示 end-to-end例，请参阅 [Amazon EMR 步骤的运行时角色简介](https://aws.amazon.com/blogs/big-data/introducing-runtime-roles-for-amazon-emr-steps-use-iam-roles-and-aws-lake-formation-for-access-control-with-amazon-emr/)。<a name="iceberg-with-lake-formation-spark-catalog-integration-lf-ec2"></a>

有关如何与 Iceberg 和 AWS Glue 数据目录集成以实现多目录层次结构的信息，请参阅[在 Glue 数据目录中配置 Spark 以访问多目录层次结构 AWS 。](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-multi-catalog.html#emr-lakehouse-using-spark-access)