允许 CloudFront 访问 S3 源,同时还具有 S3 存储桶 阻止所有 public 访问?

Allow CloudFront to access S3 origin while also having S3 bucket Block all public access?

我正在尝试设置我希望我的 CloudFront 分配访问的 S3 存储桶。

我的客户使用 AWS 移动 SDK 上传到 S3。当客户端使用来自 S3 的文件时,我点击了 CloudFront,在我进行此更改之前一切正常:

创建分配时,我让 CloudFront 更新存储桶策略以将 OAI 包含在主体中:

所以,我认为我可以 运行 在 CloudFront 上进行 GET 调用,因为 CloudFront 具有 OAI 设置并且 S3 存储桶反映了这一点。

但是,我一直收到访问被拒绝的消息:

我还需要做什么来保护存储桶并仅允许 CloudFront 读取并允许我的客户端应用程序能够使用配置有我为其设置的 poolId 的 SDK 将文件上传到它?除非我不选中“阻止所有 public 访问”,否则我会通过 CloudFront 拒绝访问。

不幸的是,根据 documentation 的说法如下:

Amazon S3 Block Public Access must be disabled on the bucket.

这是因为它会根据 Block public and cross-account access to buckets and objects through any public bucket or access point policies 值忽略存储桶策略。

除非您的存储桶策略也默认允许匿名 GetObject,否则您的对象将不会是 public。