【问题标题】:(End)User level access to objects in S3(完)对S3中对象的用户级访问
【发布时间】:2016-05-13 09:30:46
【问题描述】:


我们面临一个用例,我们需要在 S3 上存储用户的机密图像。现在,由于 S3 可以通过 HTTP 访问,并且如果我们授予对对象的读取访问权限,它们将通过 web 向世界提供。我们需要将图像/文件仅限于该用户。所以我们认为可能的解决方案是:

  1. 以某种方式屏蔽网址。(不知道具体如何)
  2. 通过创建唯一的加密 s3 密钥来存储文件/图像
    例如:http://bucket.s3.amazon.com/clients/img/j84jaljvkeh774d/myimage.jpg

在第一个中,我们可能无法获得 cloudfront 或 cdn 的好处,因为它可能涉及独立的代理服务器。

第二个是安全的,因为如果密钥名对用户来说是唯一的,则很难预测它。

使用 ACl 和存储桶策略 并不能完全解决问题。 此外,如果我们编写限制 IP 地址的策略,使用相同 API 后端的移动应用程序最终将无法正常工作,因为这些应用程序的请求来自不同的 IP。

我们知道我们无法完全保护它们,但我们有办法处理这种情况吗?请分享您的意见。

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    这可以通过选项一来实现。

    1. 禁止从 AWS 上的 S3 管理控制台公开访问文件。
    2. 如果你想限制访问,你只需要构建过期的 url。
    3. 我想每个用户都必须有一个唯一的可用密钥。您可以使用该密钥生成签名 URL。以编程方式为每个对象。 Here 是一个可供参考的示例。

    【讨论】:

    • 我们不想采用签名的 url 方式,因为它有创建和管理它们的开销。我们不会在用户之间共享 URL,只是希望它们对用户独占
    【解决方案2】:

    您想为此使用 presigned URLs。您为特定用户在固定(短)时间段内生成这些。如果这个 URL 被泄露,也没关系——因为它们已经过期了。

    如果您这样做,您存储桶中的所有内容都可以保持私密。

    如果您使用的是 Ruby,下面是您如何执行此操作的一瞥:https://github.com/aws/aws-sdk-core-ruby/commit/f946c113ff24d97673d8ffd43cb4012c8e211992

    【讨论】:

    • 该对象将永久存在,生成和维护 url 将是一项不同的任务。SDK 是否在内部管理它(在每个请求上生成一个签名的 url?)。你能指出一个例子。
    • 我不知道,你必须自己做。但是,是的,该对象被永久保存。只是动态创建可访问的 URL。
    • 我们不想共享 url。我们只想在应用程序中访问它。签名的 url 更适合文件共享用例。我们需要在用户仪表板的应用程序中显示它.只是我们不希望它被用户访问或使用,以防文件的 url 是可预测的。我希望我很清楚。
    • 是的,我知道您想“在内部”显示它,即在仪表板上。这是一个很好的做法(我们使用它,例如下载发票)。对于共享,签名的 URL 无论如何都没有多大意义——因为你永远不知道收件人何时打开带有链接的邮件,到那时它可能会过期;-)
    猜你喜欢
    • 2018-03-17
    • 2013-03-25
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2023-03-30
    • 2021-11-24
    相关资源
    最近更新 更多