【问题标题】:AWS S3 in rails - how to set the s3_signature_version parameterRails 中的 AWS S3 - 如何设置 s3_signature_version 参数
【发布时间】:2015-03-07 00:37:17
【问题描述】:

我正在尝试设置 Amazon Simple Storage Service 以与 rails 一起使用。我收到此错误消息:

The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.

问题是我选择了法兰克福S3地区,那里只支持V4方案。 这与this 帖子中的错误消息相同,可引导您找到解决方案 here,说明如何“在构建客户端时将 :s3_signature_version 参数设置为 :v4”。命令是:

s3 = AWS::S3::Client.new(:s3_signature_version => :v4)

我的问题是,我该怎么做?我把这段代码放在哪里?

编辑:

我尝试将:s3_signature_version => :v4 放入carrier_wave.rb 中,如下所示,但是在上传到heroku 的过程中它说[fog][WARNING] Unrecognized arguments: s3_signature_version,它没有任何区别,我仍然得到错误。

config/initializers/carrier_wave.rb:

    if Rails.env.production?
      CarrierWave.configure do |config|
        config.fog_credentials = {
          # Configuration for Amazon S3
          :provider              => 'AWS',
          :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
          :aws_secret_access_key => ENV['S3_SECRET_KEY'],
          :s3_signature_version  => :v4
        }
        config.fog_directory     =  ENV['S3_BUCKET']
      end
    end

编辑:

我使用北加利福尼亚地区创建了一个新存储桶,这不应该是一个问题,但我仍然收到完全相同的错误消息。

编辑:

这也没什么区别:

    if Rails.env.production?
      CarrierWave.configure do |config|
        config.fog_credentials = {
          # Configuration for Amazon S3
          :provider              => 'AWS',
          :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
          :aws_secret_access_key => ENV['S3_SECRET_KEY']
        }
        config.fog_directory     =  ENV['S3_BUCKET']
        config.fog_attributes = {:s3_signature_version => :v4}
      end
    end

【问题讨论】:

  • 在您的 ruby​​ 代码中使用 AWS 开发工具包
  • 但仅此而已-我不知道那在哪里。我把它放在哪个文件里?我是 AWS、S3 和所有这些的新手,发现它相当莫名其妙。 ——
  • 现在我只想为您在支持 AWS forums.aws.amazon.com/thread.jspa?threadID=168816987654323@ 中提出的问题链接这个问题

标签: ruby-on-rails amazon-web-services amazon-s3


【解决方案1】:

我遇到了问题,Spree v2.3 被固定到 aws-sdk v1.27.0。但是参数s3_signature_version是在v1.31.0中引入的(并且默认设置为中国)。

所以在我的例子中,法兰克福的以下配置完全被忽略了:

AWS.config(
    region: 'eu-central-1',
    s3_signature_version: :v4
)

【讨论】:

  • 您将该代码放入哪个文件? config/initializers/carrier_wave.rb?
  • 对我来说是config/initializers/paperclip.rb。但在哪里运行该配置并不重要。
【解决方案2】:

我从另一个方向发现了这个老问题,试图接受https://github.com/fog/fog/issues/3450 中的建议并将签名设置为版本 2(以测试假设)。钻研into the source a bit,原来神奇的短语是:aws_signature_version => 4,所以像这样:

    config.fog_credentials = {
      # Configuration for Amazon S3
      :provider              => 'AWS',
      :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
      :aws_secret_access_key => ENV['S3_SECRET_KEY'],
      :aws_signature_version => 4
    }

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,找不到任何关于在何处实施 s3_signature_version: :v4 命令的指导。

    最后,我基本上删除了法兰克福的现有存储桶并在标准美国区域创建,它可以工作(在更新附加到访问存储桶的用户的权限策略以反映存储桶已更改之后)。

    我很想在法兰克福有这个桶,但我没有另外 16 个小时的时间来解决这个问题,所以如果有人能够就如何合并 s3_signature_version 添加更多指导::v4行,那太好了。

    【讨论】:

      【解决方案4】:

      对于遵循 Michael Hartl 的 Rails 教程的其他用户: 您(可能*)至少需要 v 1.26 的“雾”宝石。相应地修改您的 Gemfile,不要忘记 '$ bundle install'。

      *原因是一些 S3 存储桶需要授权签名版本 4。将来可能所有这些都需要,至少法兰克福(区域 eu-central-1)需要 v4 授权。 自雾 v1.26 以来一直支持此功能: https://github.com/fog/fog/blob/v1.26.0/lib/fog/aws/storage.rb

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        • 2019-07-23
        • 2018-06-19
        • 1970-01-01
        • 2017-11-19
        • 1970-01-01
        相关资源
        最近更新 更多