使用 Lake Formation 细粒度访问控制共享数据湖 - AWS Lake Formation

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

使用 Lake Formation 细粒度访问控制共享数据湖

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

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

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

AWS Organization structure with two OUs, showing data lake access and user permissions across accounts.

目标受众

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

角色 描述
IAM管理员 具有 AWS 托管策略 AdministratorAccess 的用户。
数据湖管理员

拥有 AWS 托管策略的用户:已AWSLakeFormationDataAdmin附加到该角色。

数据分析人员 拥有 AWS 托管策略的用户:已AmazonAthenaFullAccess附加。

先决条件

在开始本教程之前,你必须有一个 AWS 账户 可以用来以具有正确权限的管理用户身份登录的。有关更多信息,请参阅 完成初始 AWS 配置任务

本教程假设你已经熟悉IAM了。有关的信息IAM,请参阅《IAM用户指南》

在此教程中,您需要以下资源:
  • 两个组织单位:

    • OU1— 包含账户 A

    • OU2— 包含账户 B

  • 账户 A 中的 Amazon S3 数据湖位置(存储桶)。

  • 账户 A 中的数据湖管理员用户您可以使用 Lake Formation 控制台 (https://console.aws.amazon.com/lakeformation/) 或 Lake Formation 的PutDataLakeSettings操作来创建数据湖管理员API。

  • 在账户 A 中配置的 Lake Formation 和在账户 A 中向 Lake Formation 注册的 Amazon S3 数据湖位置。

  • 账户 B 中有两个使用以下IAM托管策略的用户:

    • testuser1 — 已附加 AWS 托管策略AWSLakeFormationDataAdmin

    • testuser2 — 已附加 AWS 托管策略AmazonAthenaFullAccess

  • 账户 B 的 Lake Formation 数据库中的数据库 testdb。

第 1 步:提供对其他账户的细粒度访问权限

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

授予对其他账户的细粒度访问权限
  1. AWS Management Console 以https://console.aws.amazon.com/connect/数据湖管理员的身份登录账户 A。

  2. 打开 Lake Formation 控制台 (https://console.aws.amazon.com/lakeformation/),然后选择入门

  3. 在导航窗格中,选择数据库

  4. 选择创建数据库

  5. 数据库详细信息部分,选择数据库

  6. 对于名称,输入名称(在本教程中,我们使用 sampledb01)。

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

  8. 选择创建数据库

  9. 数据库页面上,选择您的数据库 sampledb01

  10. 操作菜单上选择授权

  11. 授予权限部分,选择外部账户

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

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

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

  15. 对于,选择包括列

  16. 对于表权限,选择选择

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

  18. 选择授权

  19. 在导航窗格中,选择

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

创建资源链接

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

  1. 使用账户 B https://console.aws.amazon.com/connect/中的身份登录 AWS 控制台testuser1

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

  3. 选择 acc_a_area 表。

  4. 操作菜单上,选择创建资源链接

  5. 对于资源链接名称,输入名称(在本教程中,为 acc_a_area_rl)。

  6. 对于数据库,选择您的数据库 (testdb)。

  7. 选择创建

  8. 在导航窗格中,选择

  9. 选择 acc_b_area_rl 表。

  10. 操作菜单上,选择查看数据

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

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

第 2 步:为同一账户中的用户提供细粒度访问权限

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

向同一个账户中的用户授予细粒度访问权限
  1. 使用账户 B https://console.aws.amazon.com/connect/中的身份登录 AWS 控制台testuser1

  2. 在 Lake Formation 控制台的导航窗格中,选择

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

  3. 授予权限部分,选择我的账户

  4. 对于IAM用户和角色,请选择用户testuser2

  5. 对于,选择列名。

  6. 对于表权限,选择选择

  7. 选择授权

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

  8. 授予权限部分,选择我的账户

  9. 对于IAM用户和角色,请选择用户testuser2

  10. 对于资源链接权限,选择描述

  11. 选择授权

  12. 使用账户 B 登录 AWS 控制台,身份为testuser2

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