尽管CloudFront原始身份访问策略,S3存储桶仍然公开

时间:2016-10-01 21:36:35

标签: amazon-web-services amazon-s3 amazon-cloudfront

我已经按照设置CloudFront(CF)Web分发的文档来提供来自我的s3存储桶的私有内容,但是尽管调整了我的发行版中的设置,我的s3存储桶文件仍然可以通过{{1 }}。我很好奇为什么这仍然发生,因为当我创建一个CF Origin Access Identity时,我选择了s3.amazonaws.com/bucket-name/file-name.ext,我认为这将通过我的s3存储桶URL关闭读取访问,但它没有。我错过了应该进行的调整吗?我假设我在CF上进行的设置应该调整我的s3存储桶并使其无法通过GET请求访问。

这是我的s3 Bucket Policy:

Yes, Update Bucket Policy

但是,我注意到了各个文件的权限,但不确定它们与之相关。

enter image description here

以下是我的CF设置:

分布:

enter image description here

来源:(在创建初始身份时,我选择了“是,更新存储桶政策”)

enter image description here

行为(上半部分):

enter image description here

行为(下半部分):

enter image description here

1 个答案:

答案 0 :(得分:3)

存储桶策略和对象ACL协同工作。

策略对象ACL允许的任何内容仍被允许...除非被存储桶策略明确拒绝。

您的政策允许通过CloudFront下载。

您的对象ACL允许“Everyone”“打开/下载”它们,因此,仍然允许匿名直接访问存储桶中的对象。

最正确的解决方案是修改对象ACL以消除“Everyone”“打开/下载”的能力,如果您不希望匿名用户从S3访问对象,这显然是不正确的。在控制台中,单击对象的“Everyone”条目上的×,然后单击“保存”。你会发现这解决了这个问题。

未来的对象不应上传为公开阅读。

这也可以使用自定义存储桶策略来覆盖对象ACL,但这是一种高级配置,如果操作不正确,会破坏您在控制台中操作对象的能力,并且会使事情变得不必要。