【问题标题】:How to Generate a Secure URL to Download File from s3 Using Ruby aws/s3 Gem如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件
【发布时间】:2013-04-02 19:32:13
【问题描述】:

我正在编写一个小脚本来定位 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,可以简单地作为链接发送?如果没有,任何安全的替代方案都将受到欢迎。

【问题讨论】:

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


    【解决方案1】:

    您需要一个称为“标记化链接”的东西。幸运的是,它内置在您正在使用的 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))将到期日期设置为特定日期,或者使用 require 'active_support/core_ext/numeric/time' 将 ActiveSupport 时间助手包含到您的 ruby​​ 脚本中。这将允许20.minutes.from_now 的东西工作。

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

    【讨论】:

    • 感谢您的指导,但是当我删除 minutes.from_now 时,我收到“NoMethodError: undefined method minutes' for 20:Fixnum" when I run that solution, and subsequently "NoMethodError: undefined method url_for`”。这是因为我使用的是“require 'aws/s3'”和“require 'aws-sdk'”吗? (如果这是一个新手问题,我深表歉意,我对此还是很陌生。感谢您的耐心等待)
    • 啊,我错过了这是一个脚本,而不是 Rails。让我尝试一些事情,我会更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2021-06-26
    相关资源
    最近更新 更多