如何使用Ruby aws / s3 Gem生成从s3下载文件的安全URL

时间:2013-04-10 19:24:37

标签: ruby url amazon-web-services amazon-s3

我正在编写一个小脚本来在aws上的存储桶中找到特定文件,并创建一个临时验证的URL以发送给同事。 (理想情况下,这会产生类似于右键单击控制台上的存储桶中的文件并复制链接地址的结果)。

我已经研究过paperclip,它似乎不符合这个标准,但是我可能不知道它的全部功能。

我尝试了以下内容:

def authenticated_url(file_name, bucket)
  AWS::S3::S3Object.url_for(file_name, bucket, :secure => true, :expires => 20*60)
end

产生了这种结果:

  

...- 1.amazonaws.com/file_path/file.zip.AWSAccessKeyId={key}Expires=1200&Signature = {...}

有没有办法创建一个更类似于上述场景的安全网址,可以简单地将其作为链接发送?如果没有,任何安全的替代品都会受到欢迎。

1 个答案:

答案 0 :(得分:8)

您需要什么称为“标记链接”。幸运的是,它内置于你正在使用的aws-sdk gem中。

以下是您可以使用的解决方案的先前问题:

How to store data in S3 and allow user access in a secure way with rails API / iOS client?

然而,这是一个Rails解决方案,它有像20.minutes.from_now这样的花哨的Rails时间助手。您可以通过向当前时间添加特定秒数(例如Time.now.to_i + (20 * 60))将到期日期设置为特定日期,或者将ActiveSupport时间助手添加到带有require 'active_support/core_ext/numeric/time'的ruby脚本中。这将允许20.minutes.from_now内容工作。

此外,您需要整个aws-sdk宝石,而不仅仅是S3部分。