在 Athena for Spark 中配置跨账户 AWS Glue 存取。
本主题介绍如何将消费者账户 666666666666
和所有者账户 999999999999
配置为跨账户 AWS Glue 访问。配置账户后,消费者账户可以从 Athena for Spark 对所有者的 AWS Glue 数据库和表运行查询。
步骤 1:在 AWS Glue 中,提供对使用者角色的访问权限
在 AWS Glue 中,所有者创建了一个策略,为消费者的角色提供对所有者 AWS Glue 数据目录的访问权限。
添加允许消费者角色访问所有者数据目录的 AWS Glue 策略
-
使用目录所有者的账户登录 AWS Management Console。
通过 https://console.aws.amazon.com/glue/
打开 AWS Glue 控制台。 -
在导航窗格中,展开数据目录,然后选择目录设置。
-
在数据目录设置页面的权限部分,添加如下所示的策略。本策略为使用者账户
666666666666
提供了访问拥有者账户999999999999
中数据目录的角色。{ "Version": "2012-10-17", "Statement": [ { "Sid": "Cataloguers", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
666666666666
:role/Admin", "arn:aws:iam::666666666666
:role/AWSAthenaSparkExecutionRole" ] }, "Action": "glue:*", "Resource": [ "arn:aws:glue:us-west-2:999999999999
:catalog", "arn:aws:glue:us-west-2:999999999999
:database/*", "arn:aws:glue:us-west-2:999999999999
:table/*" ] } ] }
步骤 2:配置使用者账户的访问权限
在消费者账户中,创建允许访问所有者 AWS Glue Data Catalog、数据库和表的策略,并将该策略附加到角色。以下示例使用消费者账户 666666666666
。
创建访问所有者 AWS Glue Data Catalog 的 AWS Glue 策略
-
使用消费者账户登录 AWS Management Console。
通过 https://console.aws.amazon.com/iam/
打开 IAM 控制台。 -
在导航窗格中,展开访问管理,然后选择策略。
-
选择创建策略。
-
在指定权限页面上,选择 JSON。
-
在策略编辑器中,输入如下所示的 JSON 语句,该语句允许对所有者账户的数据目录进行 AWS Glue 操作。
{ "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/*", "arn:aws:glue:us-east-1:999999999999
:table/*" ] } ] } -
选择下一步。
-
在审核并创建页面上,对于策略名称,输入策略的名称。
-
选择创建策略。
接下来,您可以在消费者账户中使用 IAM 控制台将您刚刚创建的策略附加到消费者账户将用于访问所有者数据目录的 IAM 一个或多个角色。
将 AWS Glue 策略附加到消费者账户中的角色
-
在消费者账户 IAM 控制台的导航窗格中,选择角色。
-
在角色页面上,找到您要将策略附加到的角色。
-
选择添加权限,然后选择附加策略。
-
找到您刚刚创建的策略。
-
选择策略对应的复选框,然后选择添加权限。
-
重复上述步骤,将策略添加到要使用的其他角色。
步骤 3:配置会话并创建查询
在 Athena Spark 中,在请求者账户中,使用指定的角色创建会话,通过创建笔记本或编辑当前会话来测试访问权限。配置会话属性时,请指定以下选项之一:
-
AWS Glue 目录分隔符:使用这种方法,您可以在查询中包含所有者账户 ID。如果您要使用会话查询来自不同所有者的数据目录,请使用此方法。
-
AWS Glue 目录 ID:使用这种方法,您可以直接查询数据库。如果您要使用会话仅查询单个所有者的数据目录,则此方法会更方便。
编辑会话属性时,添加以下内容:
{ "spark.hadoop.aws.glue.catalog.separator": "/" }
在单元格中运行查询时,请使用与以下示例类似的语法。请注意,在 FROM
子句中,数据库名称前必须有目录 ID 和分隔符。
df = spark.sql('SELECT requestip, uri, method, status FROM `
999999999999
/mydatabase`.cloudfront_logs LIMIT 5') df.show()
编辑会话属性时,输入以下属性。将 999999999999
替换为所有者账户 ID。
{ "spark.hadoop.hive.metastore.glue.catalogid": "
999999999999
" }
在单元格中运行查询时,请使用与以下类似的语法。请注意,在 FROM
子句中,数据库名称前不能有目录 ID 和分隔符。
df = spark.sql('SELECT * FROM mydatabase.cloudfront_logs LIMIT 10') df.show()
其他资源
《AWS Lake Formation 开发人员指南》中的同时使用 AWS Glue 和 Lake Formation 管理跨账户权限。
AWS 规范性指导模式中的使用 Amazon Athena 配置对共享 AWS Glue Data Catalog 的跨账户访问权限。