我一直在从事Django项目。我的静态文件昨天在本地和生产环境中都无法正常运行
,我发现几乎所有文件都无法在S3上打开。它显示为<AccessDenied>
。我发现可以通过更改存储桶策略来解决此问题。静态文件现在可以正常工作,但是当我将其更改为公共文件时,它会显示
此存储桶具有公共访问权限 您已提供对此存储桶的公共访问权限。我们强烈建议您不要授予对S3存储桶的任何公共访问权限。
所以我想知道是否有更好的方法来使静态文件正常工作。即使存储桶不是公共的,但静态文件也可以正常工作,但不能突然工作。我想知道为什么。
答案 0 :(得分:0)
建议通过signed requests提供指向S3存储桶中资源的链接的方法。
必须对资源的URL进行签名,而不是将其公开。这是一个在Cloudfront发行版后面签名的S3 url的伪造示例,请注意额外的查询参数(AWSAccessKeyId,Signature,Expires):https://kahsfkjshdf838.cloudfront.net/media/images/9fe76f4a7eaf48b3b51b65e4a4348f84.JPG?AWSAccessKeyId=MYAWSACCESSKEY&Signature=somesignaturehulcSCSS%2Bl%2FN3%2FgIc%3D&Expires=1537511748
这可以防止人们无限期地在自己的站点上使用S3存储桶中托管的图像,因为到期时间通常很短。如果您通过服务器对网址进行签名,则还可以实施其他节省费用的措施,例如速率限制。
请记住,如果您的图像在社交媒体网站上共享,您可能不希望它们在一周后过期,但是这些网站通常会缓存该图像,因此您可能不会遇到此问题。