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

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

授予 Amazon Glue 数据目录跨账户访问权限

您可以使用 Athena 的跨账户 Amazon Glue 目录功能从您自己的账户以外的账户注册 Amazon Glue 目录。配置所需的 IAM 权限 Amazon Glue 并将目录注册为 Athena 资源后,您可以使用 DataCatalogAthena 运行跨账户查询。要了解如何使用 Athena 控制台注册来自其他账户的目录,请参阅 从另一个账户注册 Amazon Glue Data Catalog

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

开始之前

因为此功能使用现有的 Athena DataCatalog 资源 API 和功能来启用跨账户访问,我们建议您先阅读以下资源:

注意事项和限制

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

  • 该功能仅在支持 Athena 引擎版本 2 或更高版本 Amazon Web Services 区域 的地方可用。有关 Athena 引擎版本的更多信息,请参阅 Athena 引擎版本控制。要升级工作组的引擎版本,请参阅 更改 Athena 引擎版本

  • 当您在账户 Amazon Glue Data Catalog 中注册其他账户时,您创建的区域DataCatalog资源仅与该特定区域中其他账户的数据相关联。

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

  • 无法跨账户查询使用 Amazon 托管密钥加密的目录。对于要跨账户查询的目录,请改用客户托管密钥 (KMS_CMK)。有关客户托管密钥和 Amazon 托管密钥之间的区别的信息,请参阅《Amazon Key Management Service 开发人员指南》中的客户 Amazon 密钥和密钥

开始使用

在以下场景中,“借款人” 账户 (6666666666666) 想要运行一个SELECT查询,该查询引用属于 “所有者” 账户 (999999999999) 的 Amazon Glue 目录,如以下示例所示:

SELECT * FROM ownerCatalog.tpch1000.customer

在以下步骤中,步骤 1a 和 1b 显示了如何让借款人账户从借款人和所有者这边访问所有者账户的 Amazon Glue 资源。该示例授予对数据库 tpch1000 和表 customer 的访问权限。更改这些示例名称以满足您的要求。

步骤 1a:使用访问所有者资源的策略创建借款人 Amazon Glue 角色

要创建具有访问所有者账户 Amazon Glue 资源的策略的借款人账户角色,您可以使用 Amazon Identity and Access Management (IAM) 控制台或 IA M API。以下过程使用了 IAM 控制台。

创建借款人角色和策略以访问所有者账户的资源 Amazon Glue
  1. 从借款人账户登录 IAM 控制台 https://console.aws.amazon.com/iam/

  2. 在导航窗格中,展开访问管理,然后选择策略

  3. 选择 创建策略

  4. 对于策略编辑器,选择 JSON

  5. 在策略编辑器中,输入以下策略,然后根据您的要求对其进行修改:

    { "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" ] } ] }
  6. 选择下一步

  7. 查看并创建页面上,在策略名称中输入策略的名称(例如CrossGluePolicyForBorrowerRole)。

  8. 选择创建策略

  9. 在导航窗格中,选择角色

  10. 选择 创建角色

  11. “选择可信实体” 页上,选择 Amazon Web Services 账户,然后选择 “下一步”。

  12. 添加权限页面上,在搜索框中输入您创建的策略的名称(例如,CrossGluePolicyForBorrowerRole)。

  13. 选中策略名称旁边的复选框,然后选择下一步

  14. Name, review, and create(命名、检查和创建)页面上,对于 Role name(角色名称),输入角色的名称(例如 CrossGlueBorrowerRole)。

  15. 选择 创建角色

步骤 1b:创建所有者政策以向借款人授予 Amazon Glue 访问权限

要从所有者账户 (999999999999) 向借款人的角色授予 Amazon Glue 访问权限,您可以使用控制台或 API 操作。 Amazon Glue Amazon Glue PutResourcePolicy以下过程使用 Amazon Glue 控制台。

