

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

# 使用 Lake Formation 基于标签的访问控制和命名资源共享数据湖
<a name="share-dl-tbac-tutorial"></a>

本教程演示 AWS Lake Formation 如何配置为安全地与多个公司、组织或业务部门共享存储在数据湖中的数据，而不必复制整个数据库。 AWS 账户 通过使用 Lake Formation 跨账户访问控制，有两个选项可以与其他人共享您的数据库和表：
+ **Lake Formation 基于标签的访问控制（推荐）**

  Lake Formation 基于标签的访问控制是一种授权策略，它根据属性来定义权限。在 Lake Formation 中，这些属性被称为 *LF 标签*。有关详细信息，请参考 [使用 Lake Formation 基于标签的访问控制管理数据湖](managing-dl-tutorial.md)。
+ **Lake Formation 命名资源**

  Lake Formation 命名资源方法是一种授权策略，它定义对资源的权限。资源包括数据库、表和列。数据湖管理员可以分配和撤销对 Lake Formation 资源的权限。有关详细信息，请参考 [Lake Formation 中的跨账户数据共享](cross-account-permissions.md)。

  如果数据湖管理员喜欢显式授予对单个资源的权限，我们建议使用命名资源。当您使用命名资源方法向外部账户授予 Lake Formation 对数据目录资源的权限时，Lake Formation 使用 AWS Resource Access Manager (AWS RAM) 来共享该资源。

