如何使用 Amazon S3 创建一次性下载链接?

我想创建一个指向 Amazon s3 托管文件的一次性下载链接。下载文件后,此链接将过期。

我希望此文件仍托管,但访问者只能下载该文件一次。

我需要这样做的场景是:我有一个文件下载网站,用户在其中为文件付费。我希望用户只能从网站(和Amazon s3)下载文件一次,我也不希望用户能够与其他人共享直接下载链接。

如果这是不可能的,我想知道如果可能的话,通过IP地址或Cookie来限制它是否更有效?


答案 1

无法告诉 S3 只允许链接使用一次。但是,您可以创建一个只能在指定时间之前使用的链接。我所做的是将请求者重定向到几分钟后过期的 S3 链接,这样他或她就没有时间共享它。您可以使该过期时间非常短,甚至几秒钟,只要他们的浏览器有时间接收重定向响应并遵循它。


答案 2

您可以编写“一次性 URL 生成器”服务(以网站或 rest API 的形式),并利用 aws 联合身份用户功能来实现此目的。

请考虑以下过程:

  • 当用户想要一次性网址时,他们会将请求发送到您的“一次性网址生成器”服务。
  • 您的服务会生成一个“一次性 URL”并将其返回给用户。URL 是到用户所需 S3 资源的一对一映射。
  • 当用户向“一次性 URL”发出请求时,该服务将使用 AWS 联合身份用户功能创建一个临时用户,并代表临时用户生成一个 S3 预签名 URL。
  • 服务将响应发送回用户,重定向到预签名的 url。
  • 用户遵循重定向,并开始下载文件。
  • 然后,该服务将删除临时用户。(或者让它过期。

推荐