5

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

我研究了回形针,它似乎不符合这个标准,但是我无法意识到它的全部功能。

我尝试了以下方法:

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={...}

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

4

1 回答 1

8

您需要一个称为“标记化链接”的东西。幸运的是,它内置在您正在使用的 aws-sdk gem 中。

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

如何在 S3 中存储数据并允许用户使用 rails API / iOS 客户端以安全的方式访问?

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

此外,您将需要整个aws-sdkgem,而不仅仅是 S3 部分。

于 2013-04-10T19:40:26.733 回答