如何在S3存储桶阻止所有公共访问的同时,允许CloudFront访问S3源?

3

我正在尝试设置S3 bucket,以便我的CloudFront分发可以访问。

我使用AWS移动SDK从客户端上传到S3。当客户端从S3中消费文件时,我通过CloudFront处理,之前一切正常,直到我做了这个更改:

enter image description here

在创建分发时,我要求CloudFront更新bucket策略以包含OAI作为主体:

enter image description here

因此,我认为可以在CloudFront上进行GET调用,因为CloudFront已设置OAI并且S3 bucket反映出来。

但是,我仍然收到"Access denied"的错误消息:

enter image description here

我还需要做什么来确保bucket安全,并只允许CloudFront读取,同时允许我的客户端应用程序使用配置了池ID的SDK将文件上传到它?除非我不勾选"阻止所有公共访问",否则通过CloudFront会出现访问被拒绝的情况。


检查分发设置中的默认根对象。允许CloudFront访问S3存储桶对象是一个相当简单的过程。确保您正在访问对象所在路径的对象。 - Asdfg
1个回答

2
很不幸,根据文档中的说明,以下内容被声明:

必须在存储桶上禁用Amazon S3块公共访问。

这是因为它将忽略存储桶策略,由于阻止通过任何公共存储桶或访问点策略公开和跨帐户访问存储桶和对象的值。

除非您的存储桶策略还允许默认情况下匿名GetObject,否则您的对象将不会公开。


虽然这听起来很合理,但我认为它不正确(或者也许在当时是正确的,但现在不再是)。我没有详细研究过,但作为 AWS 服务工作台解决方案的一部分,会部署一个存储桶和 CF 分发,其中包含一个源访问标识。存储桶选择了所有“阻止公共访问”选项,并且策略中唯一的“允许”是针对具有正确源访问标识主体的s3:GetObject。这似乎非常简单,因此我怀疑 OP 在这里遇到了其他问题。 - Tim Malone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接