我已经按照设置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
但是,我注意到了各个文件的权限,但不确定它们与之相关。
以下是我的CF设置:
分布:
来源:(在创建初始身份时,我选择了“是,更新存储桶政策”)
行为(上半部分):
行为(下半部分):
答案 0 :(得分:3)
存储桶策略和对象ACL协同工作。
策略或对象ACL允许的任何内容仍被允许...除非被存储桶策略明确拒绝。
您的政策允许通过CloudFront下载。
您的对象ACL允许“Everyone”“打开/下载”它们,因此,仍然允许匿名直接访问存储桶中的对象。
最正确的解决方案是修改对象ACL以消除“Everyone”“打开/下载”的能力,如果您不希望匿名用户从S3访问对象,这显然是不正确的。在控制台中,单击对象的“Everyone”条目上的×,然后单击“保存”。你会发现这解决了这个问题。
未来的对象不应上传为公开阅读。
这也可以使用自定义存储桶策略来覆盖对象ACL,但这是一种高级配置,如果操作不正确,会破坏您在控制台中操作对象的能力,并且会使事情变得不必要。