AWS S3实现私有文件服务

6

使用案例:我们正在开发一个Web应用程序,客户要求我们使用AWS S3来存储图像。 在该应用程序中,每个人都将拥有自己的帐户并上传自己的图像,其中一些上传的图像将是公共的。

根据我的理解,我们可以通过使用预签名URL来上传图像来实现此目的。但我面临的问题是如何限制其他用户访问这些图像。


1
您应该为每个已登录的用户提供一个唯一的预签名URL,以便只有他们可以访问图像。 - samayo
3个回答

9

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

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

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

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

通过使用预先签名的URL,可以增强此功能,这些URL是时间限制的URL,可提供对存储在Amazon S3中的私有内容的访问。操作方式如下:

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

预先签名的URL包括:

  • 请求的对象的引用
  • 与具有访问对象权限的IAM(身份和访问管理)实体相关联的Access Key - 例如,您可以创建一个具有必要权限的IAM用户,然后将这些访问凭据提供给您的应用程序
  • 到期时间戳,指示预先签名的URL的有效期
  • 加密计算的签名,可验证预先签名的URL是由拥有访问密钥的实体创建的(实际上,它验证密码并对上述信息进行散列运算)

预先签名的URL可以仅使用几行代码创建,而不需要调用AWS API。

最重要的是:使所有图像保持私有。您的应用程序会动态确认每个用户访问图像的权利,然后生成URL以授权有时限的访问。


1
如果您计划实施细粒度访问控制,则可以采用多种方法。作为第一步,您需要为每个用户设置唯一的空间来上传内容。这可以是存储桶或存储桶中的路径前缀(您可以将其视为目录)。
通常,我建议使用路径前缀来分区用户空间,这将使您能够使用IAM角色或创建预签名URL以进行所需的细粒度访问控制,以便特定用户可以访问自己的空间。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接