如何使用 AWS Lake Formation 跨账户共享 AWS Glue Data Catalog 数据库和表?

3 分钟阅读
0

我想使用 AWS Lake Formation 跨账户共享 AWS Glue Data Catalog 数据库和表。

解决方法

借助 Lake Formation 的跨账户功能,您可以向其他 AWS 账户授予访问权限,以便在数据湖中写入和共享数据。可以通过基于标签的访问控制或命名资源共享资源。本文重点介绍使用命名资源方法授予对 Data Catalog 资源的跨账户访问权限。

确保满足先决条件

在与另一个账户共享 Data Catalog 资源或访问从另一个账户共享的资源之前,请记住以下先决条件:

撤销 Lake Formation 权限

撤销 IAMAllowedPrincipals 组对 Data Catalog 资源的所有 Lake Formation 权限。

防止新表拥有 Super 权限

对于包含您可能共享的表的 Data Catalog 数据库,请防止新表具有对 IAMAllowedPrincipals 的默认 Super 权限:

  1. 打开 Lake Formation 控制台
  2. 在导航窗格的 Data Catalog 下,选择 Databases(数据库)。
  3. 选择要更新的数据库。
  4. 选择 Actions(操作),然后选择 Edit(编辑)。
  5. Default permissions for newly created tables(新创建表的默认权限)下,清除 Use only IAM access control for new tables in this database(仅对此数据库中的新表使用 IAM 访问控制)。
  6. 选择 Save(保存)。

有关详细信息,请参阅 Super

添加跨账户访问所需的权限

如果账户中已启用 AWS Glue Data Catalog 资源策略,您可以删除该策略或向该策略添加跨账户授权所需的新权限。以下是一个示例资源策略,提供从账户 1111222233334444 到账户 5555666677778888 的跨账户 AWS Glue 访问权限。

有关详细信息,请参阅授予跨账户访问权限

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ram.amazonaws.com"
      },
      "Action": "glue:ShareResource",
      "Resource": [
        "arn:aws:glue:us-east-1:1111222233334444:table/*/*",
        "arn:aws:glue:us-east-1:1111222233334444:database/*",
        "arn:aws:glue:us-east-1:1111222233334444:catalog"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::5555666677778888:root"
      },
      "Action": "glue:*",
      "Resource": [
        "arn:aws:glue:us-east-1:1111222233334444:table/*/*",
        "arn:aws:glue:us-east-1:1111222233334444:database/*",
        "arn:aws:glue:us-east-1:1111222233334444:catalog"
      ]
    }
  ]
}

启用与组织共享

如果 Data Catalog 资源在组织间共享,请使用 AWS RAM 控制台启用与 AWS Organizations 共享。启用此选项的 AWS Identity and Access Management (IAM) 用户或角色必须拥有 ram:EnableSharingWithAwsOrganization IAM 权限。

有关详细信息,请参阅跨账户访问先决条件

授予所需的 IAM 权限

**源账户:**要使用命名资源方法授予跨账户权限,您必须具有 AWS Glue 和 AWS Resource Access Manager (AWS RAM) 所需的 IAM 权限。您可以选择授予这些权限的 AWS 托管式策略 AWSLakeFormationCrossAccountManager,也可以基于此策略创建新策略。

**目标账户:**目标账户中的数据湖管理员必须拥有以下附加策略。此策略允许管理员接受 AWS RAM 资源共享邀请并启用与组织的资源共享:

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

**注意:**接收 AWS RAM 中的资源共享邀请的 IAM 用户或角色必须具有 glue:PutResourcePolicy 所需的 IAM 权限。

与目标账户共享数据库及其表

要与不属于组织的目标账户共享数据库和数据库中的所有表,请执行以下操作:

**注意:**如果共享源账户数据库中的所有表,则在源账户中创建的任何新表都会自动与目标账户共享。

在源账户中,执行以下操作:

  1. 打开 Lake Formation 控制台,然后以数据湖管理员身份登录。
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择要共享的数据库。
  4. 选择 Actions(操作),然后选择 Grant(授予)。
  5. 选择 External account(外部账户)。
  6. 对于 AWS account ID or AWS organization ID(AWS 账户 ID 或 AWS 组织 ID),输入目标账户的账户 ID。
  7. 对于 Table(表),确保选择 All tables(所有表)。
  8. 对于 Table permissions(表权限)和 Grantable permissions(可授予的权限),选择要授予的访问权限。
  9. 选择 Grant(授予)。

