S3删除文件报403 AccessDenied错误求助(Spring Boot)
排查S3删除文件403 Access Denied问题的步骤
检查桶策略的Resource配置
你的桶策略仅声明了Action,必须确保Resource覆盖到桶内的对象级别。正确配置需包含对象ARN:"Resource": [ "arn:aws:s3:::your-bucket-name", "arn:aws:s3:::your-bucket-name/*" ]仅配置桶ARN(
arn:aws:s3:::your-bucket-name)无法授权对象级别的DeleteObject操作,必须添加/*覆盖所有桶内对象。确认实际使用的凭证权限
虽然你提到用root用户执行,但要检查Spring Boot配置文件(application.properties/application.yml)中的aws.access-key和aws.secret-key是否确实对应root账号。若误配置为其他IAM用户凭证,该用户可能缺少DeleteObject权限。排查是否存在拒绝规则
逐一检查以下可能的限制:- 桶策略中是否包含
Deny语句,比如通过IP、用户或条件限制删除操作; - 账号是否受**组织SCP(服务控制策略)**约束,SCP可能禁止S3的DeleteObject操作;
- 桶是否开启对象锁(Object Lock),若对象有合法保留/合规保留策略,即使有Delete权限也无法删除。
- 桶策略中是否包含
版本化场景的特殊处理
若开启桶版本化,deleteObject方法默认仅添加删除标记(Delete Marker),不会真正删除对象,但这不会触发403错误。如需彻底删除版本化对象,需调用deleteVersion方法并指定版本ID:getS3Object.deleteVersion(bucketName, key, versionId);同时确保桶策略包含
s3:DeleteObjectVersion权限。验证请求区域与桶区域一致
检查S3客户端配置的区域是否与桶所在区域完全匹配。区域不匹配可能导致签名错误,进而触发403。检查对象路径准确性
确认传入的key值与S3中对象的实际路径完全一致(区分大小写)。部分场景下,对象不存在也可能返回403(而非NoSuchKey),尤其是桶策略限制了对不存在对象的访问时。
内容的提问来源于stack exchange,提问作者Sheikh
相关产品推荐
相关产品推荐

