【问题标题】:How to generate a secure temporary url to download file from Amazon S3?如何生成安全的临时 URL 以从 Amazon S3 下载文件?
【发布时间】:2013-07-09 11:04:23
【问题描述】:

我正在尝试为用户提供一个临时链接,以从 python 中的 Amazon S3 存储桶下载文件。 我正在使用 generate_url 方法生成指定时间段的 url。

我担心的是,当创建此链接时,包括所需用户在内的任何人都可以在该时间段内点击此 url 并获取文件。如何防止其他人访问文件?

【问题讨论】:

  • 这听起来像是您需要对应该下载文件的用户进行身份验证。
  • 我正在对用户进行身份验证...但是网络上的任何人都可以使用嗅探器读取 url 并点击 url 以获取文件
  • @Kash 你有没有研究过使用 boto 或 s3cmd?两者都允许您从 S3 存储桶下载,但需要进行身份验证以确保随机人不能只下载文件?
  • 我说的generate_url方法只是Boto的......我想知道这个方法提供的url是否安全?

标签: python amazon-s3


【解决方案1】:

确保将链接的过期时间设置为非常短的时间。然后确保您通过 SSL 与用户通信,并且提供的链接是 SSL。使用 SSL 连接时,来自页面和 URL 的数据都被加密,没有人“嗅探”数据应该能够看到任何东西。

真正锁定此类文件的唯一其他方法是积极检查 S3 存储桶生成的日志文件,并检查链接是否存在滥用行为。然而,问题是您的链接的流量可能需要几个小时才能将其写入日志,但取决于您希望这些链接持续多长时间,该时间延迟可能是可以接受的。然后假设您发现滥用行为,例如多个不同的 IP 地址点击链接,您可以通过重命名 S3 上的文件来阻止点击。

最终的目的是让您的服务器从 S3 中获取数据并将其提供给客户。那么除非您对他们进行身份验证并且他们保留在会话中,否则任何人都无法获取该文件。当然,最大的麻烦是您对服务器征税,并且击败了 S3 酷的一半原因,即您不必提供文件,S3 可以。但是,如果您的服务器在 Amazon EC2 上,则从 S3 拉取不需要任何费用,只需向客户收取下载费用。此外,EC2 实例可以以本地网络级别的速度从 S3 访问和下载数据,就像我说的那样,它是免费的。

【讨论】:

    猜你喜欢
    • 2013-04-02
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    相关资源
    最近更新 更多