上传到 AWS S3 得到 403 Forbidden - 通过删除参数中的 "ACL" 解决

Upload to AWS S3 got 403 Forbidden - Solved by remove "ACL" in param

我正在使用 React.js 开发前端,我使用 Javascript SDK 上传文件使用我的根 AWS 帐户到我的 S3 存储桶。 我遵循了官方文档,但一直收到 403 Forbidden。如果遇到同样的情况,可以尝试在上传时去掉params中的"ACL"来解决。

我基本上按照addPhoto()函数中官方文档中的演示代码进行操作: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album-full.html 我在这里还提到了另一个博客 post: https://medium.com/@fabianopb/upload-files-with-node-and-react-to-aws-s3-in-3-steps-fdaa8581f2bd

他们都在s3.upload(params)函数中添加了ACL: 'public-read'参数

  // Use S3 ManagedUpload class as it supports multipart uploads
  var upload = new AWS.S3.ManagedUpload({
    params: {
      Bucket: albumBucketName,
      Key: photoKey,
      Body: file,
      ACL: "public-read"
    }
  }); 

但在我的例子中,我一直收到 403 Forbidden,直到我简单地删除了这个 ACL 字段。有人能告诉我这是什么原因吗?或者 AWS 更新了他们处理 ACL 参数的方式?

您的存储桶可能 Amazon S3 block public access 已激活(默认设置)。

其中一项设置是:“阻止 public 访问通过新访问控制列表 (ACL) 授予的存储桶和对象”

这意味着它将阻止任何通过 ACL 授予 public 访问权限 的命令(例如您的命令)。您的代码将 ACL 设置为 public-read,因此被阻止。

S3 阻止的目的Public Access 是默认设置,不会意外生成任何 S3 内容public。您可以停用 S3 块 Public 访问以更改此设置。

S3 Block Public Access 相对 是新的(2018 年 11 月),所以网络上的很多文章可能都是在“默认阻止”之前写的规则生效。