Ich erhalte eine Fehlermeldung, AWS::S3::Errors::InvalidRequest The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.
wenn ich versuche, eine Datei in den S3-Bucket in der neuen Region Frankfurt hochzuladen. Alles funktioniert einwandfrei mitUS Standard
Region.
Skript:
backup_file = '/media/db-backup_for_dev/2014-10-23_02-00-07/slave_dump.sql.gz'
s3 = AWS::S3.new(
access_key_id: AMAZONS3['access_key_id'],
secret_access_key: AMAZONS3['secret_access_key']
)
s3_bucket = s3.buckets['test-frankfurt']
# Folder and file name
s3_name = "database-backups-last20days/#{File.basename(File.dirname(backup_file))}_#{File.basename(backup_file)}"
file_obj = s3_bucket.objects[s3_name]
file_obj.write(file: backup_file)
aws-sdk (1.56.0)
Wie man es repariert?
Danke dir.
Antworten:
AWS4-HMAC-SHA256, auch als Signaturversion 4 ("V4") bekannt, ist eines von zwei von S3 unterstützten Authentifizierungsschemata.
Alle Regionen unterstützen V4, aber US-Standard¹, und viele - aber nicht alle - andere Regionen unterstützen auch das andere, ältere Schema, Signature Version 2 ("V2").
Laut http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html ... werden neue S3-Regionen, die nach Januar 2014 bereitgestellt wurden, nur V4 unterstützen.
Da Frankfurt Ende 2014 eingeführt wurde, wird V2 nicht unterstützt. Dieser Fehler deutet darauf hin, dass Sie es verwenden.
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html erläutert, wie Sie V4 in den verschiedenen SDKs aktivieren, vorausgesetzt, Sie verwenden ein SDK mit dieser Funktion.
Ich würde spekulieren, dass einige ältere Versionen der SDKs diese Option möglicherweise nicht unterstützen. Wenn dies nicht hilft, benötigen Sie möglicherweise eine neuere Version des von Ihnen verwendeten SDK.
¹
US Standard
ist der frühere Name für die regionale Bereitstellung von S3 in derus-east-1
Region. Seit der ursprünglichen Erstellung dieser Antwort wurde "Amazon S3 die US-Standardregion in die Region US-Ost (N. Virginia) umbenannt, um den regionalen Namenskonventionen von AWS zu entsprechen." Für alle praktischen Zwecke ist es nur eine Änderung der Benennung.quelle
AWS4-HMAC-SHA256
implementiert: github.com/s3tools/s3cmd/issues/402Versuchen Sie es mit Node
quelle
Sie sollten setzen
signatureVersion: 'v4'
inconfig
neue Zeichen Version zu verwenden:Funktioniert für
JS
SDK.quelle
Verwenden Sie für Benutzer von
boto3
(Python SDK
) den folgenden Codequelle
AuthorizationQueryParametersErrorError parsing the X-Amz-Credential parameter; the region 'us-east-1' is wrong; expecting 'us-east-2'us-east-2
Also habe ichregion_name='us-east-2'
den obigen Code hinzugefügtÄhnliches Problem mit dem PHP SDK, dies funktioniert:
Das Wichtige ist das
signature
und dasregion
quelle
Ich habe Django verwendet und musste diese zusätzlichen Konfigurationsvariablen hinzufügen, damit dies funktioniert. (Zusätzlich zu den Einstellungen unter https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html ).
Oder vor boto3 Version 1.4.4:
quelle
In Java musste ich eine Eigenschaft festlegen
und fügen Sie die Region der s3Client-Instanz hinzu.
quelle
Bei boto3 ist dies der Code:
oder
quelle
Für thumbor-aws, die boto config verwendeten, musste ich dies auf die setzen
$AWS_CONFIG_FILE
Alles, was Boto direkt ohne Änderungen verwendet hat, kann nützlich sein
quelle
Dies sparte mir auch Zeit nach dem 24-stündigen Surfen.
quelle
Für Android SDK löst setEndpoint das Problem, obwohl es veraltet ist.
quelle
Grundsätzlich lag der Fehler daran, dass ich die alte Version von aws-sdk verwendet und die Version aktualisiert habe, sodass dieser Fehler auftrat.
in meinem Fall mit Knoten js habe ich
signatureVersion
in parmas Objekt wie folgt verwendet:Dann habe ich die Signatur aus dem params-Objekt entfernt und wie ein Zauber gearbeitet:
quelle
Überprüfen Sie Ihre AWS S3-Bucket- Region und übergeben Sie die richtige Region in der Verbindungsanforderung.
In My Senario habe ich ' APSouth1 ' für den asiatisch-pazifischen Raum (Mumbai) eingestellt.
quelle
Verwenden Sie für Boto3 diesen Code.
quelle
In meinem Fall war der Anforderungstyp falsch. Ich habe GET (dumm) benutzt. Es muss PUT sein.
quelle
Manchmal wird die Standardversion nicht aktualisiert. Fügen Sie diesen Befehl hinzu
im
settings.py
quelle
Versuchen Sie diese Kombination.
quelle
Code für Flasche (boto3)
Vergessen Sie nicht, Config zu importieren. Wenn Sie eine eigene Konfigurationsklasse haben, ändern Sie deren Namen.
quelle