

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

# 升级 AWS Lake Formation 模型AWS Glue的数据权限
<a name="upgrade-glue-lake-formation"></a>

AWS Lake Formation 权限可对数据湖中的数据进行精细的访问控制。您可以使用 Lake Formation 权限模型来管理亚马逊简单存储服务 (Amazon S3) 中的现有 AWS Glue Data Catalog 对象和数据位置。

Lake Formation 权限模型使用粗粒度 AWS Identity and Access Management (IAM) 权限访问 API 服务。Lake Formation 使用 [Lake Formation 中的数据筛选和单元格级别安全性](data-filtering.md) 功能限制用户及其应用程序在列、行和单元格级别的表访问权限。相比之下，AWS Glue 模型通过[基于身份和资源的 IAM 策略](https://docs.aws.amazon.com/glue/latest/dg/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies)授予数据访问权限。

要切换模型，请按照本指南中的步骤操作。

有关更多信息，请参阅 [Lake Formation 权限概述](lf-permissions-overview.md)。

## 关于默认权限
<a name="upgrade-glue-lake-formation-background"></a>

为了保持向后兼容AWS Glue，默认情况下，向该`IAMAllowedPrincipals`组 AWS Lake Formation 授予使用所有现有AWS Glue数据目录资源的`Super`权限，如果启用了 “**仅使用 IAM 访问控制**设置”，则向该组授予对新数据目录资源的`Super`权限。这实际上会导致对数据目录资源和 Amazon S3 位置的访问仅由 AWS Identity and Access Management (IAM) 策略控制。`IAMAllowedPrincipals` 组包括 IAM 策略允许访问数据目录对象的任何 IAM 用户和角色。`Super` 权限使主体能够对被授予该权限的数据库或表执行所有支持的 Lake Formation 操作。

您可以通过在 Lake Formation 中注册现有数据目录资源的位置或使用混合访问模式，开始使用 Lake Formation 来管理对数据的访问。当您在混合访问模式下注册 Amazon S3 位置时，您可以通过选择该位置下的数据库和表的主体来启用 Lake Formation 权限。

为了简化数据湖权限从 IAM 和 Amazon S3 模型向 Lake Formation 权限的过渡，我们建议您对数据目录使用混合访问模式。在混合访问模式下，您现在有了增量路径，允许您为一组特定的用户启用 Lake Formation 权限，而不会中断其他现有用户或工作负载。

有关更多信息，请参阅 [混合访问模式](hybrid-access-mode.md)。

禁用默认数据目录设置，只需一步即可将表的所有现有用户移至 Lake Formation。

要开始对现有 AWS Glue 数据目录数据库和表使用 Lake Formation 权限，您必须执行以下操作：

1. 确定用户具有的对每个数据库和表的现有 IAM 权限。

1. 在 Lake Formation 中复制这些权限。

1. 对于包含数据的每个 Amazon S3 位置：

   1. 撤销 `IAMAllowedPrincipals` 组对引用该位置的每个数据目录资源的 `Super` 权限。

   1. 向 Lake Formation 注册该位置。

1. 清理现有的精细访问控制 IAM 策略。

**重要**  
要在过渡数据目录的过程中添加新用户，您必须像之前一样在 IAM 中设置精细 AWS Glue 权限，还必须在 Lake Formation 中复制这些权限，如本部分所述。如果新用户具有本指南中所述的粗粒度 IAM 策略，则可以列出具有已向 `IAMAllowedPrincipals` 授予的 `Super` 权限的任何数据库或表。他们还可以查看这些资源的元数据。

按照本部分中的步骤升级为 Lake Formation 权限模型。

**Topics**
+ [关于默认权限](#upgrade-glue-lake-formation-background)
+ [步骤 1：列出用户和角色的现有权限](#upgrade-glue-lake-formation-step1)
+ [步骤 2：设置等效的 Lake Formation 权限](#upgrade-glue-lake-formation-step2)
+ [步骤 3：向用户授予 IAM 权限以使用 Lake Formation](#upgrade-glue-lake-formation-step3)
+ [步骤 4：将数据存储切换到 Lake Formation 权限模型](#upgrade-glue-lake-formation-step4)
+ [步骤 5：保护新的数据目录资源](#upgrade-glue-lake-formation-step5)
+ [步骤 6：向用户提供新的 IAM 策略，以便将来访问数据湖](#upgrade-glue-lake-formation-step6)
+ [步骤 7：清理现有 IAM 策略](#upgrade-glue-lake-formation-step7)

## 步骤 1：列出用户和角色的现有权限
<a name="upgrade-glue-lake-formation-step1"></a>

要开始对现有AWS Glue数据库和表使用 AWS Lake Formation 权限，必须先确定用户的现有权限。

**重要**  
在开始之前，请确保您已完成 [Lake Formation 入门](getting-started-setup.md)中的任务。

**Topics**
+ [使用 API 操作](#upgrade-glue-lake-formation-step1-api)
+ [使用 AWS 管理控制台](#upgrade-glue-lake-formation-step1-console)
+ [使用 AWS CloudTrail](#upgrade-glue-lake-formation-step1-ct)

### 使用 API 操作
<a name="upgrade-glue-lake-formation-step1-api"></a>

使用 AWS Identity and Access Management (IAM) [ListPoliciesGrantingServiceAccess](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPoliciesGrantingServiceAccess.html)API 操作来确定附加到每个委托人（用户或角色）的 IAM 策略。根据结果中返回的策略，您可以确定授予主体的 IAM 权限。您必须分别为每个主体调用该 API。

**Example**  
以下 AWS CLI 示例返回附加到用户的策略`glue_user1`。  

```
aws iam list-policies-granting-service-access --arn arn:aws:iam::111122223333:user/glue_user1 --service-namespaces glue
```
该命令返回类似于以下内容的结果。  

```
{
    "PoliciesGrantingServiceAccess": [
        {
            "ServiceNamespace": "glue",
            "Policies": [
                {
                    "PolicyType": "INLINE",
                    "PolicyName": "GlueUserBasic",
                    "EntityName": "glue_user1",
                    "EntityType": "USER"
                },
                {
                    "PolicyType": "MANAGED",
                    "PolicyArn": "arn:aws:iam::aws:policy/AmazonAthenaFullAccess",
                    "PolicyName": "AmazonAthenaFullAccess"
                }
            ]
        }
    ],
    "IsTruncated": false
}
```

### 使用 AWS 管理控制台
<a name="upgrade-glue-lake-formation-step1-console"></a>

您还可以在 AWS Identity and Access Management (IAM) 控制台的用户或角色**摘要**页面的 A **ccess Advisor** 选项卡中查看以下信息：

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**用户**或**角色**。

1. 在列表中选择一个名称以打开其**摘要**页面，然后选择**访问顾问**选项卡。

1.  检查每个策略以确定每个用户有权访问的数据库、表和操作的组合。

   请记住，在此过程中，除了检查用户之外，还要检查角色，因为数据处理作业可能会代入访问数据的角色。

### 使用 AWS CloudTrail
<a name="upgrade-glue-lake-formation-step1-ct"></a>

确定现有权限的另一种方法是查看日志`additionaleventdata`字段包含`insufficientLakeFormationPermissions`条目的 AWS Glue API 调用。 AWS CloudTrail 此条目列出了用户需要对其具有 Lake Formation 权限才能执行相同操作的数据库和表。

这些是数据访问日志，因此不能保证它们会生成用户及其权限的完整列表。我们建议选择较宽的时间范围来捕获大多数用户的数据访问模式，例如几周或几个月。

有关更多信息，请参阅《*AWS CloudTrail 用户指南》*中的[使用 CloudTrail 事件历史记录查看事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

接下来，您可以设置 Lake Formation 权限以匹配 AWS Glue 权限。请参阅[步骤 2：设置等效的 Lake Formation 权限](#upgrade-glue-lake-formation-step2)。

## 步骤 2：设置等效的 Lake Formation 权限
<a name="upgrade-glue-lake-formation-step2"></a>

使用中收集的信息[步骤 1：列出用户和角色的现有权限](#upgrade-glue-lake-formation-step1)，授予与 AWS Lake Formation 权限相匹配的AWS Glue权限。使用以下任一方法进行授予：
+ 使用 Lake Formation 控制台或 AWS CLI。

  请参阅[授予对数据目录资源的权限](granting-catalog-permissions.md)。
+ 使用 `GrantPermissions` 和 `BatchGrantPermissions` API 操作。

  请参阅[权限 API混合访问模式 API](aws-lake-formation-api-aws-lake-formation-api-permissions.md)。

有关更多信息，请参阅 [Lake Formation 权限概述](lf-permissions-overview.md)。

设置 Lake Formation 权限后，继续执行[步骤 3：向用户授予 IAM 权限以使用 Lake Formation](#upgrade-glue-lake-formation-step3)。

## 步骤 3：向用户授予 IAM 权限以使用 Lake Formation
<a name="upgrade-glue-lake-formation-step3"></a>

要使用 AWS Lake Formation 权限模型，委托人必须拥有 Lake Formation 上的 AWS Identity and Access Management (IAM) 权限。 APIs

在 IAM 中创建以下策略，并将其附加到需要访问您的数据湖的每个用户。将该策略命名为 `LakeFormationDataAccess`。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "LakeFormationDataAccess",
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess"
            ],
            "Resource": "*"
        }
    ]
}
```

------

接下来，升级为 Lake Formation 权限，一次升级一个数据位置。请参阅[步骤 4：将数据存储切换到 Lake Formation 权限模型](#upgrade-glue-lake-formation-step4)。

## 步骤 4：将数据存储切换到 Lake Formation 权限模型
<a name="upgrade-glue-lake-formation-step4"></a>

升级为 Lake Formation 权限，一次升级一个数据位置。为此，请重复整个部分，直到您注册了数据目录引用的所有 Amazon Simple Storage Service (Amazon S3) 路径。

**Topics**
+ [验证 Lake Formation 权限](#identify-catalog-resources)
+ [保护现有数据目录资源](#upgrade-secure-resources)
+ [为您的 Amazon S3 位置启用 Lake Formation 权限](#upgrade-glue-lake-formation-turn-on-permissions)

### 验证 Lake Formation 权限
<a name="identify-catalog-resources"></a>

在注册位置之前，请执行验证步骤，以确保正确的主体具有所需的 Lake Formation 权限，并且不会向不应具有 Lake Formation 权限的主体授予任何这些权限。使用 Lake Formation `GetEffectivePermissionsForPath` API 操作，标识引用 Amazon S3 位置的数据目录资源，以及对这些资源具有权限的主体。

以下 AWS CLI 示例返回引用 Amazon S3 存储桶的数据目录数据库和表`products`。

```
aws lakeformation get-effective-permissions-for-path --resource-arn arn:aws:s3:::products --profile datalake_admin
```

请注意 `profile` 选项。我们建议您以数据湖管理员身份运行该命令。

以下是返回结果的摘录。

```
{
        "PermissionsWithGrantOption": [
            "SELECT"
        ],
        "Resource": {
            "TableWithColumns": {
                "Name": "inventory_product",
                "ColumnWildcard": {},
                "DatabaseName": "inventory"
            }
        },
        "Permissions": [
            "SELECT"
        ],
        "Principal": {
            "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1",
            "DataLakePrincipalType": "IAM_USER"
        }
 },...
```

**重要**  
如果您的 AWS Glue 数据目录已加密，则 `GetEffectivePermissionsForPath` 仅返回在 Lake Formation 正式发布后创建或修改的数据库和表。

### 保护现有数据目录资源
<a name="upgrade-secure-resources"></a>

接下来，撤销 `IAMAllowedPrincipals` 对您为该位置标识的每个表和数据库具有的 `Super` 权限。

**警告**  
如果您实施自动化功能来在数据目录中创建数据库和表，则以下步骤可能会导致自动化和下游提取、转换和加载 (ETL) 作业失败。只有在修改现有流程或向所需主体授予显式 Lake Formation 权限后，才能继续操作。有关 Lake Formation 权限的信息，请参阅 [Lake Formation 权限参考](lf-permissions-reference.md)。

**撤销 `IAMAllowedPrincipals` 对表具有的 `Super` 权限**

1. 打开 AWS Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以数据湖管理员身份登录。

1. 在导航窗格中，选择**表**。

1. 在**表**页面上，选中所需表旁边的单选按钮。

1. 在**操作**菜单上，选择**撤销**。

1. 在 “**撤消权限**” 对话框的 **IAM 用户和角色**列表中，向下滚动到 “**组**” 标题，然后选择 “**IAMAllowed委托人**”。

1. 在**表权限**下，确保选中 **Super** 权限，然后选择**撤销**。

**撤销 `IAMAllowedPrincipals` 对数据库具有的 `Super` 权限**

1. 打开 AWS Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以数据湖管理员身份登录。

1. 在导航窗格中，选择**数据库**。

1. 在**数据库**页面上，选中所需数据库旁边的单选按钮。

1. 在**操作** 菜单上，选择**编辑**。

1. 在**编辑数据库**页面上，清除**仅对此数据库中的新表使用 IAM 访问控制**，然后选择**保存**。

1. 返回**数据库**页面，确保数据库仍处于选中状态，然后在**操作**菜单上选择**撤销**。

1. 在 “**撤消权限**” 对话框的 **IAM 用户和角色**列表中，向下滚动到 “**组**” 标题，然后选择 “**IAMAllowed委托人**”。

1. 在**数据库权限**下，确保选中 **Super** 权限，然后选择**撤销**。

### 为您的 Amazon S3 位置启用 Lake Formation 权限
<a name="upgrade-glue-lake-formation-turn-on-permissions"></a>

接下来，向 Lake Formation 注册 Amazon S3 位置。为此，您可以使用[向数据湖添加 Amazon S3 位置](register-data-lake.md)中所述的过程。或者，使用 `RegisterResource` API 操作，如[凭证售卖 API](aws-lake-formation-api-credential-vending.md) 中所述。

**注意**  
如果注册了父位置，则无需注册子位置。

完成这些步骤并测试用户是否可以访问其数据后，您即已成功升级为 Lake Formation 权限。继续执行下一步：[步骤 5：保护新的数据目录资源](#upgrade-glue-lake-formation-step5)。

## 步骤 5：保护新的数据目录资源
<a name="upgrade-glue-lake-formation-step5"></a>

接下来，通过更改默认数据目录设置来保护所有新的数据目录资源。关闭仅对新数据库和表使用 AWS Identity and Access Management (IAM) 访问控制的选项。

**警告**  
如果您实施自动化功能来在数据目录中创建数据库和表，则以下步骤可能会导致自动化和下游提取、转换、加载 (ETL) 作业失败。只有在修改现有流程或向所需主体授予显式 Lake Formation 权限后，才能继续操作。有关 Lake Formation 权限的信息，请参阅 [Lake Formation 权限参考](lf-permissions-reference.md)。

**更改默认数据目录设置**

1. 打开 AWS Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。以 IAM 管理用户（用户`Administrator`或其他拥有`AdministratorAccess` AWS 托管策略的用户）身份登录。

1. 在导航窗格中，选择**设置**。

1. 在**数据目录设置**页面上，清除这两个复选框，然后选择**保存**。

下一步是向用户授予将来访问其他数据库或表的权限。请参阅[步骤 6：向用户提供新的 IAM 策略，以便将来访问数据湖](#upgrade-glue-lake-formation-step6)。

## 步骤 6：向用户提供新的 IAM 策略，以便将来访问数据湖
<a name="upgrade-glue-lake-formation-step6"></a>

要向您的用户授予将来访问其他 Data Catalog 数据库或表的权限，您必须向他们提供随后的粗粒度 AWS Identity and Access Management (IAM) 内联策略。将该策略命名为 `GlueFullReadAccess`。

**重要**  
如果您在撤销 `IAMAllowedPrincipals` 对您的数据目录中每个数据库和表具有的 `Super` 权限之前将此策略附加到用户，则该用户可以查看向 `IAMAllowedPrincipals` 授予对其的 `Super` 权限的任何资源的所有元数据。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GlueFullReadAccess",
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess",
                "glue:GetTable",
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:GetPartitions"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**注意**  
本步骤和前面步骤中指定的内联策略包含最低 IAM 权限。有关数据湖管理员、数据分析师和其他角色的建议策略，请参阅 [Lake Formation 角色和 IAM 权限参考](permissions-reference.md)。

接下来继续执行[步骤 7：清理现有 IAM 策略](#upgrade-glue-lake-formation-step7)。

## 步骤 7：清理现有 IAM 策略
<a name="upgrade-glue-lake-formation-step7"></a>

设置 AWS Lake Formation 权限并创建并附加粗粒度访问控制 AWS Identity and Access Management (IAM) 策略后，完成以下最后一步：
+ 从用户、组和角色中移除您在 Lake Formation 中复制的旧的[精细访问控制](https://docs.aws.amazon.com/glue/latest/dg/using-identity-based-policies.html#glue-identity-based-policy-limitations.html) IAM 策略。

这样，您可以确保这些主体不再能够直接访问 Amazon Simple Storage Service (Amazon S3) 中的数据。然后，您可以完全通过 Lake Formation 管理这些主体的数据湖访问权限。