2015-01-08 11 views
5

Ich versuche, den Amazon Simple Storage Service für die Verwendung mit Schienen einzurichten. Ich bekomme diese Fehlermeldung:AWS S3 in Schienen - wie der Parameter s3_signature_version eingestellt wird

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

Das Problem ist, dass ich die Frankfurt S3 Region gewählt haben, und es gibt nur das V4-Schema unterstützt wird. Es ist die gleiche Fehlermeldung wie in this Post, die Sie auf die Lösung here, mit Anweisungen, wie Sie "den Parameter: s3_signature_version auf: v4 beim Erstellen des Clients" festlegen. Der Befehl lautet:

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

Meine Frage ist, wie mache ich das? Wo gebe ich diesen Code ein?

EDIT:

Ich versuchte :s3_signature_version => :v4 in carrier_wave.rb setzen sich wie folgt, aber während des Uploads zu Heroku es [fog][WARNING] Unrecognized arguments: s3_signature_version sagte, und es machte keinen Unterschied machen, habe ich noch den Fehler.

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 

EDIT:

ich einen neuen Eimer die Northern California Region mit erstellt haben, für die dies nicht, um ein Problem soll, aber ich bekomme immer noch genau dieselbe Fehlermeldung.

EDIT:

Das macht keinen Unterschied entweder:

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 
+0

in Ihrem Ruby-Code mit AWS SDK – BMW

+0

Aber das ist es ja gerade - ich weiß nicht, wo das ist. In welcher Datei stecke ich es ein? Ich bin neu in AWS, S3 und all dem und finde es ziemlich verwirrend. - – Bazley

+0

für jetzt möchte ich nur diese Frage für die eine, die Sie in der Unterstützung für AWS https://forums.aws.amazon.com/thread.jspa?threadID=168816 – MZaragoza

Antwort

3

hatte ich das Problem, dass Spree v2.3-aws-sdk v1.27.0 fixiert wurde. Aber der Parameter s3_signature_version wurde in v1.31.0 eingeführt (und für China standardmäßig eingestellt).

Also in meinem Fall die folgende Konfiguration für Frankfurt wird völlig ignoriert worden:

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

gefragt, in welcher Datei haben Sie diesen Code eingegeben ? config/initialisierer/carrier_wave.rb? – Bazley

+0

Es war 'config/initializers/paperclip.rb' für mich. Aber es ist nicht so wichtig, wo Sie diese Konfiguration ausführen. – schmijos

0

ich das gleiche Problem hatte und keine Anleitung finden konnte, wo die s3_signature_version zu implementieren: v4 Befehl.

Am Ende löschte ich grundsätzlich den vorhandenen Bucket in Frankfurt und erstellte in der Standard-US-Zone und es funktioniert (nach Aktualisierung der Berechtigungsrichtlinie, die dem Benutzer zugeordnet ist, der auf den Bucket zugreift, um anzuzeigen, dass der Bucket geändert wurde).

Ich würde gerne den Eimer in Frankfurt haben, aber ich habe keine weiteren 16 Stunden, um mit diesem Thema im Kreis herumzugehen, also wenn jemand in der Lage ist, ein bisschen mehr Richtung hinzuzufügen, wie man die s3_signature_version einbaut: v4 Linie, das wäre toll.

0

Für andere Benutzer folgen Michael Hartl's Rails Tutorial: Sie (möglicherweise *) benötigen mindestens v 1.26 des "Nebel" Gem. Ändern Sie Ihre Gemfile entsprechend, und vergessen Sie nicht, $ bundle install '.

* Der Grund ist, dass einige S3-Buckets die Autorisierungssignatur Version 4 benötigen.In Zukunft werden wahrscheinlich alle von ihnen und zumindest Frankfurt (Zone eu-central-1) eine v4-Zulassung benötigen. Dies wurde seit Nebel v1.26 unterstützt: https://github.com/fog/fog/blob/v1.26.0/lib/fog/aws/storage.rb

+0

Danke, ich habe das Tutorial entsprechend aktualisiert. – mhartl

1

ich diese alte Frage aus der anderen Richtung gefunden und versucht, den Rat in https://github.com/fog/fog/issues/3450 und stellen Signatur 2-Version zu übernehmen (eine Hypothese zu testen). Delving into the source a bit, stellt sich die Zauberwort :aws_signature_version => 4 ist aus, so wie folgt aus:

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 
    }