Java Spring Boot删除AWS S3对象遇Access Denied错误求助
解决AWS S3删除对象时的Access Denied(403)问题
针对你遇到的S3删除操作返回403拒绝访问的问题,按以下步骤排查解决:
1. 确认IAM用户权限
确保你的AWS Access Key对应的IAM用户拥有**s3:DeleteObject**权限,且权限策略覆盖目标Bucket和对象路径。示例策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:DeleteObject", "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*" } ] }
注意替换YOUR_BUCKET_NAME为实际Bucket名,资源路径要包含/*以覆盖Bucket下所有对象。
2. 验证凭证配置
检查application.properties中的aws.accessKeyId和aws.secretAccessKey是否正确:
- 无拼写错误、多余空格或特殊字符
- 如果部署在AWS托管环境(如EKS、ECS),优先检查是否使用了IAM角色而非配置文件密钥,确保角色绑定了正确的S3权限
3. 检查Bucket策略
登录S3控制台查看目标Bucket的Bucket策略:
- 确保没有拒绝该IAM用户执行
s3:DeleteObject的规则 - 确认策略中没有IP限制、条件限制等阻止当前请求的配置
4. 核对对象路径与Bucket名
在代码中添加日志,打印bucketName和fileName的实际值:
public void deleteFile(String fileName) { System.out.println("Deleting object from bucket: " + bucketName + ", key: " + fileName); amazonS3.deleteObject(bucketName, fileName); }
确认:
- Bucket名称完全匹配(区分大小写)
fileName是S3对象的完整键(包含前缀,如docs/report.pdf,而非仅report.pdf)
5. 检查对象ACL权限
如果目标S3对象单独设置了ACL,登录控制台查看该对象的权限:
- 确认当前IAM用户或其所属组拥有删除该对象的权限
- 避免对象ACL与Bucket策略、IAM权限冲突
6. 排查临时凭证问题
如果使用STS临时凭证:
- 检查凭证是否过期
- 确认临时凭证的权限列表包含
s3:DeleteObject
内容的提问来源于stack exchange,提问作者Kidungnirwana
相关产品推荐
相关产品推荐

