Amazon Athena查询Glue Catalog部分表报S3路径访问被拒绝错误
Athena 查询部分Glue表触发S3权限拒绝问题排查方案
触发的报错信息如下:
Error opening Hive split s3://test/sample/run-1-part-r-03 (offset=0, length=1156) using org.apache.hadoop.mapred.TextInputFormat: Permission denied on S3 path: s3://test/sample/run-1-part-r-03
该报错本质是Athena执行查询所用的IAM身份,没有权限访问故障表对应的S3底层存储对象,部分表可正常查询说明Athena基础服务权限正常,可按照以下步骤排查:
- 第一步:核对IAM权限覆盖范围
检查你为Athena配置的IAM角色/用户的权限策略,确认是否同时包含以下权限:- 针对故障表S3前缀(本例中为
s3://test/sample/*)的s3:GetObject权限 - 针对故障表所属S3桶(本例中为
s3://test)的s3:ListBucket权限
很多场景下配置权限时只覆盖了正常表的S3前缀,遗漏了故障表的路径,会出现部分表查询失败的问题。如果故障表的S3对象使用KMS加密,还需要额外给Athena身份授予对应KMS密钥的kms:Decrypt权限。
- 针对故障表S3前缀(本例中为
- 第二步:检查S3对象所有权与ACL
如果故障表的S3对象是其他AWS账号跨账号上传的,默认对象ACL仅允许上传方访问,哪怕本账号有桶级权限也会被拒绝。可以查看报错S3对象的访问控制列表,确认本账号是否有读取权限:- 如果是跨账号上传场景,可要求上传方在上传时设置ACL为
bucket-owner-full-control - 也可以直接配置S3桶的对象所有权规则为「桶拥有者强制执行」,自动将所有桶内对象的所有权归属于桶所属账号
- 如果是跨账号上传场景,可要求上传方在上传时设置ACL为
- 第三步:排查Lake Formation权限限制
如果你开启了AWS Lake Formation管理Glue Catalog,仅配置IAM权限不足以访问数据,需要额外在Lake Formation控制台完成两项配置:- 将故障表对应的S3路径注册为Lake Formation的数据湖位置
- 给Athena所用的身份授予故障表的
SELECT权限,以及对应S3路径的数据位置访问权限
- 第四步:排查上层访问限制
检查是否存在更高层级的访问控制拦截了请求:- 查看S3桶策略、VPC端点策略,是否有规则禁止Athena身份访问故障路径
- 查看AWS组织的服务控制策略(SCP),是否限制了对对应S3路径的访问权限
- 验证方法
排查修改完成后,可以使用Athena对应的IAM身份执行AWS CLI命令验证S3访问能力:
若命令可正常返回对象内容,再执行Athena查询即可恢复正常。aws s3 cp s3://test/sample/run-1-part-r-03 -
内容的提问来源于stack exchange,提问作者Parag Shahade
相关产品推荐
相关产品推荐

