rails中的AWS S3 – 如何设置s3_signature_version参数

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

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

问题是我选择了法兰克福S3区域,并且只支持V4方案。 这是与本文中相同的错误消息,它引导您到此处的解决方案,并指示如何“在构造客户端时将:s3_signature_version参数设置为:v4”。 命令是:

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

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

编辑:

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

配置/初始化/ 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 

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

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

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

我从另一个方向发现了这个老问题,尝试在https://github.com/fog/fog/issues/3450中获取建议并将签名设置为版本2(以测试假设)。 深入研究源代码 ,结果发现神奇的短语是: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 } 

我有同样的问题,无法找到有关在何处实施s3_signature_version :: v4命令的任何指导。

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

我很乐意在法兰克福拥有这个桶,但是我没有另外16个小时可以花这个问题绕圈子,所以如果有人能够在如何整合s3_signature_version :: v4线上添加更多方向,那么会很好。

对于跟随Michael Hartl的Rails教程的其他用户:你(可能*)需要至少v 1.26的’fog’gem。 相应地修改你的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