限制对 S3 静态网站的所有访问,我们的 Elastic Beanstalk 网站除外

Restrict all access to S3 static website except from our Elastic Beanstalk website

我们有一个 Elastic Beanstalk 实例为我们的 PHP 网站 (example.com) 提供服务。我们刚刚添加了一个服务于不同静态网站的 S3 存储桶 (static.com)。

EB 网站 (example.com) 需要提供给最终用户登录的特定凭据。我们希望 S3 网站 (static.com) 仅对已登录的用户可见- 在 EB 网站的用户 (example.com) .

用例:

  1. 用户登录“example.com”。在该站点内,将有指向“static.com”上文件的链接。单击这些链接会将用户带到“static.com”上的文件,他们可以在该站点上导航。

  2. 有人 URL 到“static.com”上的页面。也许有人与他们分享了 URL(这是预期的行为)。当他们尝试在浏览器中加载 URL 时,他们将被重定向到“example.com”的登录屏幕进行登录。

最好、最简单的方法是什么? Cookies、Cloudfront、Lamda 函数? “签署 URLs” 听起来像是一个可能的途径,但 URLs 不能随时间改变。这是一项要求,以防用户确实共享 URLs(这是预期的并且可以)。示例:嘿 Johnny,查看“static.com/docs/widget_1.html”

处的信息

如果您有私人内容,CloudFront 签名 URL 是在有限时间内为应用程序的经过身份验证的用户生成唯一 URL 的正确选择。每次用户加载页面时,您都会生成新的 short-lived 个网址。

如果您想让某人能够共享 link,一种选择是在您的应用程序中为用户提供一个共享选项,该选项生成一个具有固定数量的更长 TTL 的 SignedURL(例如, 3天)分享。或者允许用户 select 可共享 link 应该有效的时间长度,最大允许时间段为 x hours/days。如果 link 过期,他们可以在应用程序中生成一个新的。