第 3 步:使用基于标签的访问控制方法执行跨账户共享 - Amazon Lake Formation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

第 3 步:使用基于标签的访问控制方法执行跨账户共享

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

  1. 定义 LF 标签。

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

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

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

  5. 或者,撤销 IAMAllowedPrincipals 对数据库、表和列的权限。

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

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

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

定义 LF 标签
注意

如果您已登录制作者账户,请先退出,然后再完成以下步骤。

  1. 通过 https://console.aws.amazon.com/lakeformation/ 以数据湖管理员的身份登录制作者账户。使用您在创建 Amazon CloudFormation 堆栈期间指定的制作者账户编号、IAM 用户名(默认为 DatalakeAdminProducer)和密码。

  2. 在 Lake Formation 控制台 (https://console.aws.amazon.com/lakeformation/) 的导航窗格中,在权限下的管理角色和任务下,选择 LF 标签

  3. 选择添加 LF 标签

将 LF 标签分配给目标资源

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

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

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

  2. 选择目标数据库 (lakeformation_tutorial_cross_account_database_tbac),然后在操作菜单上选择编辑 LF 标签

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

  3. 选择分配新的 LF 标签

  4. 添加键 Confidentiality 和值 public

  5. 选择 Save(保存)。

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

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

  1. 在导航窗格中,在权限管理角色和任务中的 LF 标签权限下,选择授权

  2. 对于主体,选择外部账户

  3. 输入目标 Amazon Web Services 账户 ID

    同一个组织内的 Amazon Web Services 账户会自动显示。否则,您必须手动输入 Amazon Web Services 账户 ID。撰写本文时,Lake Formation 基于标签的访问控制并不支持向组织或组织单位授予权限。

  4. 对于 LF 标签,请选择与使用者账户( Confidentiality public)共享的 LF 标签的

  5. 对于权限,在 LF 标签权限中选择描述

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

  6. 选择授权

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

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

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

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

  2. 对于主体,选择外部账户,然后输入目标 Amazon Web Services 账户 ID。

  3. 对于 LF 标签或目录资源,选择与使用者账户( Confidentiality public)共享的 LF 标签

  4. 对于权限,在通过 LF 标签匹配的资源(推荐)下,选择添加 LF 标签

  5. 选择与使用者账户(键 Confidentiality 和值 public)共享的标签的

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

  7. 使用者数据湖管理员应该能够通过 https://console.aws.amazon.com/lakeformation/ 访问 Lake Formation 控制台,在权限管理角色和任务LF 标签中找到通过使用者账户共享的策略标签。

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

  9. 对于表和列权限,选择表权限下的选择描述

  10. 可授予的权限下选择选择描述

  11. 选择授权

撤销 IAMAllowedPrincipals 对数据库、表和列的权限(可选)。

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

在这一步,我们需要撤销 IAMAllowedPrincipals 对数据库或表的默认 Super 权限。有关详细信息,请参阅步骤 4:将数据存储切换到 Lake Formation 权限模型

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

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

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

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

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

    此时,使用者账户数据湖管理员应该能够通过 https://console.aws.amazon.com/lakeformation/ 访问 Lake Formation 控制台,在数据目录的“数据库”中找到通过使用者账户共享的数据库和表。如果不能,请确认以下配置是否正确。

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

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

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

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

当在账户之间共享资源时,共享的资源未置于使用者账户的数据目录中。为了使它们可用,并使用 Athena 等服务查询共享表的基础数据,我们需要创建一个指向共享表的资源链接。资源链接是一个数据目录对象,它是指向本地或共享数据库或表的链接。有关详细信息,请参阅 创建资源链接。通过创建资源链接,您可以:

  • 为数据库或表分配一个与您的数据目录资源命名策略相符的不同名称。

  • 使用 Athena 和 Redshift Spectrum 等服务查询共享的数据库或表。

要创建资源链接,请完成以下步骤:

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

  2. 以使用者账户数据湖管理员身份登录。使用您在创建 Amazon CloudFormation 堆栈期间指定的使用者账户 ID、IAM 用户名(默认为 DataLakeAdminConsumer)和密码。

  3. 在 Lake Formation 控制台 (https://console.aws.amazon.com/lakeformation/) 的导航窗格中,在数据目录下的“数据库”中,选择共享数据库 lakeformation_tutorial_cross_account_database_tbac

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

  4. 选择查看详细信息

  5. 选择共享表 amazon_reviews_table_tbac

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

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

  8. 数据库下,选择在其中创建资源链接的数据库(在本博文中,为 Amazon CloudFormation 堆栈创建的数据库 lakeformation_tutorial_cross_account_database_consumer)。

  9. 选择 Create(创建)。

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

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

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

  1. 在使用者账户中定义 LF 标签。在本教程中,我们使用键 Division 和值 salesmarketinganalyst

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

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

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

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

  2. 对于主体,选择 IAM 用户和角色,然后选择用户 DataAnalyst

  3. 对于 LF 标签或目录资源,选择通过 LF 标签匹配的资源(推荐)

  4. 选择 Division 和 analyst。

  5. 对于数据库权限,选择数据库权限下的描述

  6. 对于表和列权限,选择表权限下的选择描述

  7. 选择授权

  8. 对用户 DataAnalyst 重复这些步骤,其中 LF 标签键为 Confidentiality,值为 public

    此时,使用者账户中的数据分析师用户应该能够找到数据库和资源链接并通过 Athena 控制台 (https://console.aws.amazon.com/athena/) 查询共享表。如果不能,请确认以下配置是否正确。

    • 已为共享表创建资源链接

    • 您已授予该用户访问通过制作者账户共享的 LF 标签的权限

    • 您已授予该用户访问与资源链接和在其中创建资源链接的数据库关联的 LF 标签的权限

    • 检查是否为资源链接和在其中创建资源链接的数据库分配了正确的 LF 标签