我们正面临一个用例,我们需要在S3上存储用户的机密图像。现在,因为可以通过HTTP访问S3,并且如果我们提供对对象的读访问权,那么它们将通过Web可供世界使用。我们只需要将图像/文件限制为该用户。所以我们认为可能的解决方案是:
http://bucket.s3.amazon.com/clients/img/j84jaljvkeh774d/myimage.jpg
在第一个中,我们可能无法获得cloudfront或cdn的好处,因为它可能涉及独立的代理服务器。
第二个是安全的,因为如果密钥名对用户来说是唯一的,那么它很难预测。
使用 ACl和存储分区政策无法完全解决问题。
此外,如果我们编写一个限制IP地址的策略,那么使用相同API后端的移动应用程序最终将无法正常工作,因为那些来自不同IP的请求。
我们知道我们无法完全保护它们,但我们是否有办法处理这种情况?请分享您的意见。
答案 0 :(得分:2)
这可以通过选项一来实现。
答案 1 :(得分:2)
您希望使用 presigned URLs 。对于特定用户,您可以在固定(短)时间段内生成这些内容。如果此URL被泄露,则无关紧要 - 因为它们会过期。
如果你这样做,你桶中的所有东西都可以保密。
如果你正在使用Ruby,这里可以看到你如何做到这一点:https://github.com/aws/aws-sdk-core-ruby/commit/f946c113ff24d97673d8ffd43cb4012c8e211992