AWS S3 - 存储和提供非私有映像

时间:2018-03-02 23:21:32

标签: php amazon-web-services amazon-s3 flysystem

我是第一次使用Flysystem使用S3(在本例中是特定用户个人资料头像图像)实现文件上传。我目前正处于创建S3存储桶的位置,用户可以上传图像,然后在存储桶控制台中在线显示。

我现在需要能够在请求时显示这些图像(即查看该用户的个人资料)。我假设这个过程是生成URL(例如https://s3.my-region.amazonaws.com/my-bucket/my-filename.jpeg)并将其用作图像标记的src但是为了做到这一点,文件(或桶)必须标记为上市。这对我来说似乎很合理,因为其中的文件并不是真正的私有。将存储桶更新为公共状态时,会显示一条消息,说明;

  

我们强烈建议您永远不要授予对S3存储桶的任何类型的公共访问权限。

是否有一种不同的,或更安全的方式来实现这样的直接图像链接,而AWS的新手却没有看到?

2 个答案:

答案 0 :(得分:3)

警告就在那里,因为很多人无意中将信息公之于众。但是,如果您对任何时候Internet上的任何人都可以访问这些特定文件感到高兴,那么您当然可以将各个对象公开或创建Amazon S3存储桶策略以使特定路径公开。

授予访问权限的另一种方法是创建S3 Pre-Signed URL,这是一个限时访问私有对象的URL。

您的应用程序将负责验证是否应授予用户访问特定对象的权限。然后它将生成URL,为访问提供持续时间。然后,您的应用程序可以将URL插入src字段,图像将正常显示。但是,一旦持续时间过去,将无法再访问它。

这通常在提供对私有文件的访问时使用 - 类似于DropBox如何在不使文件本身公开的情况下访问私有文件。

答案 1 :(得分:0)

我建议将cloudfront放在静态资产的前端(无双关语),这样一来,它将在整个数据中心(不仅是您上载的区域)内为您提供服务,而且我认为这会减少您的费用,因为它不使用S3存储桶中的带宽。 这样,您就可以向S3存储桶授予cloudfront权限,而无需手动在存储桶中设置公共文件。 Google如何为Cloudfront和S3设置IAM用户以进行设置。