如何修复AWS Glue作业调用HeadObject时的403 Forbidden错误?
AWS Glue作业S3 HeadObject 403 Forbidden错误排查原因
问题背景
我尝试运行一个Spark AWS Glue作业,已将.py脚本文件上传至名为jobfiles_s3_bucket的S3存储桶。作业运行时尝试将该脚本从存储桶复制到本地临时目录,相关日志如下:
S3 Copy Started: SRC: s3://<insert_bucket_here>/glue-job.py DEST: /tmp/g-8aa076b857cf7854bfe423a40d5c07863eb091a9-2843067097771260387/script_2024-01-21-00-17-12.py Specifying ap-southeast-2 while copying script. S3 copy with region specified failed. Falling back to not specifying region.
随后触发403权限错误:
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden Error downloading script: fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden
该Glue作业关联的IAM角色已配置包含S3读写权限的策略(资源范围覆盖目标存储桶和临时目录):
{ "Sid" : "AccessPointRWDAccessands3access", "Effect" : "Allow", "Action" : [ "s3:*Object", "s3:Put*", "s3:List*", "s3:Get*", "s3:Delete*" ], // 资源配置已覆盖jobfiles_s3_bucket及相关路径 }
可能的故障原因
- S3存储桶策略限制:即使IAM角色有允许权限,存储桶的桶策略可能存在
Deny语句拦截了HeadObject请求,或未明确允许该IAM角色的访问。需检查桶策略的权限规则。 - IAM策略资源范围不完整:需确认策略中的资源ARN是否包含对象级别路径(如
arn:aws:s3:::jobfiles_s3_bucket/*),仅指定存储桶ARN(arn:aws:s3:::jobfiles_s3_bucket)无法满足HeadObject这类对象级操作的权限要求。 - S3访问点配置异常:如果使用S3访问点,需确认访问点的权限策略允许该IAM角色执行
HeadObject,同时检查访问点与存储桶的区域是否匹配(日志中区域指定失败可能与此相关)。 - IAM角色信任策略错误:检查角色的信任策略是否允许Glue服务(
glue.amazonaws.com)扮演该角色,若可信实体未包含Glue,作业将无法获取有效权限。 - S3对象ACL限制:目标脚本对象的ACL若设置为私有,且未授予IAM角色或其所属AWS账户读取权限,会触发403错误。可查看对象的ACL配置。
- 区域不匹配导致签名错误:存储桶实际所在区域与Glue作业指定的区域(ap-southeast-2)不符,会导致请求签名失效。确认存储桶区域与作业区域一致,或策略允许跨区域访问。
- IAM权限边界限制:若角色设置了权限边界,即使附加了允许策略,边界可能限制了
HeadObject操作。检查权限边界是否包含所需的S3操作。 - 临时凭证获取异常:Glue作业获取的临时IAM凭证可能存在权限缺失或过期,可通过CloudTrail日志查看请求使用的凭证及权限情况。
内容的提问来源于stack exchange,提问作者dzartovs
相关产品推荐
相关产品推荐

