

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

# 使用 Lake Formation 细粒度访问控制共享数据湖
<a name="share-dl-fgac-tutorial"></a>

本教程提供了有关如何在使用 AWS Organizations 管理多个 AWS 账户时使用 Lake Formation 快速轻松地共享数据集的分步说明。您可以定义精细权限来控制对敏感数据的访问。

以下过程还介绍了账户 A 的数据湖管理员如何为账户 B 提供细粒度访问权限，以及作为数据管家的账户 B 中用户如何向其账户中的其他用户授予对共享表的细粒度访问权限。每个账户中的数据管家可以独立地将访问权限委派给自己的用户，从而赋予每个团队或业务线 (LOB) 自主权。

该使用案例假定您在使用 AWS Organizations 管理自己的 AWS 账户。一个组织单位 (OU1) 中的账户 A 的用户向 OU2 中账户 B 的用户授予访问权限。当不使用组织时（例如，当您只有几个账户时），您可以使用同样的方法。下图说明了对数据湖中数据集的细粒度访问控制。账户 A 中提供了数据湖。账户 A 的数据湖管理员为账户 B 提供了细粒度访问权限。该图表还显示，账户 B 的某用户向账户 B 中的其他用户提供对账户 A 数据湖表的列级别访问权限。

![\[AWS Organization structure with two OUs, showing data lake access and user permissions across accounts.\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/tutorial-fine-grained-access1.jpg)


**Topics**
+ [目标受众](#tut-share-fine-grained-roles)
+ [先决条件](#tut-share-fine-grained-prereqs)
+ [第 1 步：提供对其他账户的细粒度访问权限](#tut-fgac-another-account)
+ [第 2 步：为同一账户中的用户提供细粒度访问权限](#tut-fgac-same-account)

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



本教程适用于数据管家、数据工程师和数据分析师。下表列出了本教程中使用的角色：


| 角色 | 描述 | 
| --- | --- | 
| IAM 管理员 | 具有 AWS 托管策略 AdministratorAccess 的用户。 | 
| 数据湖管理员 |  其角色附加了 AWS 托管策略 `AWSLakeFormationDataAdmin` 的用户。  | 
| 数据分析人员 | 附加了 AWS 托管策略 AmazonAthenaFullAccess 的用户。 | 

## 先决条件
<a name="tut-share-fine-grained-prereqs"></a>

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

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

**在此教程中，您需要以下资源：**
+ 两个组织单位：
  + OU1 — 包含账户 A
  + OU2 — 包含账户 B
+ 账户 A 中的 Amazon S3 数据湖位置（存储桶）。
+ 账户 A 中的数据湖管理员用户。您可以使用 Lake Formation 控制台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) 或 Lake Formation API 的 `PutDataLakeSettings` 操作来创建数据湖管理员。
+ 在账户 A 中配置的 Lake Formation 和在账户 A 中向 Lake Formation 注册的 Amazon S3 数据湖位置。
+ 账户 B 中的两个用户使用以下 IAM 托管策略：
  +  testuser1 — 附加了 AWS 托管策略 `AWSLakeFormationDataAdmin`。
  +  testuser2 — 附加了 AWS 托管策略 `AmazonAthenaFullAccess`。
+ 账户 B 的 Lake Formation 数据库中的数据库 testdb。

## 第 1 步：提供对其他账户的细粒度访问权限
<a name="tut-fgac-another-account"></a>

了解账户 A 的数据湖管理员如何为账户 B 提供细粒度访问权限。

**授予对其他账户的细粒度访问权限**

1. 以数据湖管理员身份通过账户 A 登录 AWS 管理控制台 ([https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/))。

1. 打开 Lake Formation 控制台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))，然后选择**开始使用**。

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

1. 选择**创建数据库**。

1. 在**数据库详细信息**部分，选择**数据库**。

1. 对于**名称**，输入名称（在本教程中，我们使用 `sampledb01`）。

1. 确保未选中**仅对此数据库中的新表使用 IAM 访问控制**。如果不选择此选项，我们便可以从 Lake Formation 控制访问。

1. 选择**创建数据库**。

1. 在**数据库**页面上，选择您的数据库 `sampledb01`。

1. 在**操作**菜单上选择**授权**。

1. 在**授予权限**部分，选择**外部账户**。

1. 对于 AWS 账户 ID 或 AWS 组织 ID，请在 OU2 中输入账户 B 的账户 ID。

1. 对于**表**，选择您希望账户 B 有权访问的表（在本博文中，我们使用表 `acc_a_area`）。（可选）您可以授予对表中列的访问权限，我们在本文中便执行了此操作。

1. 对于**包括列**，选择您希望账户 B 有权访问的列（在博文中，我们授予对类型、名称和标识符的权限）。

1. 对于**列**，选择**包括列**。

1. 对于**表权限**，选择**选择**。

1. 对于**可授予的权限**，选择**选择**。账户 B 中的管理用户需要拥有可授予的权限，这样才能向账户 B 中的其他用户授予权限。

1. 选择**授权**。

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

1. 您可以在“具有访问权限的 AWS 账户 和 AWS 组织”部分中看到一个活动连接。

**创建资源链接**

Amazon Athena 等集成式服务无法跨账户直接访问数据库或表。因此，您需要创建一个资源链接，这样 Athena 才能访问您账户中指向其他账户中数据库和表的资源链接。创建指向表 (`acc_a_area`) 的资源链接，以便账户 B 用户可以使用 Athena 查询其数据。

1. 在账户 B 中以 `testuser1` 身份登录 AWS 控制台 ([https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/))。

1. 在 Lake Formation 控制台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) 上的导航窗格中，选择**表**。您应该会看到账户 A 已提供对其的访问权限的表。

1. 选择 `acc_a_area` 表。

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

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

1. 对于**数据库**，选择您的数据库 (`testdb`)。

1. 选择**创建**。

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

1. 选择 `acc_b_area_rl` 表。

1. 在**操作**菜单上，选择**查看数据**。

   您将被重定向到 Athena 控制台，在该控制台中，您应该可以看到数据库和表。

   现在，您可以对该表运行查询，以查看向账户 B 中 testuser1 提供了对其的访问权限的列值。

## 第 2 步：为同一账户中的用户提供细粒度访问权限
<a name="tut-fgac-same-account"></a>

本节介绍账户 B 中的用户 (`testuser1`) 作为数据管家，如何向同一账户中的其他用户 (`testuser2`) 提供对共享表 `aac_b_area_rl` 中列名的细粒度访问权限。

**向同一个账户中的用户授予细粒度访问权限**

1. 在账户 B 中以 `testuser1` 身份登录 AWS 控制台 ([https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/))。

1. 在 Lake Formation 控制台的导航窗格中，选择**表**。

   您可以通过表的资源链接授予对表的权限。为此，在**表**页面上选择资源链接 `acc_b_area_rl`，然后在**操作**菜单上选择**对目标的授权**。

1. 在**授予权限**部分，选择**我的账户**。

1.  对于 **IAM 用户和角色**，选择用户 `testuser2`。

1. 对于**列**，选择列名。

1. 对于**表权限**，选择**选择**。

1. 选择**授权**。

   创建资源链接时，只有您可以查看和访问它。要允许您账户中的其他用户访问资源链接，您需要授予对资源链接本身的权限。您需要授予**描述**或**删除**权限。在**表**页面上，再次选择您的表，然后在**操作**菜单上选择**授权**。

1. 在**授予权限**部分，选择**我的账户**。

1. 对于 **IAM 用户和角色**，选择用户 `testuser2`。

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

1. 选择**授权**。

1. 以 `testuser2` 身份使用账户 B 登录 AWS 控制台。

   在 Athena 控制台 [(](https://console.aws.amazon.com/athena/home)https://console.aws.amazon.com/athena/) 上，您应该会看到数据库和表 `acc_b_area_rl`。现在，您可以对表运行查询以查看 `testuser2` 有权访问的列值。