【问题标题】:Securing S3 bucket for users?为用户保护 S3 存储桶?
【发布时间】:2020-05-10 13:32:59
【问题描述】:

我开发了一个 react native 应用程序,使用 AWS Amplify 来支持后端(DynamoDB、S3)。该应用的所有用户都必须使用 Auth.signIn() 登录,并且是用户池的一部分。

进入后,他们可以开始通过应用将视频上传到 S3,或在应用中查看位于 PUBLIC 的 S3 存储桶中的视频。

我使用 S3 视频的路径 (https://myS3bucket....) 作为视频的源 URL。但是,只有当存储桶公开时,这些视频才在我的应用程序中可见。任何其他设置(受保护/私人)并且没有视频可见。我怎样才能使它更安全?

【问题讨论】:

  • 存储桶不需要公开。您可以在私有存储桶中拥有公共文件,这应该仍然有效。但是,如果您想保护文件以确保只有某些用户可以看到它们,您将需要您的服务器充当文件的代理,而不是提供对它们的直接 S3 访问。
  • 是的。您需要为将授予临时 URL 的文件创建 Pre-Signed URLs,该临时 URL 在您指定的时间内有效。我猜这应该对你有帮助。
  • @Panther URL 需要无限期可见。 S3 存储桶中的视频需要随时可供应用用户观看
  • 我希望您将视频文件限制为只能由已登录的用户访问。在这种情况下,拥有一个开放的 url 将导致任何人无需您的应用即可获得访问权限。最好的方法是保护它并根据需要生成。您也可以在对象级别执行 ACL,但不推荐。
  • @Panther 没错。现在任何人都可以访问该 URL。我需要将访问权限限制为仅登录的用户(通过 Auth.signIn() 或在我的用户池中)。这就是我需要帮助的地方。

标签: reactjs amazon-web-services react-native amazon-s3 aws-amplify


【解决方案1】:

S3 存储桶有 3 种管理安全性的方法:

  • IAM:与存储桶相同的 AWS 账户中的任何用户或角色都可以被授予与 S3 存储桶及其对象交互的权限。
  • S3 Bucket Policies:授予对 S3 存储桶的存储桶范围(或前缀)访问权限。
  • S3 ACLs - 每个对象级别的权限。

现在人们普遍建议不要使用 S3 ACL,因为它们的功能通过 S3 存储桶策略得到了改进。仅当您需要特定对象拥有一组不同的权限时才使用它们。

【讨论】:

  • 目前我是唯一的 IAM 用户(管理员)。但它确实有一个 Cognito 用户池,其中包含应用程序的所有用户。他们已通过身份验证以登录(通过 Cognito),并且该用户池需要能够在 S3 中上传和查看视频。我怎样才能让他们这样做,并阻止我的存储桶公开,以便任何人都可以访问视频的 URL?
  • 您好,您的用户可以绑定一个 IAM 角色:docs.aws.amazon.com/cognito/latest/developerguide/…。当他们登录时,您将可以访问一些可以输入 SDK 的临时凭证。授予此角色所需的权限。
【解决方案2】:

如果您希望经过身份验证的用户上传和/或下载文件,我建议不要公开文件或存储桶。为此,请使用S3 signed URLs 授予用户对文件的访问权限。换句话说,后端将相应地对用户进行身份验证,为他们生成签名的 URL,然后 React Native 应用程序将相应地解释该 URL,即视频文件。

您需要更改一些内容,但 this guide 应该涵盖这些内容

【讨论】:

  • 嗨 Vitalij,签名的 URL 会过期吗?我需要这些视频的 URL 始终可供应用程序的所有用户使用。现在,我的应用的所有用户都在 Cognito 用户池中。
  • 是的,预签名 URL 过期。但您不想要或不需要长期有效的凭据。
  • @jarmod 是对的,在短时间内生成它们,比如 2 小时。足以让人们通过 WhatsApp 共享它,并且足以向请求者授予权限。如果你不打算让第三方分享 20 分钟也应该没问题,只要确保你每次都生成一个新的签名 URL,它会让你的生活更轻松
【解决方案3】:

我最近发表了一篇文章,详细描述了安全最佳实践,有助于解决以下几点:

  • 如何保护存储敏感用户数据和应用程序代码的 S3 存储桶。
  • 如何安全地配置 CloudFront 分配。
  • 如何使用 CloudFront Functions 保护前端应用免受常见 OWASP 威胁。

了解更多have a look at the article

最好, 斯蒂芬

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2020-07-24
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    相关资源
    最近更新 更多