You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Amazon S3删除对象时遭遇Access Denied权限错误求助

解决S3删除对象时的Access Denied错误

你上传操作正常但删除报错,虽然IAM权限配置了s3:*,但还是有几个常见原因可以排查:

1. 检查S3桶的桶策略

桶策略的优先级高于IAM权限,如果桶策略里存在Deny DeleteObject的规则,哪怕IAM给了允许权限也会失效。

  • 登录S3控制台,找到目标桶,进入「权限」→「桶策略」
  • 排查是否存在类似规则:
{
    "Effect": "Deny",
    "Action": "s3:DeleteObject",
    "Resource": "arn:aws:s3:::your-bucket-name/*",
    "Principal": "*"
}

如果有,删除该拒绝规则或调整Principal的适用范围。

2. 检查桶是否开启了版本控制

如果S3桶开启了版本控制,调用DeleteObject只会给对象添加删除标记,而非真正删除对象。这种场景下,可能需要额外权限或调整操作逻辑:

  • 进入桶的「属性」→「版本控制」查看状态
  • 若开启了版本控制,要么关闭版本控制(谨慎操作,会永久删除历史版本),要么给IAM角色添加s3:DeleteObjectVersion权限:
{
    "Effect": "Allow",
    "Action": [
        "s3:*",
        "s3-object-lambda:*",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "*"
}

3. 检查对象的存储类与对象锁

  • 如果对象存储在冰川(Glacier)或智能分层的归档层,这类对象处于冻结状态,无法直接删除,需要先恢复到可访问状态
  • 确认对象是否开启了对象锁(WORM保护),锁过期前无法执行删除操作

4. Django Storages配置与对象路径检查

  • 显式配置桶名,避免潜在的桶匹配问题,在settings.py添加:
AWS_STORAGE_BUCKET_NAME = "你的桶名称"
  • 确认old_logo对应的对象路径是否正确,S3会对不存在的对象返回Access Denied(安全策略),可能是路径错误导致的假权限报错

5. 验证IAM权限的实际生效

确认当前使用的IAM角色/用户确实关联了配置的策略,避免用错凭证。可以用AWS CLI直接测试:

aws s3 rm s3://你的桶名称/对象的完整路径.jpg

如果CLI执行成功,问题出在Django代码或storages库;如果也报错,回到IAM和桶策略继续排查。


内容的提问来源于stack exchange,提问作者Axlic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:10:11