gpt4 book ai didi

amazon-web-services - AWS CloudFront 使用查询字符串返回来自 S3 源的访问被拒绝

转载 作者:行者123 更新时间:2023-12-03 13:45:04 25 4
gpt4 key购买 nike

如本文所述,我已经设置了 CloudFront 分配和 Lambda@Edge 函数:

https://aws.amazon.com/blogs/networking-and-content-delivery/resizing-images-with-amazon-cloudfront-lambdaedge-aws-cdn-blog/

我现在想将 S3 存储桶限制为私有(private),并且只允许 CloudFront 分配访问存储桶。我已在 S3 Origin 配置中添加了 Origin Access Identity,并更新了存储桶策略以允许此 OAI GetObject 访问存储桶。我已从存储桶策略中删除了使其公开可读的语句,并将 ACL 更改为私有(private)。如果我在对 CloudFront 的请求中未包含任何查询字符串参数,则会按预期返回图像,并且无法直接访问 S3 链接。

但是,该解决方案依赖于传入查询参数来动态调整图像大小(通过 2 个 Lambda@Edge 函数),并且在将存储桶设为私有(private)后,我从 CloudFront 收到拒绝访问 403 响应。

我尝试禁用没有效果的查询字符串的转发。我还尝试仅更新存储桶策略以删除公共(public)读取访问权限,并将 ACL 保留为 PublicRead 并且它有效。所以这让我觉得 ACL 设置为私有(private)有问题

我想知道当存储桶被设为私有(private)时,S3 是否返回 403 而不是 404?但是我不明白为什么添加白名单查询字符串参数会产生与没有查询字符串的相同图像的请求不同的结果

更新

工作 URL 示例:http://<my_distro>.cloudfront.net/images/house.jpeg
损坏的 URL 示例:http://<my_distro>.cloudfront.net/images/house.jpeg?size=1200

最佳答案

经过调查发现,如果存储桶是私有(private)的,那么如果存储桶中不存在对象,则 S3 将返回 403 而不是 404,这从安全角度来看是有意义的(防止对象枚举等)。

当查询字符串存在时,来自博客文章的 Lambda 中的查看器请求代码转换了图像 url。如果此图像不存在,它会即时生成它。博客文章中的原始响应功能正在检查状态 404 以触发图像大小调整。但是,当存储桶设为私有(private)时,响应为 403,因此 Lambda@Edge 只是转发响应。解决方法是处理 403 或公开存储桶。我和前者一起去了

关于amazon-web-services - AWS CloudFront 使用查询字符串返回来自 S3 源的访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50008445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com