仅将 S3 对象 URL 限制为网站上的登录用户

Posted

技术标签:

【中文标题】仅将 S3 对象 URL 限制为网站上的登录用户【英文标题】:Restrict S3 objects URL only to logged in users on a website 【发布时间】:2021-09-03 04:27:08 【问题描述】:

我的网站在 AWS S3 存储桶上托管了一些文件,但我需要将对 s3 对象 URL 的访问限制为仅登录网站的用户。类似于谷歌驱动器的工作方式。这意味着任何试图访问我们 S3 存储桶中任何文件的 URL 的人都需要先登录网站,然后才能登录。

这可能吗?

谢谢

【问题讨论】:

您可以从限制对存储桶的公共访问开始。接下来是为登录的用户创建临时令牌并生成在特定持续时间内有效的对象的临时 url... docs.aws.amazon.com/AmazonS3/latest/userguide/… 【参考方案1】:

如果您想限制对 S3 对象的访问,请不要公开对象,也不要使用 AWS S3 控制台上显示的公共 URL。

S3 提供了一个选项来生成预签名 URL 以下载 S3 对象。因此,一旦您的用户登录到您的网站并请求下载 S3 对象,请向 S3 发出请求以生成此预签名 URL。单击预签名的 URL 将下载对象。

使用预签名 URL,您可以配置其他选项,例如到期时间,从而使这些 URL 更加安全。

您可以在here 找到有关预签名 URL 及其实现的更多信息。

【讨论】:

我已经有了这个实现,我是使用 Cloudfront 完成的,我试图复制(虽然不完全是)Google 驱动器的工作方式,然后才能访问其资源的任何 URL,具体取决于权限?如果您获得授权,您需要实际登录您的 gmail 并访问它。【参考方案2】:

如果您碰巧将 AWS Cognito 用于登录/注销功能,则可以将 IAM 角色分配给登录的用户。

这样在尝试访问 s3 存储桶时,您可以使用 IAM 角色限制访问。

AWS Amplify 非常适合此用例。

【讨论】:

以上是关于仅将 S3 对象 URL 限制为网站上的登录用户的主要内容,如果未能解决你的问题,请参考以下文章

Ionic App 被 iOS“仅限特定网站”限制阻止

Nginx如何限流?

使用预签名 URL 上传到 Amazon S3 时限制对象大小

仅将 API URL 限制为 Android 应用程序

IAM S3 仅将数据复制到属于组织的账户

仅限注册用户访问 Amazon S3 静态网页