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

Jam*_*ley 3 php amazon-s3 amazon-web-services flysystem

我是第一次使用Flysystem使用 S3(在这种情况下特别是用户配置文件头像图像)实现文件上传。我目前正处于创建 S3 存储桶的阶段,用户可以上传图像,然后可以在存储桶控制台中在线查看该图像。

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

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

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

Joh*_*ein 7

之所以发出警告,是因为许多人无意中公开了信息。但是,如果您希望 Internet 上的任何人随时可以访问这些特定文件,那么您当然可以将各个对象设为公开或创建 Amazon S3 存储桶策略来公开特定路径。

授予访问权限的替代方法是创建一个S3 预签名 URL,这是一个有时限的 URL,可授予对私有对象的访问权限。

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

这通常用于提供对私人文件的访问权限——类似于 DropBox 如何在不公开文件本身的情况下访问私人文件。