向所有者授予对借款人账户的 Amazon Glue 访问权限
  1. 使用所有者账户登录主 Amazon Glue 机,网址为 https://console.aws.amazon.com/glue/

  2. 在导航窗格中,展开数据目录,然后选择目录设置

  3. Permissions(权限)框中,输入类似如下的策略。对于角色名,输入借款人在步骤 1a 中创建的角色(例如,)。CrossGlueBorrowerRole如果要增加权限范围,您可以将通配符 * 用于数据库和表资源类型。

    { "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" ] } ] }

完成后,我们建议您使用 Amazon Glue API 进行一些跨账户测试调用,以确认权限配置符合您的预期。

第 2 步:借款人注册 Amazon Glue Data Catalog 属于所有者账户的

以下过程说明了如何使用 Athena 控制台将拥有者的 Amazon Web Services 账户中的 Amazon Glue Data Catalog 配置为数据来源。要了解如何使用 API 操作而不是通过控制台来注册目录,请参阅 使用 API 注册属于拥有者账户的 Athena 数据目录

将 Amazon Glue Data Catalog 属于另一个账户的物品注册到另一个账户
  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 如果控制台导航窗格不可见,请选择左侧的扩展菜单。

    
                            选择扩展菜单。
  3. 展开管理,然后选择数据来源

  4. 选择右上角的 Connect data source(连接数据来源)。

  5. 选择数据源页面上,对于数据源,选择 S3- Amazon Glue Data Catalog,然后选择下一步

  6. 输入数据来源详细信息页面的 Amazon Glue Data Catalog 部分中,对于选择 Amazon Glue Data Catalog,选择 Amazon Glue Data Catalog 中的其他账户

  7. 对于 Data source details(数据源详细信息),提供以下信息:

    • Data source name(数据源名称)– 输入要在 SQL 查询中使用的名称,以引用其他账户中的数据目录。

    • Description(描述)–(可选)输入其他账户中数据目录的描述。

    • Catalog ID(目录编号)– 输入数据目录所属账户的 12 位 Amazon Web Services 账户 ID。Amazon Web Services 账户 ID 即是目录 ID。

  8. (可选)展开标签,输入要与数据来源关联的键-值对。有关标签的更多信息,请参阅 为 Athena 资源添加标签

  9. 选择下一步

  10. Review and create(审核和创建)页面中,检查数据来源的详细信息,然后选择 Create data source(创建数据来源)。Data source details(数据来源详细信息)页面列出了所注册数据目录的数据库和标签。

  11. 选择 Data Source(数据源)。您注册的数据目录在 Data source name(数据来源名称)列中列出。

  12. 要查看或编辑有关数据目录的信息,请选择该目录,然后选择Actions(操作)、Edit(编辑)。

  13. 要删除新数据目录,请选择该目录,然后选择 Actions(操作)、Delete(删除)。

步骤 3:借入者提交查询

借款人使用目录提交引用目录的查询。 数据库语法,如以下示例所示:

SELECT * FROM ownerCatalog.tpch1000.customer

借款人还可以通过传递目录来根据上下文指定目录,而不是使用完全限定的语法。QueryExecutionContext

其他 Amazon S3 权限

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

  • 某些跨账户 DDL 操作,如 MSCK REPAIR TABLE 需要 Amazon S3 权限。例如,如果借款人账户正在对所有者账户中的表执行跨账户MSCK REPAIR操作,而该表的数据位于所有者账户 S3 存储桶中,则该存储桶必须向借款人担任的角色授予权限才能使查询成功。

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

动态使用目录

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

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

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

使用格式“glue:<arn>”,其中 <arn> 是您想要使用的 Amazon Glue Data Catalog ARN。在示例中,Athena 使用此语法动态指向账户 999999999999 的数据目录, Amazon Glue 就像您单独为其创建对象一样。DataCatalog

使用动态目录的注意事项

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

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

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

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

使用 API 注册属于拥有者账户的 Athena 数据目录

您可以使用 API 操作来注册属于拥有者账户的数据目录,而不是如第 2 步中所述使用 Athena 控制台。

A DataCatalogthena 资源的创建者必须拥有必要的权限才能运行 Athena AP CreateDataCatalogI 操作。根据您的要求,可能需要访问其他 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何时调用 ListDataCatalogsAPI 操作。

另请参阅