令人困惑的 s3 存储桶策略上传问题

Posted

技术标签:

【中文标题】令人困惑的 s3 存储桶策略上传问题【英文标题】:confusing s3 bucket policy upload issue 【发布时间】:2021-06-04 23:59:44 【问题描述】:

我希望我的应用能够将对象放入 s3 存储桶中,并且我希望公众能够读取这些对象。出于某种原因,除非我阻止所有公共访问,否则上传无法正常工作。日志显示此错误:Aws::S3::Errors::AccessDenied

我的阻止公共访问设置如下所示:

我的 Bucket 策略如下所示:


    "Version": "2012-10-17",
    "Statement": [
        
            "Sid": "GetPhoto",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::site-public/photo/*"
        
    ]

公共访问设置表明他们阻止存储桶策略,但该功能仍被阻止。为什么?

【问题讨论】:

什么功能被阻止(你的客户实际上在做什么?)以及错误代码/消息是什么? 如果您尝试使用公共 ACL 上传对象,除非您关闭所有选项,否则它将被阻止。 Blocking public access S3 Bucket。 @jarmod 客户端正在上传图片,错误为Aws::S3::Errors::AccessDenied。 @samtoddler 我一直对这个问题感到困惑。我的上传选项中有acl: "public-read"。我不应该阻止某些访问吗?我不希望每个人都能够上传,但我确实希望每个人都能够获取文件。如何在不暴露整个存储桶的情况下上传这些文件? 如果您希望能够使用公开读取 ACL 来selectively make objects public,那么您需要禁用与 ACL 相关的 BPA 设置。 您是如何尝试检索文件的,它们肯定在s3://site-public/photo/ 下吗? 【参考方案1】:

您似乎需要能够使用公共读取 ACL 选择性地使对象公开可读,因此您需要禁用与 ACL 相关的阻止公共访问设置。

【讨论】:

以上是关于令人困惑的 s3 存储桶策略上传问题的主要内容,如果未能解决你的问题,请参考以下文章

自动为整个 S3 存储桶设置缓存控制(使用存储桶策略?)

从专用用户访问 S3 存储桶(策略失败?)

使用 amazon sdk 和存储桶策略从 ios 应用程序将图像上传到 amazon s3

针对 Grafana 警报写入 s3 存储桶的 AWS IAM 策略问题

正确上传到 Amazon S3 的权限

AWS Lambda使用S3