

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

# 设置 AWS Lake Formation
<a name="initial-lf-config"></a>

 以下各节提供有关首次设置 Lake Formation 的信息。要开始使用 Lake Formation，并非本节中的所有主题都是必须学习的。您可以按照说明设置 Lake Formation 权限模型，以管理您在亚马逊简单存储服务 (Amazon S3) Simple S3 中的现有 AWS Glue Data Catalog 对象和数据位置。

1. [创建数据湖管理员](#create-data-lake-admin)

1. [更改默认权限模式或使用混合访问模式](#setup-change-cat-settings)

1. [为您的数据湖配置 Amazon S3 位置](#register-s3-location)

1. [为 Lake Formation 用户分配权限](#permissions-lf-principal)

1. [集成 IAM Identity Center](identity-center-integration.md)

1. [（可选）外部数据筛选设置](#external-data-filter)

1. [（可选）授予对数据目录加密密钥的访问权限](#setup-encrypted-catalog)

1. [（可选）为工作流创建 IAM 角色](#iam-create-blueprint-role)

本节将介绍如何通过两种不同的方式设置 Lake Formation 资源：
+ 使用 AWS CloudFormation 模板
+ 使用 Lake Formation 控制台

要使用 AWS 控制台设置 Lake Formation，请转至[创建数据湖管理员](#create-data-lake-admin)。

## 使用 CloudFormation 模板设置 Lake Formation 资源
<a name="lf-setup-cfn"></a>
**注意**  
 CloudFormation 堆栈执行上述步骤 1 到 6，但步骤 2 和 5 除外。从 Lake Formation 控制台手动执行 [更改默认权限模式或使用混合访问模式](#setup-change-cat-settings) 和 [集成 IAM Identity Center](identity-center-integration.md)。

1. 在美国东部（弗吉尼亚北部）地区以 IAM 管理员的身份登录 AWS CloudFormation 控制台，网址为 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 选择[启动堆栈](https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?templateURL=https://lf-public.s3.amazonaws.com/cfn/SettingUpLf.yaml)。

1. 在**创建堆栈**屏幕上，选择**下一步**。

1. 输入**堆栈名称**。

1. 对于**DatalakeAdminName**和 **DatalakeAdminPassword**，请输入您的数据湖管理员用户的用户名和密码。

1. 对于 **DatalakeUser1Name** 和 **DatalakeUser1Passwor** d，输入您的数据湖分析师用户的用户名和密码。

1. 对于 **DataLakeBucketName**，输入要创建的新存储桶名称。

1. 选择**下一步**。

1. 在下一页上，选择 `I acknowledge that CloudFormation might create IAM resources with custom names`，然后选择**下一步**。

1. 查看最后一页上的详细信息，然后选择**我确认这 AWS CloudFormation 可能会创建 IAM 资源。**

1. 选择**创建**。

   堆栈创建过程可能需要几分钟时间才能完成。

**清理 资源**

如果你想清理堆 CloudFormation 栈资源，请执行以下操作：

1. 取消注册您的堆栈创建并注册为数据湖位置的 Amazon S3 存储桶。

1. 删除 CloudFormation 堆栈。这将删除堆栈创建的所有资源。

## 创建数据湖管理员
<a name="create-data-lake-admin"></a>

数据湖管理员最初是唯一可以向任何委托人 AWS Identity and Access Management （包括自己）授予 Lake Formation 数据位置和数据目录资源的权限的 (IAM) 用户或角色。有关数据湖管理员功能的信息，请参阅[隐式 Lake Formation 权限](implicit-permissions.md)。默认情况下，Lake Formation 允许您最多创建 30 个数据湖管理员。

您可以使用 Lake Formation 控制台或 Lake Formation API 的 `PutDataLakeSettings` 操作来创建数据湖管理员。

创建数据湖管理员需要以下权限。`Administrator` 用户隐式拥有这些权限。
+ `lakeformation:PutDataLakeSettings`
+ `lakeformation:GetDataLakeSettings`

如果您向用户授予 `AWSLakeFormationDataAdmin` 策略，则该用户将无法创建其他 Lake Formation 管理员用户。

**创建数据湖管理员（控制台）**

1. 如果要成为数据湖管理员的用户尚不存在，请使用 IAM 控制台创建该用户。或者，请选择现有用户来担任数据湖管理员。
**注意**  
我们建议您不要选择 IAM 管理用户（拥有`AdministratorAccess` AWS 托管策略的用户）作为数据湖管理员。

   将以下 AWS 托管策略附加到用户：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/initial-lf-config.html)

1. 附加以下内联策略，该策略向数据湖管理员授予创建 Lake Formation 服务相关角色的权限。建议将该策略命名为 `LakeFormationSLR`。

   服务相关角色使数据湖管理员能够更轻松地在 Lake Formation 中注册 Amazon S3 位置。有关 Lake Formation 服务相关角色的更多信息，请参阅[在 Lake Formation 中使用服务相关角色](service-linked-roles.md)。
**重要**  
在以下所有政策中，请*<account-id>*替换为有效的 AWS 账号。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:CreateServiceLinkedRole",
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "iam:AWSServiceName": "lakeformation.amazonaws.com"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iam:PutRolePolicy"
               ],
               "Resource": "arn:aws:iam::<account-id>:role/aws-service-role/lakeformation.amazonaws.com/AWSServiceRoleForLakeFormationDataAccess"
           }
       ]
   }
   ```

1. （可选）将下面的 `PassRole` 内联策略附加到用户。此策略使数据湖管理员能够创建和运行工作流。`iam:PassRole` 权限使工作流能够担任创建爬网程序和作业的角色 `LakeFormationWorkflowRole`，并将该角色附加到所创建的爬网程序和作业。建议将该策略命名为 `UserPassRole`。
**重要**  
*<account-id>*替换为有效的 AWS 账号。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "PassRolePermissions",
               "Effect": "Allow",
               "Action": [
                   "iam:PassRole"
               ],
               "Resource": [
                   "arn:aws:iam::111122223333:role/LakeFormationWorkflowRole"
               ]
           }
       ]
   }
   ```

------

1. （可选）如果您的账户将授予或接收跨账户 Lake Formation 权限，请附加此额外内联策略。此策略使数据湖管理员能够查看和接受 AWS Resource Access Manager (AWS RAM) 资源共享邀请。此外，对于 AWS Organizations 管理账户中的数据湖管理员，该策略还包括向组织启用跨账户授予的权限。有关更多信息，请参阅 [Lake Formation 中的跨账户数据共享](cross-account-permissions.md)。

    建议将该策略命名为 `RAMAccess`。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ram:AcceptResourceShareInvitation",
                   "ram:RejectResourceShareInvitation",
                   "ec2:DescribeAvailabilityZones",
                   "ram:EnableSharingWithAwsOrganization"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 打开 AWS Lake Formation 控制台，[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)并以您在中创建的管理员用户[创建具有管理访问权限的用户](getting-started-setup.md#create-an-admin)或具有用户 AWS 托管策略的`AdministratorAccess`用户身份登录。

1. 如果显示**欢迎使用 Lake Formation** 窗口，请选择您在第 1 步创建或选择的 IAM 用户，然后选择**开始使用**。

1. 如果没有看到**欢迎使用 Lake Formation** ‬窗口，请执行以下步骤来配置 Lake Formation 管理员。

   1. 在导航窗格中的**管理**下，选择**管理角色和任务**。在控制台页面的**数据湖管理员**部分，选择**添加**。

   1. 在**添加管理员**对话框中的“访问类型”下，选择**数据湖管理员**。

   1. 对于 **IAM 用户和角色**，选择您在第 1 步创建或选择的 IAM 用户，然后选择**保存**。

## 更改默认权限模式或使用混合访问模式
<a name="setup-change-cat-settings"></a>

Lake Formation 一开始就启用了 “仅使用 IAM 访问控制” 设置，以便与现有 AWS Glue Data Catalog 行为兼容。此设置使您可以通过 IAM 策略和 Amazon S3 存储桶策略管理对数据湖中数据及其元数据的访问。

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

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

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

**重要**  
如果您已有 AWS Glue Data Catalog 数据库和表，请不要按照本节中的说明执行操作。而是应按照[升级 AWS Lake Formation 模型AWS Glue的数据权限](upgrade-glue-lake-formation.md)中的说明操作。

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

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

1. 在 Lake Formation 控制台中继续操作，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。确保您以在中创建的管理员用户[创建具有管理访问权限的用户](getting-started-setup.md#create-an-admin)或使用`AdministratorAccess` AWS 托管策略的用户身份登录。

1. 修改数据目录设置：

   1. 在导航窗格中的**管理**下，选择**数据目录设置**。

   1. 清除两个复选框，然后选择**保存**。  
![\[“数据目录设置”对话框的副标题为“对新创建的数据库和表的默认权限”，并且含有两个复选框（如文本中所述）。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/settings-page.png)

1. 撤销数据库创建者的 `IAMAllowedPrincipals` 权限。

   1. 在导航窗格中的**管理**下，选择**管理角色和任务**。

   1. 在**管理角色和任务**控制台页面的**数据库创建者**部分，选择 `IAMAllowedPrincipals` 组，然后选择**撤销**。

      此时将出现**撤销权限**对话框，其中显示 `IAMAllowedPrincipals` 拥有**创建数据库**权限。

   1. 选择**撤销**。

## 为 Lake Formation 用户分配权限
<a name="permissions-lf-principal"></a>

创建用户以访问中的数据湖 AWS Lake Formation。此用户拥有查询数据湖的最低权限。

有关创建用户或组的更多信息，请参阅《IAM 用户指南》中的 [IAM 身份](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。

**向非管理员用户附加用于访问 Lake Formation 数据的权限**

1. 在打开 IAM 控制台，[https://console.aws.amazon.com/iam](https://console.aws.amazon.com/iam)并以您在中创建的管理员用户[创建具有管理访问权限的用户](getting-started-setup.md#create-an-admin)或使用`AdministratorAccess` AWS 托管策略的用户身份登录。

1. 选择**用户**或**用户组**。

1. 在列表中，请选择要在其中嵌入策略的用户或组的名称。

   选择**权限**。

1. 选择**添加权限**，然后选择**直接附加策略**。在**筛选策略**文本字段中输入 `Athena`。在结果列表中，选中 `AmazonAthenaFullAccess` 的复选框。

1. 选择**创建策略**按钮。在**创建策略**页面上，选择 **JSON** 选项卡。复制以下策略并将其粘贴到策略编辑器中。

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

****  

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

------

1. 选择底部的**下一步**按钮，直到看到**查看策略**页面。输入策略名称，例如 `DatalakeUserBasic`。选择**创建策略**，然后关闭**策略**选项卡或浏览器窗口。

## 为您的数据湖配置 Amazon S3 位置
<a name="register-s3-location"></a>

要使用 Lake Formation 管理和保护数据湖中的数据，您必须先注册一个 Amazon S3 位置。注册位置时，会注册 Amazon S3 路径和该路径下的所有文件夹，这使 Lake Formation 能够强制实施存储级别权限。当用户从 Amazon Athena 等集成引擎请求数据时，Lake Formation 会提供数据访问权限，而不是使用用户权限。

注册营业地点时，您需要指定一个 IAM 角色来授予该营业地点的 read/write 权限。Lake Formation 在向请求访问已注册的 Amazon S3 位置的数据的集成 AWS 服务提供临时证书时担任该角色。您可以指定 Lake Formation 服务相关角色 (SLR) 或创建自己的角色。

在以下情况下使用自定义角色：
+ 您计划在 Amazon CloudWatch 日志中发布指标。除了 SLR 权限外，用户定义的角色还必须包括用于在 CloudWatch 日志中添加日志和发布指标的策略。有关授予必要 CloudWatch 权限的内联策略示例，请参阅[用于注册位置的角色的要求](registration-role.md)。
+ Amazon S3 位置位于其他账户中。有关更多信息，请参阅 [在另一个 AWS 账户中注册 Amazon S3 营业地点](register-cross-account.md)。
+ Amazon S3 位置包含使用 AWS 托管式密钥加密的数据。有关详细信息，请参阅 [注册加密的 Amazon S3 位置](register-encrypted.md) 和 [跨 AWS 账户注册加密的 Amazon S3 位置](register-cross-encrypted.md)。
+ 您计划使用 Amazon EMR 访问 Amazon S3 位置。有关角色要求的更多信息，请参阅《Amazon EMR 管理指南》中的[适用于 Lake Formation 的 IAM 角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-lf-iam-role.html)**。

所选角色必须具有必需的权限，如[用于注册位置的角色的要求](registration-role.md)中所述。有关如何注册 Amazon S3 位置的说明，请参阅[向数据湖添加 Amazon S3 位置](register-data-lake.md)。

## （可选）外部数据筛选设置
<a name="external-data-filter"></a>

如果您打算使用第三方查询引擎分析和处理数据湖中的数据，则必须选择允许外部引擎访问由 Lake Formation 管理的数据。如果您不选择，则外部引擎将无法访问已在 Lake Formation 中注册的 Amazon S3 位置处的数据。

Lake Formation 支持使用列级别权限来限制对表中特定列的访问。诸如 Amazon Athena Amazon Redshift Spectrum 和 Amazon EMR 之类的集成分析服务可从中检索未经过筛选的表格元数据。 AWS Glue Data Catalog集成服务负责对查询响应中的列进行实际筛选。第三方管理员负责妥善处理权限，以免有人未经授权便访问数据。

**选择允许第三方引擎访问和筛选数据（控制台）**

1. 在 Lake Formation 控制台中继续操作，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。确保您以拥有对 Lake Formation `PutDataLakeSettings` API 操作的 IAM 权限的主体身份登录。您在 [注册获取 AWS 账户](getting-started-setup.md#sign-up-for-aws) 中创建的 IAM 管理员用户拥有此权限。

1. 在导航窗格中的**管理**下，选择**应用程序集成设置**。

1. 在**应用程序集成设置**页面上，执行以下操作：

   1. 选中**允许外部引擎筛选在 Lake Formation 中注册的 Amazon S3 位置处的数据**复选框。

   1.  输入为第三方引擎定义的**会话标签值**。

   1. 对于**AWS 账户 IDs**，请输入允许第三方引擎访问在 Lake Formation 注册的地点的账户 IDs 。在输入每个账户 ID 之后按 **Enter** 键。

   1. 选择**保存**。

 要允许外部引擎在不进行会话标签验证的情况下访问数据，请参阅[集成应用程序以获取完整表访问权限](full-table-credential-vending.md) 

## （可选）授予对数据目录加密密钥的访问权限
<a name="setup-encrypted-catalog"></a>

如果已加密， AWS Glue Data Catalog 则向需要授予 Lake Formation 数据目录数据库和表权限的所有委托人授予 AWS KMS 密钥的 AWS Identity and Access Management (IAM) 权限。

有关更多信息，请参见*AWS Key Management Service 开发人员指南*。

## （可选）为工作流创建 IAM 角色
<a name="iam-create-blueprint-role"></a>

借 AWS Lake Formation助，您可以使用 AWS Glue 抓取工具执行*的工作流程*导入数据。工作流定义数据来源和计划以将数据导入到数据湖中。您可以使用 Lake Formation 提供的*蓝图*或模板轻松定义工作流。

创建工作流程时，必须为其分配一个 AWS Identity and Access Management (IAM) 角色，该角色向 Lake Formation 授予采集数据的必要权限。

以下过程假定您熟悉 IAM。

**为工作流创建 IAM 角色**

1. 在打开 IAM 控制台，[https://console.aws.amazon.com/iam](https://console.aws.amazon.com/iam)并以您在中创建的管理员用户[创建具有管理访问权限的用户](getting-started-setup.md#create-an-admin)或使用`AdministratorAccess` AWS 托管策略的用户身份登录。

1. 在导航窗格中，选择**角色**，然后选择**创建角色**。

1. 在**创建角色**页面上，选择 **AWS 服务**，然后选择 **Glue**。选择**下一步**。

1. 在**添加权限**页面上，搜索**AWSGlueServiceRole**托管策略，然后选中列表中策略名称旁边的复选框。然后完成**创建角色**向导，命名角色 `LFWorkflowRole`。要完成操作，请选择**创建角色**。

1. 回到**角色**页面上，搜索 `LFWorkflowRole`，然后选择角色名称。

1. 在**角色摘要**页面上的**权限**选项卡下，选择**添加内联策略**。在**创建策略**屏幕上，导航到 JSON 选项卡，然后添加以下内联策略。建议将该策略命名为 `LakeFormationWorkflow`。
**重要**  
在以下策略中，*<account-id>*替换为有效的 AWS 账户 数字。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                    "lakeformation:GetDataAccess",
                    "lakeformation:GrantPermissions"
                ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": ["iam:PassRole"],
               "Resource": [
                   "arn:aws:iam::111122223333:role/LakeFormationWorkflowRole"
               ]
           }
       ]
   }
   ```

------

   以下是关于该策略中权限的简要描述：
   + `lakeformation:GetDataAccess` 使工作流创建的作业能够向目标位置写入数据。
   + `lakeformation:GrantPermissions` 使工作流能够授予对目标表的 `SELECT` 权限。
   + `iam:PassRole` 使服务能够担任创建爬网程序和作业（工作流实例）的角色 `LakeFormationWorkflowRole`，并将该角色附加到所创建的爬网程序和作业。

1. 验证角色 `LakeFormationWorkflowRole` 是否附加了两个策略。

1. 如果您要摄取数据湖位置之外的数据，请添加用于授予来源数据读取权限的内联策略。