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

使用JavaScript SDK删除AWS S3 Bucket文件时遇权限拒绝问题求助

S3删除对象时出现Access Denied但上传正常的排查方案

问题场景

使用JavaScript SDK操作AWS S3时,可正常上传文件,但调用deleteObject接口返回权限拒绝错误,相关配置如下:

存储桶策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::twitter-clone-image-storage-zrs/*"
        }
    ]
}

删除文件函数

const s3 = new S3({
  region,
  accessKeyId,
  secretAccessKey,
});

export const deleteFile = (picture_key) => {
  const params = {
    Bucket: bucketName,
    Key: picture_key,
  };

  return s3.deleteObject(params).promise();
};

排查要点

  • 检查IAM实体权限
    存储桶策略允许了DeleteObject,但如果使用的IAM用户/角色本身未被授予该权限,仍会触发拒绝。需确认IAM实体的权限策略中包含s3:DeleteObject动作,且资源范围覆盖目标对象(arn:aws:s3:::twitter-clone-image-storage-zrs/*)。

  • 验证picture_key的准确性
    上传时生成的对象Key和删除时传入的picture_key必须完全一致,包括大小写、前缀路径(比如是否多/少了斜杠)。若Key不匹配,S3会因安全机制返回权限错误(而非直接提示对象不存在)。可打印picture_key的值,与S3控制台中对象的键做对比。

  • 确认存储桶版本控制状态
    若存储桶开启了版本控制,调用deleteObject只会添加删除标记而非真正删除对象,但通常不会返回权限错误。不过若没有权限添加删除标记(策略中已包含s3:DeleteObject,版本控制下该动作对应添加删除标记),也可能报错。可前往S3控制台确认版本控制状态,若开启,需确保权限允许s3:DeleteObject,或使用deleteObjectVersion删除特定版本。

  • 排查存储桶策略冲突
    确认是否存在其他存储桶策略语句(比如拒绝DeleteObject的规则),或桶的访问控制列表(ACL)限制了删除操作。当前策略的资源范围arn:aws:s3:::twitter-clone-image-storage-zrs/*已覆盖所有对象,需检查是否有优先级更高的拒绝规则。

  • 核对SDK配置信息
    确认bucketName变量值为twitter-clone-image-storage-zrs,无拼写错误;region与上传时使用的一致,避免跨区域访问引发权限问题。同时确保accessKeyId和secretAccessKey属于有权限的IAM实体,未被误配置为其他无权限凭证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:23:23