跨AWS账号S3访问拒绝问题:Glue表更新后权限异常排查
问题描述
我将CSV文件按导出时间存储在不同的S3文件夹中,示例路径:
s3:/mybucket/vloging/202302051000/export.csv s3:/mybucket/vloging/202302050900/export.csv s3:/mybucket/vloging/202302041800/export.csv s3:/mybucket/vloging/202302041900/export.csv
我在Glue Catalog中创建了指向最新导出文件夹的外部表demo,建表语句如下:
create external table demo ( id int, name string, location string ) STORED AS PARQUET LOCATION 's3://mybucket/vloging/202302051000/'
当有新导出文件时,我通过Lambda调用Glue.Client.update_table API更新表的存储位置。但已授予访问权限的另一AWS账号用户,在Glue ETL作业中访问该表时出现S3访问拒绝错误。请问除了更新表之外,还需进行哪些操作来解决该问题?
解决步骤
更新S3桶的跨账号权限策略
确保S3桶的权限策略中,已允许目标AWS账号(或其对应的IAM角色/用户)访问新的S3文件夹路径。如果之前的权限仅针对旧文件夹,需更新为覆盖所有导出文件夹前缀,示例策略片段:{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::目标账号ID:root" }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket/vloging/*", "arn:aws:s3:::mybucket" ] }同步Lake Formation权限(若启用)
若使用Lake Formation管理数据权限,仅更新Glue表位置不会自动同步权限到新S3路径:- 在Lake Formation控制台注册新的S3路径;
- 重新为目标账号授予
demo表的SELECT等必要权限,确保权限覆盖新存储路径。
检查Glue ETL作业执行角色权限
目标账号的Glue ETL作业执行IAM角色,需具备访问新S3路径的权限。确认该角色的IAM策略包含对arn:aws:s3:::mybucket/vloging/新时间戳文件夹/*的s3:GetObject和s3:ListBucket权限,或直接授权整个vloging/前缀以避免重复调整。刷新Glue表元数据
调用Glue.Client.start_crawlerAPI(若有对应爬虫),或在Glue控制台手动刷新表元数据,避免作业因缓存访问旧路径。验证跨账号资源共享配置
确认跨账号信任关系正确:- 若使用RAM共享,确保共享资源包含新的S3路径;
- 目标账号的IAM实体无权限边界限制其访问新S3路径。
内容的提问来源于stack exchange,提问作者sammy morgan
相关产品推荐
相关产品推荐

