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