在目标账户中,执行以下操作:

  1. 打开 AWS RAM 控制台
  2. 在导航窗格中的 Shared with me(与我共享)下,选择 Resource shares(资源共享)。
  3. 查看已授予您访问权限的资源共享列表。
  4. 要接受从源账户共享的资源的邀请,请选择资源共享 ID,然后选择 Accept resource share(接受资源共享)。
  5. 打开 Lake Formation 控制台
  6. 在导航窗格中,选择 Databases(数据库)。
    您可以在列表中查看共享数据库。此数据库的 Owner account ID(拥有者账户 ID)显示源账户的账户 ID。
  7. 选择共享数据库,然后选择 Actions(操作)。
  8. 选择 Create resource link(创建资源链接)。
  9. Create resource link(创建资源链接)页面中,执行以下操作:
    对于 Resource link name(资源链接名称),输入资源链接的名称。
    对于 Shared database(共享数据库),请确保选中共享数据库的名称。
    对于 Shared database's owner ID(共享数据库的拥有者 ID),输入源账户的账户 ID。
  10. 选择 Create(创建)。
    资源链接即已创建。

资源链接是指向元数据数据库和表(通常指向来自其他 AWS 账户的共享数据库和表)的 Data Catalog 对象。这些链接有助于实现对数据湖中数据的跨账户访问。创建资源链接后,您可以使用数据湖管理员访问权限查询共享数据库中的表。

要向 IAM 用户/主体授予对共享数据库的访问权限,请授予访问资源链接和共享数据库所需的权限。这允许 IAM 用户/主体在其 Lake Formation 控制台中查看共享数据库和资源链接。IAM 用户还可以在其 Amazon Athena 控制台或 Amazon Redshift Spectrum 中查看数据库和资源链接。

要向 IAM 用户授予对资源链接的访问权限,请执行以下操作:

  1. 打开 Lake Formation 控制台,然后以数据湖管理员身份登录。
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择您创建的资源链接。
  4. 选择 Actions(操作),然后选择 Grant(授予)。
  5. Principals(主体)下,选择 IAM users and roles(IAM 用户和角色)。
  6. 对于 IAM users and roles(IAM 用户和角色),选择您需要授予访问权限的 IAM 用户或主体。
  7. Resource link permissions(资源链接权限)下,选择 Describe(描述)。
  8. 选择 Grant(授予)。

要向 IAM 用户授予对共享数据库的访问权限,请执行以下操作:

  1. 打开 Lake Formation 控制台,然后以数据湖管理员身份登录。
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择共享数据库。
  4. 选择 Actions(操作),然后选择 Grant(授予)。
  5. 在“主体”下,选择“IAM 用户和角色”。
  6. 对于“IAM 用户和角色”,选择您需要授予访问权限的 IAM 用户或主体。
  7. Database permissions(数据库权限)下,选择 Describe(描述)。
    **注意:**此步骤为用户提供了查看共享数据库的最低权限。
  8. 选择 Grant(授予)。

要授予对数据库中所有表或特定表的访问权限,请选择 All tables(所有表)选项:

  1. 选择资源链接。
  2. 选择 Actions(操作),然后选择 Grant(授予)。
  3. 选择 IAM users and roles(IAM 用户和角色)。
  4. 对于 IAM users and roles(IAM 用户和角色),选择要授予访问权限的用户/主体。
  5. LF-Tags or catalog resources(LF 标签或目录资源)下,执行以下操作:
    要授予对数据库中所有表的访问权限,请在 Tables - optional(表 - 可选)中选择 All tables(所有表)。
    要仅授予对数据库中特定表的访问权限,请在 Tables - optional(表 - 可选)中选择这些表。
  6. 对于 Table permissions(表权限)和 Grantable permissions(可授予的权限),选择 Select(选择)和 Describe(描述)。
  7. 选择 Grant(授予)。

**注意:**您只能授予您在源账户的 Grantable permissions(可授予的权限)中选择的权限。

授予所需权限后,您可以从目标账户成功地查询 Athena 中的表。

只与目标账户共享表

要与目标账户共享单个表,请按照上一部分中的说明进行以下更改。

源账户:

要从 Lake Formation 控制台向目标账户授予访问权限,请选择单个表而不是选择数据库。

目标账户:

  • 接受 AWS RAM 控制台中的资源共享,以在 Lake Formation 控制台中访问共享表。
  • 为共享表创建资源链接。创建资源链接后,您可以使用数据湖管理员访问权限查询共享表。
  • 要向 IAM 用户/主体授予对共享表的访问权限,您必须授予资源链接的权限。

查看其他注意事项

  • 授予对表的权限时,您可以限制只能访问表中的特定列。如果这样做,目标账户只能查看共享表中的这些列。
  • 确保目标账户中的 IAM 用户/主体有权访问源账户中的 Amazon Simple Storage Service (Amazon S3) 路径。
  • 如果您撤销之前从源账户授予的权限,则目标账户将无法访问共享数据库/表。但是,您在目标账户中创建的资源链接不会自动删除。必须手动删除该资源链接。
  • 删除数据库/表时,AWS RAM 中的资源共享不会自动删除。因此,在删除共享数据库或表之前,必须手动撤销跨账户权限。

相关信息

查看共享的 Data Catalog 表和数据库

创建资源链接

授予数据位置权限(外部账户)

授予和撤销对 Data Catalog 资源的权限

AWS Lake Formation 跨账户功能的工作方式

AWS 官方
AWS 官方已更新 3 年前