用于提供私有文件​​的AWS S3实现

时间:2017-11-11 10:58:42

标签: node.js amazon-web-services amazon-s3

使用案例:我们正在开发Web应用程序,客户端已要求我们使用AWS S3存储图像。在应用程序中,Everyone将拥有自己的帐户并将上传自己的图像,一些上传的图像将公开。

根据我的理解,我们可以通过使用预先编写的URL来上传图像。但我面临的问题是,如何限制对其他用户的图像访问。

3 个答案:

答案 0 :(得分:1)

您可以使用已签名的网址和已签名的Cookie来投放私人内容。如果您无法更改应用程序,使用私人链接可能不可行,签名的cookie可以帮助您。此外,CloudFront还提供了进一步的安全性和效率改进,请查看http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html

上的文档

答案 1 :(得分:1)

使用Amazon S3有两种基本方法:

  • 仅将其用作存储介质,只能由您的应用程序访问,或
  • 使用它直接向最终用户提供内容

在第一种情况下,只有您的应用程序可以访问存储在S3中的数据/文件。它必须检索内容并将其提供给用户。这是Web服务器的传统方法。

在第二种情况下,您可以生成包含对存储在S3中的文件的引用的HTML页面。例如,如果图像出现在网页中,则{{1}}参数将指向Amazon S3 URL。然后,该文件将从S3提供,而无需通过您的Web服务器。

这可以通过使用预签名URL来增强,这些URL是有时间限制的URL,可以访问存储在Amazon S3中的私人内容。它的工作原理如下:

  • 文件存储在S3中并保持私密(意味着不允许访问)
  • 您的应用程序完全负责确定哪些用户可以访问哪些文件
  • 当应用程序希望授予用户访问权限时(例如,他们可能希望查看自己的照片),它会生成一个预签名URL并将其包含在HTML页面中
  • 当用户的网络浏览器使用预签名URL访问内容时
  • Amazon S3收到请求,验证预签名网址上的签名和时间戳,如果获得批准,则提供文件以响应请求

预签名网址包含:

  • 对象请求
  • 的引用
  • 与具有访问对象权限的IAM(身份和访问管理)实体关联的访问密钥 - 例如,您可以创建具有必要权限的IAM用户,然后为您的应用程序提供这些访问凭据
  • 到期时间戳,直到预签名网址生效
  • 加密计算的签名,用于验证预签名URL是否由拥有访问密钥的实体创建(实际上,它会验证密码并散列上述信息)

预签名URL只需几行代码即可创建,无需调用AWS API。

底线:保持所有图片都是私密的。您的应用程序确认每个用户即时访问图像的权限,然后生成URL以授予限时访问权限。

答案 2 :(得分:0)

如果您计划实施细粒度的访问控制,您可以遵循多种方法。作为第一步,您需要为每个用户提供唯一的空间来上传内容。这可以是存储桶中的存储桶或路径前缀(您将其视为目录)。

通常我建议使用每个用户的路径前缀对用户空间进行分区,这样您就可以使用IAM角色或创建具有所需细粒度访问控制的预签名URL,以便特定用户可以访问自己的空间。