

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

透過 Amazon EMR 6.15.0 及更高版本，當您在存取 Glue Data Catalog 中資料的 EC2 叢集上執行 Amazon EMR 上的 Spark AWS 任務時，您可以使用 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>}
           }
       }
   }
   ```

   以下範例說明如何使用 zip 檔案搭配 Amazon S3 中的憑證進行憑證組態：
   + 使用 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 帳戶 ID。

## 步驟 4：設定 Amazon EMR 執行期角色的 AWS Glue 和 Lake Formation 授權
<a name="emr-lf-trust-policy"></a>

若要使用 Amazon EMR 執行期角色繼續設定 Lake Formation 型存取控制，您必須為 Amazon EMR 執行期角色設定 AWS Glue 和 Lake Formation 授予。若要允許您的 IAM 執行期角色與 Lake Formation 互動，請使用 `lakeformation:GetDataAccess` 和 `glue:Get*` 授予它們存取權。

Lake Formation 許可控制對 AWS Glue Data Catalog 資源、Amazon S3 位置和這些位置基礎資料的存取。IAM 許可控制對 Lake Formation 和 AWS Glue APIs存取。雖然您可能具有 Lake Formation 許可來存取資料型錄 (SELECT) 中的資料表，但是如果您沒有 `glue:Get*` API 的 IAM 許可，您的操作會失敗。如需有關 Lake Formation 存取控制的更多詳細資訊，請參閱 [Lake Formation 存取控制概觀](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-overview.html)。

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 政策。

   ```
   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"
       ]
 }
```

如需詳細的端對端範例，請參閱 [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 Data Catalog 的資訊，請參閱[設定 Spark 以存取 AWS Glue Data Catalog 中的多目錄階層](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-multi-catalog.html#emr-lakehouse-using-spark-access)。