**Topics**
+ [目标受众](#tut-share-tbac-roles)
+ [在制作者账户中配置 Lake Formation 数据目录设置](#tut-share-tbac-LF-settings)
+ [第 1 步：使用 AWS CloudFormation 模板配置资源](#tut-tbac-share-provision-resources)
+ [第 2 步：Lake Formation 跨账户共享先决条件](#cross-account-share-prerequisistes)
+ [第 3 步：使用基于标签的访问控制方法执行跨账户共享](#tut-share-tbac-method)
+ [第 4 步：实施命名资源方法](#tut-named-resource-method)
+ [步骤 5：清理 AWS 资源](#share-tbac-clean-up-db)

## 目标受众
<a name="tut-share-tbac-roles"></a>



本教程适用于数据管家、数据工程师和数据分析师。在共享来自 Lake Formation 的数据目录表 AWS Glue 和在 Lake Formation 中管理权限时，生产账户中的数据管理员根据其支持的功能拥有功能所有权，并且可以向各种使用者、外部组织和账户授予访问权限。下表列出了本教程中使用的角色：


|  角色 | 说明 | 
| --- | --- | 
| DataLakeAdminProducer | 数据湖管理员 IAM 用户具有以下访问权限：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/share-dl-tbac-tutorial.html) | 
| DataLakeAdminConsumer |  数据湖管理员 IAM 用户具有以下访问权限： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/share-dl-tbac-tutorial.html)  | 
| DataAnalyst |  DataAnalyst 用户具有以下访问权限：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/share-dl-tbac-tutorial.html) | 

## 在制作者账户中配置 Lake Formation 数据目录设置
<a name="tut-share-tbac-LF-settings"></a>

在开始本教程之前，你必须有一个 AWS 账户 可以用来以具有正确权限的管理用户身份登录的。有关更多信息，请参阅 [完成初始 AWS 配置任务](getting-started-setup.md#initial-aws-signup)。

本教程假定您熟悉 IAM。有关 IAM 的信息，请参阅 [IAM 用户指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。

**在制作者账户中配置 Lake Formation 数据目录设置**
**注意**  
 在本教程中，拥有源表的账户称为制作者账户，需要访问源表的账户称为使用者账户。

Lake Formation 提供了自己的权限管理模型。为了保持与 IAM 权限模型的向后兼容性，默认情况下会向该群组授予`IAMAllowedPrincipals`对所有现有 AWS Glue Data Catalog 资源的`Super`权限。此外，还为新的数据目录资源启用了**仅使用 IAM 访问控制设置**。本教程利用 Lake Formation 权限来使用细粒度访问控制，并使用 IAM 策略进行粗粒度访问控制。有关详细信息，请参阅 [精细访问控制的方法](access-control-fine-grained.md)。因此，在使用 AWS CloudFormation 模板进行快速设置之前，需要在制作者账户中更改 Lake Formation 数据目录设置。
**重要**  
此设置会影响所有新创建的数据库和表，因此我们强烈建议使用非生产账户或新账户完成本教程。此外，如果您使用的是共享账户（例如贵公司的开发账户），请确保它不会影响其他资源。如果您希望保留默认安全设置，则在与其他账户共享资源时必须完成一个额外步骤，即撤销 `IAMAllowedPrincipals` 对数据库或表的默认 **Super** 权限。我们会在本教程的后面部分中讨论详细信息。

要在制作者账户中配置 Lake Formation 数据目录设置，请完成以下步骤：

1. 以管理员用户或具有 Lake Formation `PutDataLakeSettings` API 权限的用户身份 AWS 管理控制台 使用制作人账户登录。

1. 在 Lake Formation 控制台的导航窗格中，在**数据目录**下选择**设置**。

1. 取消选择**仅对新数据库使用 IAM 访问控制**和**仅对新数据库中的新表使用 IAM 访问控制**

   选择**保存**。  
![\[Data catalog settings interface for AWS Lake Formation with permission options.\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/tbac-tut-settings.jpg)

   此外，您可以在**管理角色和任务**的**数据库创建者**下删除 `IAMAllowedPrincipals` 的 `CREATE_DATABASE` 权限。只有这样，您才能通过 Lake Formation 权限控制谁可以创建新数据库。

## 第 1 步：使用 AWS CloudFormation 模板配置资源
<a name="tut-tbac-share-provision-resources"></a>

制作者账户的 CloudFormation 模板生成以下资源：
+ 要用作数据湖的 Amazon S3 存储桶。
+ 一个 Lambda 函数（用于 Lambda 支持的自定义资源 CloudFormation ）。我们使用该函数将示例数据文件从公共 Amazon S3 存储桶复制到您的 Amazon S3 存储桶中。
+ IAM 用户和策略: DataLakeAdminProducer.
+ 适当的 Lake Formation 设置和权限，包括：
  + 在制作者账户中定义 Lake Formation 数据湖管理员
  + 将 Amazon S3 存储桶注册为 Lake Formation 数据湖位置（制作者账户）
+  AWS Glue Data Catalog 数据库、表和分区。由于有两种共享资源的选项 AWS 账户，因此此模板创建了两组独立的数据库和表。

消费者账户的 CloudFormation 模板生成以下资源：
+ IAM 用户和策略：
  + DataLakeAdminConsumer
  + DataAnalyst
+ 一个 AWS Glue Data Catalog 数据库。此数据库用于创建指向共享资源的资源链接。

**在制作者账户中创建您的资源**

1. 在美国东部（弗吉尼亚北部）区域的 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 登录 AWS CloudFormation 控制台。

1. 选择[启动堆栈](https://aws-bigdata-blog.s3.amazonaws.com/artifacts/Securely_sharing_data_across_AWS_accounts_using_AWS_Lake_Formation/lakeformation_tutorial_cross_account_producer.yaml)。

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

1. 对于**堆栈名称**，为堆栈输入名称，如 `stack-producer`。

1.  在**用户配置**部分，输入 `ProducerDatalakeAdminUserName` 和 `ProducerDatalakeAdminUserPassword` 的用户名和密码。

1. 对于 **DataLakeBucketName**，请输入您的数据湖存储桶的名称。此名称需要全局唯一。

1. 对于**DatabaseName**和 **TableName**，保留默认值。

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

1. 在下一页上，选择**下一步**。

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

1.  选择**创建**。

   堆栈创建过程可能最多需要一分钟。

**在使用者账户中创建您的资源**

1. 在美国东部（弗吉尼亚北部）区域的 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 登录 AWS CloudFormation 控制台。

1. 选择[启动堆栈](https://aws-bigdata-blog.s3.amazonaws.com/artifacts/Securely_sharing_data_across_AWS_accounts_using_AWS_Lake_Formation/lakeformation_tutorial_cross_account_consumer.yaml)。

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

1. 对于**堆栈名称**，为堆栈输入名称，如 `stack-consumer`。

1.  在**用户配置**部分，输入 `ConsumerDatalakeAdminUserName` 和 `ConsumerDatalakeAdminUserPassword` 的用户名和密码。

1. 对于 `DataAnalystUserName` 和 `DataAnalystUserPassword`，为数据分析师 IAM 用户输入所需的用户名和密码。

1. 对于 **DataLakeBucketName**，请输入您的数据湖存储桶的名称。此名称需要全局唯一。

1. 对于 **DatabaseName**，保留默认值。

1. 对于 `AthenaQueryResultS3BucketName`，输入用于存储 Amazon Athena 查询结果的 Amazon S3 存储桶的名称。如果没有 Amazon S3 存储桶，请[创建 Amazon S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

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

1. 在下一页上，选择**下一步**。

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

1.  选择**创建**。

   堆栈创建过程可能最多需要一分钟。

**注意**  
完成教程后，请删除中的堆栈 CloudFormation 以免产生费用。根据堆栈的事件状态验证是否已成功删除资源。

## 第 2 步：Lake Formation 跨账户共享先决条件
<a name="cross-account-share-prerequisistes"></a>

在与 Lake Formation 共享资源之前，基于标签的访问控制方法和命名资源方法都需要满足一些先决条件。

**完成基于标签的访问控制跨账户数据共享先决条件**
+ 有关跨账户数据共享要求的更多信息，请参阅“跨账户数据共享”一章中的[先决条件](cross-account-prereqs.md)一节。

  要共享**跨账户版本设置为 3 或更高版本的数据目录资源，授予者需要在您的账户**中拥有 AWS 托管策略`AWSLakeFormationCrossAccountManager`中定义的 IAM 权限。

  如果您使用的**跨账户版本设置**为版本 1 或版本 2，则必须先将以下 `JSON` 权限对象添加到制作者账户中的数据目录资源策略中，然后才能使用基于标签的访问控制方法授予对资源的跨账户访问权限。当 `glue:EvaluatedByLakeFormationTags` 为 true 时，这可授予使用者账户访问数据目录的权限。此外，对于您使用 Lake Formation 权限标签向使用者账户授予其权限的资源，此条件也适用。您向其授予权限 AWS 账户 的每一个都需要此策略。

  以下策略必须位于 `Statement` 元素内。我们会在下一节中讨论完整的 IAM 策略。

  ```
  {
      "Effect": "Allow",
      "Action": [
          "glue:*"
      ],
      "Principal": {
          "AWS": [
              "consumer-account-id"
          ]
      },
      "Resource": [
          "arn:aws:glue:region:account-id:table/*",
          "arn:aws:glue:region:account-id:database/*",
          "arn:aws:glue:region:account-id:catalog"
      ],
      "Condition": {
          "Bool": {
              "glue:EvaluatedByLakeFormationTags": true
          }
      }
  }
  ```

**完成命名资源方法跨账户共享先决条件**

1. 如果您的账户中没有数据目录资源策略，则您执行的 Lake Formation 跨账户授权将照常进行。但是，如果存在数据目录资源策略，则必须在其中添加以下语句，以便能够成功使用命名资源方法完成跨账户授权。如果您计划仅使用命名资源方法或仅使用基于标签的访问控制方法，则可以跳过这一步。在本教程中，我们评估了这两种方法，并且我们需要添加以下策略。

   以下策略必须位于 `Statement` 元素内。我们会在下一节中讨论完整的 IAM 策略。

   ```
   {
             "Effect": "Allow",
             "Action": [
             "glue:ShareResource"
             ],
             "Principal": {
               "Service":"ram.amazonaws.com"
             },
             "Resource": [
                 "arn:aws:glue:region:account-id:table/*/*",
                 "arn:aws:glue:region:account-id:database/*",
                 "arn:aws:glue:region:account-id:catalog"
             ]
   }
   ```

1. 接下来，使用 AWS Command Line Interface (AWS CLI) 添加 AWS Glue Data Catalog 资源策略。

   如果您同时使用基于标签的访问控制方法和命名资源方法授予跨账户权限，则在添加上述策略时必须将 `EnableHybrid` 参数设置为“true”。因为控制台目前不支持此选项，因此您必须使用 `glue:PutResourcePolicy` API 和 AWS CLI。

   首先，创建一个策略文档（例如 policy.json），然后添加上述两个策略。*consumer-account-id*替换为*account ID* AWS 账户 获得授权的，*region*替换为包含您正在授予权限的数据库和表的数据目录区域，并*account-id*替换为生产者 AWS 账户 ID。

   输入以下 AWS CLI 命令。*glue-resource-policy*替换为正确的值（例如 file: //policy.json）。

   ```
   aws glue put-resource-policy --policy-in-json glue-resource-policy --enable-hybrid TRUE
   ```

   有关更多信息，请参阅[put-resource-policy。](https://docs.aws.amazon.com/cli/latest/reference/glue/put-resource-policy.html)

## 第 3 步：使用基于标签的访问控制方法执行跨账户共享
<a name="tut-share-tbac-method"></a>

在本节，我们将引导您完成以下主要步骤：

1.  定义 LF 标签。

1.  将 LF 标签分配给目标资源。

1. 向使用者账户授予 LF 标签权限。

1. 向使用者账户授予数据权限。

1. 或者，撤销 `IAMAllowedPrincipals` 对数据库、表和列的权限。

1. 创建指向共享表的资源链接。

1.  创建 LF 标签并将其分配给目标数据库。

1.  向使用者账户授予 LF 标签数据权限。

**定义 LF 标签**
**注意**  
如果您已登录制作者账户，请先退出，然后再完成以下步骤。

1. 以数据湖管理员的身份登录生产者帐户，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。使用您在创建 CloudFormation 堆栈期间指定的制作者账户编号、IAM 用户名（默认为 `DatalakeAdminProducer`）和密码。

1. 在 Lake Formation 控制台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) 的导航窗格中，在 “**权限**” 下，选择 **LF-Tags 和** “权限”。

1. 选择**添加 LF 标签**。

**将 LF 标签分配给目标资源**

将 LF 标签分配给目标资源并向其他账户授予数据权限

作为数据湖管理员，您可以向资源附加标签。如果您计划使用单独的角色，则可能需要向单独的角色授予描述并附加权限。

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

1. 选择目标数据库 `(lakeformation_tutorial_cross_account_database_tbac)`，然后在**操作**菜单上选择**编辑 LF 标签**。

   在本教程中，您可为数据库分配 LF 标签，但也可为表和列分配 LF 标签。

1. 选择**分配新的 LF 标签**。

1. 添加键 `Confidentiality` 和值 `public`。

1.  选择**保存**。

**向使用者账户授予 **LF 标签**权限**

留在制作者账户中，向使用者账户授予访问 LF 标签的权限。

1. 在导航窗格的**权限**下，选择 **LF 标签和权限**。

1. 选择 **LF 标签**选项卡，然后选择与使用者账户（**键** `Confidentiality` 和**值** `public`）共享的 LF 标签的**键**和**值**。

1. 选择 **Grant permissions**（授予权限）。

1. 对于**权限类型**，选择 **LF 标签键值对权限**。

1. 对于**主体**，选择**外部账户**。

1. 输入目标 **AWS 账户 ID**。

   AWS 账户 在同一个组织内自动出现。否则，您必须手动输入 AWS 账户 ID。

1. 在**权限**下，选择**描述**。

   这是授予给使用者账户的权限。可授予的权限是指使用者账户可以向其他主体授予的权限。

1. 选择**授权**。

   此时，使用者数据湖管理员应该能够在 Lake Formation 控制台中**权限**下的 **LF 标签和权限**找到通过使用者账户共享的策略标签。

**向使用者账户授予数据权限**

现在，我们将通过指定 LF 标签表达式并授予使用者账户访问与该表达式匹配的任何表或数据库的权限，为使用者账户提供数据访问权限。

1. 在导航窗格中**权限**下的**数据湖权限**中，选择**授权**。

1. 对于**委托人**，选择**外部账户**，然后输入目标 AWS 账户 ID。

1. 对于 **LF 标签或目录资源**，选择与使用者账户（**键** `Confidentiality`和**值** `public`）共享的 **LF 标签**的**键**和**值**。

1. 对于**权限**，在**通过 LF 标签匹配的资源（推荐）**下，选择**添加 LF 标签**。

1. 选择与使用者账户（键 `Confidentiality` 和值 `public`）共享的标签的**键**和**值**。

1. 对于**数据库权限**，选择**数据库权限**下的**描述**以授予数据库级别的访问权限。

1. 消费者数据湖管理员应该能够在 Lake Formation 控制台的 “**权限**” [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)、“**管理角色和任务**” 下的 **LF-** Tags 下找到通过消费者账户共享的策略标签。

1. 在**可授予的权限**下选择**描述**，这样使用者账户就可以向其用户授予数据库级别的权限。

1. 对于**表和列权限**，选择**表权限**下的**选择**和**描述**。

1. 在**可授予的权限**下选择**选择**和**描述**。

1. 选择**授权**。

**撤销 `IAMAllowedPrincipals` 对数据库、表和列的权限（可选）。**

在本教程的开头，您更改了 Lake Formation 数据目录设置。如果您跳过了该部分，则需要执行这一步。如果您更改了 Lake Formation 数据目录设置，则可以跳过这一步。

在这一步，我们需要撤销 `IAMAllowedPrincipals` 对数据库或表的默认 **Super** 权限。有关详细信息，请参阅 [步骤 4：将数据存储切换到 Lake Formation 权限模型](upgrade-glue-lake-formation.md#upgrade-glue-lake-formation-step4)。

在撤销 `IAMAllowedPrincipals` 的权限之前，请确保您已通过 Lake Formation 向现有 IAM 主体授予必要的权限。这包括三个步骤：

1. 通过 Lake Formation `GetDataAccess` 操作（使用 IAM 策略）向目标 IAM 用户或角色添加 IAM 权限。

1.  向目标 IAM 用户或角色授予 Lake Formation 数据权限（更改、选择等）。

1. 然后，撤销 `IAMAllowedPrincipals` 的权限。否则，在撤销 `IAMAllowedPrincipals` 的权限后，现有 IAM 主体可能无法再访问目标数据库或数据目录。

   如果您要应用 Lake Formation 权限模型（而不是 IAM 策略模型）来管理用户使用 Lake Formation 权限模型在单个账户内或多个账户之间进行的访问，则需要撤销 `IAMAllowedPrincipals` 的 **Super** 权限。对于要保留传统 IAM 策略模型的其他表，您不必撤销 `IAMAllowedPrincipals` 对这些表的权限。

   此时，消费者账户数据湖管理员应该能够在 Lake Formation 控制台**的数据目录下的数据库中找到通过消费者账户共享的数据库**和表。[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)如果不能，请确认以下配置是否正确。

   1. 为目标数据库和表分配了正确的策略标签和值。

   1. 为使用者账户分配了正确的标签权限和数据权限。

   1. 撤销 `IAMAllowedPrincipals` 对数据库或表的默认 Super 权限。

**创建指向共享表的资源链接。**

当在账户之间共享资源时，共享的资源未置于使用者账户的数据目录中。为了使它们可用，并使用 Athena 等服务查询共享表的基础数据，我们需要创建一个指向共享表的资源链接。资源链接是一个数据目录对象，它是指向本地或共享数据库或表的链接。有关更多信息，请参阅 [创建资源链接](creating-resource-links.md)。通过创建资源链接，您可以：
+ 为数据库或表分配一个与您的数据目录资源命名策略相符的不同名称。
+ 使用 Athena 和 Redshift Spectrum 等服务查询共享的数据库或表。

要创建资源链接，请完成以下步骤：

1. 如果您已登录使用者账户，请退出。

1. 以使用者账户数据湖管理员身份登录。使用您在创建 CloudFormation 堆栈时指定的消费者账户 ID、IAM 用户名（默认 DatalakeAdminConsumer）和密码。

1. 在 Lake Formation 控制台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) 的导航窗格中，在**数据目录、数据库**下，选择共享数据库`lakeformation_tutorial_cross_account_database_tbac`。

   如果看不到该数据库，请回顾前面的步骤，看一看是否所有配置均正确。

1. 选择**查看详细信息**。

1. 选择共享表 `amazon_reviews_table_tbac`。

1. 在**操作**菜单上，选择**创建资源链接**。

1. 对于**资源链接名称**，输入名称（在本教程中，为 `amazon_reviews_table_tbac_resource_link`）。

1. 在 “**数据库**” 下，选择在其中创建资源链接的数据库（对于这篇文章， CloudFormation n 堆栈创建了数据库`lakeformation_tutorial_cross_account_database_consumer`）。

1. 选择**创建**。

   资源链接显示在**数据目录**的**表**中。

**创建 LF 标签并将其分配给目标数据库**

Lake Formation 标签与资源位于同一个数据目录中。这意味着在向使用者账户中的资源链接授予访问权限时，无法使用在制作者账户中创建的标签。您需要在使用者账户中创建一组单独的 LF 标签，以便在共享使用者账户中的资源链接时使用基于 LF 标签的访问控制。

1. 在使用者账户中定义 LF 标签。在本教程中，我们使用键 `Division` 和值 `sales`、`marketing` 和 `analyst`。

1. 将 LF 标签键 `Division` 和值 `analyst` 分配给在其中创建资源链接的数据库 `lakeformation_tutorial_cross_account_database_consumer`。

**向使用者授予 LF 标签数据权限**

最后一步，向使用者授予 LF 标签数据权限。

1. 在导航窗格中**权限**下的**数据湖权限**中，选择**授权**。

1. 对于**主体**，选择 **IAM 用户和角色**，然后选择用户 `DataAnalyst`。

1.  对于 **LF 标签或目录资源**，选择**通过 LF 标签匹配的资源（推荐）**。

1. 选择**键** Division 和**值** analyst。

1. 对于**数据库权限**，选择**数据库权限**下的**描述**。

1. 对于**表和列权限**，选择**表权限**下的**选择**和**描述**。

1. 选择**授权**。

1. 对用户 `DataAnalyst` 重复这些步骤，其中 LF 标签键为 `Confidentiality`，值为 `public`。

   此时，消费者账户中的数据分析师用户应该能够找到数据库和资源链接，并通过 Athena 控制台查询共享表，网址为。[https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home)如果不能，请确认以下配置是否正确。
   + 已为共享表创建资源链接
   + 您已授予该用户访问通过制作者账户共享的 LF 标签的权限
   + 您已授予该用户访问与资源链接和在其中创建资源链接的数据库关联的 LF 标签的权限
   + 检查是否为资源链接和在其中创建资源链接的数据库分配了正确的 LF 标签

## 第 4 步：实施命名资源方法
<a name="tut-named-resource-method"></a>

为了使用命名资源方法，我们将引导您完成以下主要步骤：

1. （可选）撤销 `IAMAllowedPrincipals` 对数据库、表和列的权限。

1. 向使用者账户授予数据权限。

1. 接受来自的资源共享 AWS Resource Access Manager。

1. 为共享表创建资源链接。

1. 向使用者授予对共享表的数据权限。

1. 向使用者授予对资源链接的数据权限。

**撤销 `IAMAllowedPrincipals` 对数据库、表和列的权限（可选）**
+ 在本教程的开头，我们更改了 Lake Formation 数据目录设置。如果您跳过了该部分，则需要执行这一步。有关说明，请参阅上一节中的可选步骤。

**向使用者账户授予数据权限**

1. 
**注意**  
如果您以其他用户身份登录了制作者账户，请先退出。

   使用创建者账户数据湖管理员[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)使用 CloudFormation 堆栈创建期间指定的 AWS 账户 ID、IAM 用户名（默认为`DatalakeAdminProducer`）和密码登录 Lake Formation 控制台。

1. 在**权限**页面上的**数据湖权限**下，选择**授权**。

1. 在 “**委托人**” 下，选择 “**外部帐户**”，然后输入一个或多个 AWS 账户 IDs 或 AWS 组织 IDs。有关更多信息，请参阅 [AWS 组织](https://aws.amazon.com/organizations/)。

   制作者账户所属且 AWS 账户 位于同一组织内的组织会自动出现。否则，请手动输入账户 ID 或组织 ID。

1. 对于 **LF 标签或目录资源**，选择`Named data catalog resources`。

1. 在**数据库**下，选择数据库 `lakeformation_tutorial_cross_account_database_named_resource`。

1. 选择**添加 LF 标签**。

1. 在**表**下，选择**所有表**。

1. 对于**表列权限**，在**表权限**下选择**选择**和**描述**。

1. 在**可授予的权限**下选择**选择**和**描述**。

1. 或者，对于**数据权限**，如果需要进行列级别权限管理，请选择**基于列的简单访问权限**。

1. 选择**授权**。

如果您尚未撤销 `IAMAllowedPrincipals` 的权限，则会遇到**授予权限失败**错误。此时，您应该在 “权限”、“**数据权限**” 下看到目标表是通过 AWS RAM 与消费者账户共享的。

**接受来自的资源共享 AWS RAM**
**注意**  
此步骤仅适用于 AWS 账户基于组织的共享，不适用于基于组织的共享。

1. 使用消费者账户数据湖管理员[https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/)使用 CloudFormation 堆栈创建期间指定的 IAM 用户名（默认为 DatalakeAdminConsumer）和密码登录 AWS 控制台。

1. 在 AWS RAM 控制台的导航窗格中，在 “**与我共享”、“资源共享” 下，**选择共享的 Lake Formation 资源。**状态**应为**待处理**。

1. 选择**操作**和**授权**。

1. 确认资源详细信息，然后选择**接受资源共享**。

   此时，消费者账户数据湖管理员应该能够在 Lake Formation 控制台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) **的数据目录**、**数据库**下找到共享资源。

**为共享表创建资源链接**
+ 按照[第 3 步：使用基于标签的访问控制方法执行跨账户共享](#tut-share-tbac-method)（第 6 步）中的说明为共享表创建资源链接。命名资源链接 `amazon_reviews_table_named_resource_resource_link`。在数据库 `lakeformation_tutorial_cross_account_database_consumer` 中创建资源链接。

**向使用者授予对共享表的数据权限**

要向使用者授予对共享表的数据权限，请完成以下步骤：

1. **在 Lake FormationConsole ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) 上，在 “**权限”**、“**数据湖权限**” 下，选择 “授予”。**

1. 对于**主体**，选择 **IAM 用户和角色**，然后选择用户 `DataAnalyst`。

1. 对于 **LF 标签或目录资源**，选择**命名数据目录资源**。

1. 在**数据库**下，选择数据库 `lakeformation_tutorial_cross_account_database_named_resource`。如果在下拉列表中看不到该数据库，请选择**加载更多**。

1.  在**表**下，选择表 `amazon_reviews_table_named_resource`。

1. 对于**表和列权限**，选择**表权限**下的**选择**和**描述**。

1. 选择**授权**。

**向使用者授予对资源链接的数据权限**

除了向数据湖用户授予访问共享表的权限外，您还需要向数据湖用户授予访问资源链接的权限。

1. 在 Lake Formation 控制台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) 上，在 “**权限**”、“**数据湖权限**” 下，选择 “**授予**”。

1. 对于**主体**，选择 **IAM 用户和角色**，然后选择用户 `DataAnalyst`。

1. 对于 **LF 标签或目录资源**，选择**命名数据目录资源**。

1. 在**数据库**下，选择数据库 `lakeformation_tutorial_cross_account_database_consumer`。如果在下拉列表中看不到该数据库，请选择**加载更多**。

1.  在**表**下，选择表 `amazon_reviews_table_named_resource_resource_link`。

1. 对于**资源链接权限**，在**资源链接权限**下选择**描述**。

1. 选择**授权**。

   此时，使用者账户中的数据分析师用户应该能够找到数据库和资源链接，并通过 Athena 控制台查询共享表。

   如果不能，请确认以下配置是否正确。
   + 已为共享表创建资源链接
   + 您已授予用户访问通过制作者账户共享的表的权限
   + 您已授予用户访问资源链接和为其创建资源链接的数据库的权限

## 步骤 5：清理 AWS 资源
<a name="share-tbac-clean-up-db"></a>

为了防止向你收取不必要的费用 AWS 账户，你可以删除用于本教程的 AWS 资源。

1. [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)使用制作人账户登录 Lake Formation 控制台，然后删除或更改以下内容：
   + AWS Resource Access Manager 资源共享
   + Lake Formation 标签
   + CloudFormation 堆栈
   + Lake Formation 设置
   + AWS Glue Data Catalog

1. [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)使用消费者账户登录 Lake Formation 控制台，然后删除或更改以下内容：
   + Lake Formation 标签
   + CloudFormation 堆栈