通过特定应用程序的 S3 存储桶策略

S3 bucket policy via a particular application

我正在尝试利用 S3 让我的客户下载我的软件包。我设想的是创建一个带有授权的简单网络应用程序,例如 (download.mysoftware.com) 一旦用户通过身份验证,他们将获得用于下载软件的 S3 url。我将根据我的客户创建用户帐户。

我担心的是,如果用户复制 S3 URL link 然后将其提供给未通过身份验证的人下载软件,会发生什么情况?

是否可以创建一个 S3 策略来防止这种情况并适用于我的用例?我考虑过只允许特定的 IP,但是,我没有办法找出客户的 IP,也不想先询问他们,然后每次都将其添加到策略中。

允许特定 IP 的一种方法是,如果我只允许从 linked 到 (download.mysoftware.com) 的 IP 下载,那么下载实际上是从我的 Web 应用程序发生的,因为反对来自S3。这似乎是双重努力。

当用户请求下载您的应用程序时,为他们生成一个 pre-signed URL 并且有效期很短。它只需要在他们开始 下载您的文件时有效,因此即使是几分钟的有效期也可能足够了。

虽然用户在技术上可以共享其中一个 URL,但他们必须将 URL 传达给其他人并让他们很快下载,这可能是足以阻止他们试图分享 URL。 (完美的防御更加困难,而且可能是不必要的;没有办法阻止用户亲自将他们下载的文件传输给其他人。)