如何在AWS Glue ETL作业中跨账户查询Athena视图(解决错误码10)
解决跨账户Athena视图在Glue ETL中触发错误码10的方案
错误码10的本质是Glue ETL原生不支持直接读取跨账户Athena视图的元数据或底层数据,以下是几个经过验证的落地解决方法:
方法一:同步视图数据到本账户物化表
这是最稳妥的方案,直接绕开跨账户视图的访问限制:
- 在Athena中执行CTAS语句,把跨账户视图的数据同步到本账户的S3存储:
CREATE TABLE my_account.my_db.synced_table WITH ( format = 'Parquet', external_location = 's3://my-account-bucket/synced-data/' ) AS SELECT * FROM cross_account.cross_db.target_view - 执行完成后,Glue数据目录会自动生成对应表的元数据,直接在ETL作业中访问这个
synced_table即可 - 可配合CloudWatch Events触发Athena定时查询,定期刷新数据
方法二:直接基于底层数据源创建Glue外部表
如果能获取到跨账户视图对应的底层S3数据源权限:
- 先在Athena中执行
SHOW CREATE TABLE cross_account.cross_db.target_view,提取视图定义里的底层S3路径和数据schema - 在本账户的Glue数据目录中创建外部表,指定上述S3路径和匹配的schema
- 要求原账户的S3桶策略添加允许本账户Glue角色的
s3:GetObject、s3:ListBucket权限,确保Glue作业能访问底层数据
方法三:配置跨账户Glue数据目录共享(兼容性有限)
如果必须保留视图结构,可尝试跨账户元数据共享:
- 原账户的RAM管理员创建资源共享,把目标视图所在的Glue数据库共享给本账户
- 本账户接受共享后,在Glue作业中使用完整ARN路径访问视图,示例:
df = spark.read.table("arn:aws:glue:us-east-1:123456789012:database/cross_db.table/target_view") - 同时给Glue作业角色添加针对原账户资源ARN的
glue:GetTable、glue:GetDatabase权限,以及底层S3的访问权限
通用权限检查
无论采用哪种方法,都要确认:
- Glue作业角色具备访问目标数据存储(S3)的权限
- 原账户的相关资源(S3桶、Glue数据目录)已配置正确的跨账户访问策略
内容的提问来源于stack exchange,提问作者cpljp
相关产品推荐
相关产品推荐

