我正在构建一个小型网站,其中涉及用户上传稍后显示的图像。图像存储在 S3 存储桶中。
有时,我需要一次显示大量此类图像,并且我不确定如何最好地适应这种情况,而又不允许公众访问 S3。
目前,当向服务器发出请求时,服务器从 S3 下载对象,然后将文件返回给客户端 - 这是可以理解的缓慢。我希望能够返回 S3 URL 并从那里加载客户端(因此流量不必通过我的服务器,并且我不必等待从 S3-> 服务器下载图像->客户端,但我也不希望 S3 存储桶 URL 不安全且任何人都可以访问。
解决这个问题的最佳架构是什么?有没有办法给予人们对存储桶的非常短暂的临时许可?是否可以将其范围限制为特定网址?
我在 stackoverflow 和 github 上查找了类似的问题,但其中大多数似乎与文件的上传方式以及不安全地访问它们有关。
按照 @jarmod 的建议,您可以对对象的 URL 进行预签名。
在这种情况下,一旦需要共享图像,您需要为该对象创建预签名 URL 并共享此 URL。
您的服务器只会提供 URL。用户将直接访问图像,而无需您的服务器参与请求。
AWS 网站解释了如何使用预签名 URL: