S3 和 Web 应用程序

S3 and Web Applications

我正在制作一个使用 S3 存储大量用户媒体的应用程序,稍后我会向用户显示这些媒体文件。我正在尝试找出实现此目标的最佳和最安全的方法。

我读到将媒体存储在 S3 上,然后使用 S3 中的 url 加载媒体可能是一个糟糕的选择,因为它可能会公开您可能不想公开的信息。在将所有媒体加载到页面之前将所有媒体从 S3 下载到服务器是否正确?如果我必须继续从那里下载媒体以显示它,这似乎首先违背了 S3 的目的。

完成此操作的最佳做​​法是什么?

我希望得到一点建议。

谢谢!

S3 的使用方式有很多种。没有一个 "best-practice".

通过网络服务器提供所有内容:

在此场景中,S3 仅用作存储介质。通过 Web 服务器请求内容,然后从 S3 下载内容并将内容转发给客户端。

在这种情况下,客户端不知道 S3 存储桶。

这并没有违背 S3 的目的,因为 S3(在这种情况下)的目的是内容存储,而不是交付。

从 public S3 存储桶提供内容:

在这种情况下,您设置 S3 存储桶以直接提供内容。在这种情况下,所有内容都是 public,因此使用直接链接到来自 Web 应用程序的内容。任何人都可以下载 S3 存储桶中的所有内容。

bucket可以引用为bucket.s3-website.amazonaws.com,或者在自己的域下。

此方案的好处是它可以从您的 Web 服务器卸载内容交付。

从私有 S3 存储桶提供内容:

在这种情况下,您的存储桶是私有的,但您仍然直接提供内容。使用此系统,您可以创建过期的预签名 URL 来保护私有内容。内容直接从S3下载,但不是所有内容都可以下载。

与前面的场景一样,这个场景的好处是它可以从您的 Web 服务器卸载内容交付。

CloudFront:

您可以在应用程序前使用 CloudFront and/or S3 存储桶来执行以下任一操作:

  1. 缓存内容,加速全球交付,
  2. 结合 WAF 保护您的 Web 服务器

最后的想法:

您选择的设置取决于您的应用程序。