3

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

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

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

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

4

2 回答 2

7

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

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

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

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

于 2018-03-03T02:23:14.200 回答
0

我建议将 cloudfront 放在静态资产的最前面(没有双关语),这样它就可以在他们的数据中心中提供服务,而不仅仅是您上传的区域,我认为这会减少您的费用,因为它不会使用 S3 存储桶中的带宽。这样您就可以为您的 S3 存储桶授予云端权限,而无需手动在您的存储桶中设置公开文件。谷歌如何为云端和 S3 设置 IAM 用户以帮助您进行设置。

于 2018-09-02T11:05:23.133 回答