【问题标题】:Amazon S3 Bucket Policy PublicAmazon S3 存储桶策略公开
【发布时间】:2021-01-15 13:01:13
【问题描述】:

我正在尝试在我的 Javascript 代码中创建一个 signedUrl PUT,该 URL 已经由我的 Node.js API 签名。

如果我将存储桶策略留空,我会在执行 PUT 请求时收到拒绝访问消息,但是,当我设置此策略时:

    "Version": "2012-10-17",
    "Id": "Policy1610714112327",
    "Statement": [
        {
            "Sid": "Stmt1610714107917",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::<bucketname>/*"
        }
    ]
}

我可以成功上传文件了。

我的问题是:使用此政策,任何人都可以将文件放入我的存储桶中吗?或者只是当他们有一个签名的 URL 时?

【问题讨论】:

  • 将内容上传到存储桶需要除这些设置之外的访问密钥。
  • @Kaushik 我已经有一个,但只在我的后端代码正在生成一个签名的 URL,问题是当我尝试上传文件时
  • 您是否将签名的 URL 分享给用户?
  • @Kaushik 是的,想法是直接从浏览器上传大文件
  • 我从您的策略中删除了存储桶名称并将其替换为占位符,如我的回答中所述,该策略很危险。

标签: javascript node.js amazon-web-services amazon-s3


【解决方案1】:

您已将 Principal 设置为 * 并在 stackoverflow 上共享存储桶名称 - 立即进行更改!

是的,任何人都可以将对象上传到您的存储桶!

您不一定需要预签名 URL 的存储桶策略,但创建 URL 需要执行上传的所有权限,即至少 s3:PutObject。 更多详情,请查看documentation。

【讨论】:

  • 我的问题是,当我尝试在没有上述策略的情况下使用 presignedUrl 放置文件时,我收到 AccessDenied 错误。生成 URL 的凭据拥有存储桶的所有权限。
  • @GustavoHenrique 我们可以解决这个问题,但这将是一个单独的问题 - 这个问题仅限于您的存储桶策略。混合主题会使这些问题更难被未来的读者理解/重用,所以请创建一个新的:-)(如果这个答案解决了你的问题,请随时接受它,让其他人现在这个问题已经解决)
猜你喜欢
  • 2011-09-10
  • 2023-02-26
  • 2013-01-08
  • 2013-12-21
  • 2012-04-05
  • 2019-04-20
  • 2023-03-31
  • 1970-01-01
  • 2016-08-05
相关资源
最近更新 更多