对数据目录的跨账户访问 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

对数据目录的跨账户访问

您可以使用雅典娜的跨账户Amazon Glue目录功能注册Amazon Glue目录来自您自己以外的帐户。配置所需 IAM 权限后,您可以使用Amazon Glue并将目录注册为 AthenaDataCatalog资源,您可以使用 Athena 运行跨账户查询。有关使用 Athena 控制台从其他帐户注册目录的信息,请参阅注册Amazon Glue Data Catalog从另一个账户

有关跨账户访问的更多信息,请参阅Amazon Glue,请参阅授予跨账户访问权限中的Amazon Glue开发人员指南

在您开始之前

因为此功能使用现有的 AthenaDataCatalog资源 API 和功能来启用跨账户访问,建议您先阅读以下资源,然后再开始阅读以下资源:

注意事项和限制

目前,Athena 跨账户账户账户Amazon Glue目录访问具有以下限制:

  • 此功能仅在支持 Athena 引擎版本 2 的地区可用。有关列表Amazon支持 Athena 引擎版本 2 的地区,请参阅Athena 引擎版本 2。要将工作组升级到引擎版本 2,请参阅更改 Athena 引擎版本

  • 当您注册另一个帐户的Amazon Glue Data Catalog在您的帐户中,您可以创建一个区域DataCatalog资源,该资源仅链接到该特定区域中的其他账户数据。

  • 目前,CREATE VIEW包括跨账户的语句Amazon Glue目录不受支持。

入门

在下面的情况下,"借款人" 帐户 (66666666666666) 想要运行SELECT查询,该查询引用Amazon Glue目录属于 "所有者" 帐户 (9999999999999999),如下例所示:

SELECT * FROM ownerCatalog.tpch1000.customer

在以下过程中,步骤 1a 和 1b 显示如何授予借款人帐户访问所有者帐户的Amazon Glue资源,既从业主的角度,也从借款人的角度来看。该示例授予对数据库的访问权限tpch1000customer。更改这些示例名称以满足您的要求。

步骤 1a:创建要授予的所有者策略Amazon Glue对借款人的访问权限

授予Amazon Glue访问权限从所有者帐户 (99999999999999) 到借款人的用户或角色,您可以使用Amazon Glue控制台或Amazon Glue PutResourcePolicyAPI 操作。以下过程使用Amazon Glue控制台。

授予Amazon Glue从所有者访问借款人帐户

  1. 登录到Amazon Glue控制台https://console.aws.amazon.com/glue/从所有者帐户。

  2. 在导航窗格中,选择 Settings

  3. Permissions (权限)框中,输入类似于如下所示的策略。如果您想要增加权限范围,则可以使用通配符*用于数据库和表资源类型。

    { "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal" : { "AWS" : [ "arn:aws:iam::666666666666:user/username", "arn:aws:iam::666666666666:role/rolename" ] }, "Action" : "glue:*", "Resource" : [ "arn:aws:glue:us-east-1:999999999999:catalog", "arn:aws:glue:us-east-1:999999999999:database/tpch1000", "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer" ] } ] }

步骤 1b:创建借款人角色或用户策略,可访问所有者的Amazon Glue资源

要授予借款人帐户角色或用户访问所有者帐户的Amazon Glue资源,您可以使用Amazon Identity and Access Management(IAM) 控制台或IAM API。以下过程使用 IAM 控制台。

授予借款人角色或用户对所有者帐户的Amazon Glueresources

  1. 通过以下网址登录到 IAM 控制台:https://console.aws.amazon.com/iam/从借款人帐户。

  2. 在导航窗格中,选择角色或者用户

  3. 选择要使更改的角色或用户。

  4. 请执行下列操作之一:

    • 如果要更改角色,请选择挂载策略

    • 如果您要更改用户,请选择添加权限,然后选择直接附加现有策略

  5. 选择 Create policy

  6. 选择 JSON

  7. 在框中,输入以下策略,然后根据您的要求对策略进行修改:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:999999999999:catalog", "arn:aws:glue:us-east-1:999999999999:database/tpch1000", "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer" ] } ] }
  8. 选择查看策略

  9. 名称中,为策略输入名称。

  10. 选择 Create policy

完成后,建议您使用Amazon GlueAPI进行一些测试跨账户调用,以确认权限是否按预期配置。

第 2 步:借款人创建指向所有者帐户的 Athena 数据目录

创建者的 AthenaDataCatalog资源必须具有运行 Athena 的所需权限创建数据形式对话API 操作。根据您的要求,可能需要访问其他 API 操作。有关更多信息,请参阅 数据目录示例策略

以下CreateDataCatalog请求正文注册一个Amazon Glue用于跨账户访问的目录:

# Example CreateDataCatalog request to register a cross-account Glue catalog: { "Description": "Cross-account Glue catalog", "Name": "ownerCatalog", "Parameters": {"catalog-id" : "999999999999" # Owner's account ID }, "Type": "GLUE" }

以下示例代码使用 Java 客户端创建DataCatalog对象。

# Sample code to create the DataCatalog through Java client CreateDataCatalogRequest request = new CreateDataCatalogRequest() .withName("ownerCatalog") .withType(DataCatalogType.GLUE) .withParameters(ImmutableMap.of("catalog-id", "999999999999")); athenaClient.createDataCatalog(request);

经过这些步骤,借款人应该看到ownerCatalog当它调用列出数据目录API 操作。

第 3 步:借款人提交查询

借款人提交一个查询,该查询使用CATAROdatabasetable语法,如以下示例所示:

SELECT * FROM ownerCatalog.tpch1000.customer

借款人不使用完全限定的语法,也可以通过查询执行上下文

Amazon S3 其他权限

  • 如果借款人账户使用 Athena 查询将新数据写入所有者账户中的表,则所有者将无法自动访问 Amazon S3 中的此数据,即使该表存在于所有者的账户中。这是因为借款人是 Amazon S3 中信息的对象所有者,除非另有配置。要授予所有者对数据的访问权限,请作为附加步骤相应地设置对象的权限。

  • 某些跨账户 DDL 操作,如MSCK REPAIR TABLE需要 Amazon S3 权限。例如,如果借款人帐户正在执行跨账户MSCK REPAIR操作,则该存储桶必须向借款人授予权限才能成功查询。

有关授予存储桶权限的信息,请参阅如何设置 ACL 存储桶权限?中的Amazon Simple Storage Service 控制台用户指南

动态使用目录

在某些情况下,您可能需要快速对跨账户执行测试Amazon Glue目录,而无需注册它的先决步骤。您可以动态地执行跨账户查询,而无需创建DataCatalog资源对象,如果按照本文档前面的说明正确配置了所需的 IAM 和 Amazon S3 权限。

要在不注册的情况下显式引用目录,请使用以下示例中的语法:

SELECT * FROM \"glue:arn:aws:glue:us-east-1:999999999999:catalog\".tpch1000.customer

使用格式”glue:<arn>“,其中,<arn>Amazon Glue Data Catalog进行筛选,您要使用。在该示例中,Athena 使用此语法动态指向帐户 999999999999Amazon Glue数据目录,就好像您已经单独创建了DataCatalog对象。

使用动态目录的注意事项

使用动态目录时,请记住以下几点:

  • 使用动态目录需要您通常用于 Athena 数据目录 API 操作的 IAM 权限。主要区别在于,数据目录资源名称遵循glue:*命名约定。

  • 目录 ARN 必须属于正在运行查询的同一区域。

  • 在 DML 查询或视图中使用动态目录时,请使用转义双引号(\")。在 DDL 查询中使用动态目录时,请使用反引号字符(`)。