J'obtiens une erreur AWS::S3::Errors::InvalidRequest The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.
lorsque j'essaye de télécharger un fichier dans le compartiment S3 dans la nouvelle région de Francfort. Tout fonctionne correctement avec la US Standard
région.
Scénario:
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)
Comment le réparer?
Je vous remercie.
Réponses:
AWS4-HMAC-SHA256, également connu sous le nom de Signature Version 4, ("V4") est l'un des deux schémas d'authentification pris en charge par S3.
Toutes les régions prennent en charge la version 4, mais US-Standard¹, et de nombreuses autres régions, mais pas toutes, prennent également en charge l'autre modèle plus ancien, Signature Version 2 («V2»).
Selon http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html ... les nouvelles régions S3 déployées après janvier 2014 ne prendront en charge que la V4.
Depuis que Francfort a été introduit à la fin de 2014, il ne prend pas en charge V2, ce que cette erreur suggère que vous utilisez.
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html explique comment activer V4 dans les différents SDK, en supposant que vous utilisez un SDK doté de cette capacité.
Je suppose que certaines anciennes versions des SDK peuvent ne pas prendre en charge cette option, donc si ce qui précède ne vous aide pas, vous aurez peut-être besoin d'une version plus récente du SDK que vous utilisez.
¹
US Standard
est l'ancien nom du déploiement régional S3 basé dans laus-east-1
région. Depuis la rédaction de cette réponse, «Amazon S3 a renommé la région standard des États-Unis en région USA Est (Virginie du Nord) pour être cohérente avec les conventions de dénomination régionales AWS». À toutes fins pratiques, ce n'est qu'un changement de nom.la source
AWS4-HMAC-SHA256
encore implémentés: github.com/s3tools/s3cmd/issues/402Avec node, essayez
la source
Vous devez définir
signatureVersion: 'v4'
àconfig
utiliser une nouvelle version de signe:Fonctionne pour
JS
sdk.la source
Pour les personnes utilisant
boto3
(Python SDK
), utilisez le code ci-dessousla source
AuthorizationQueryParametersErrorError parsing the X-Amz-Credential parameter; the region 'us-east-1' is wrong; expecting 'us-east-2'us-east-2
J'ai donc ajoutéregion_name='us-east-2'
au code ci-dessusProblème similaire avec le SDK PHP, cela fonctionne:
L'important est le
signature
et leregion
la source
J'utilise Django et j'ai dû ajouter ces variables de configuration supplémentaires pour que cela fonctionne. (en plus des paramètres mentionnés dans https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html ).
Ou avant la version 1.4.4 de boto3:
la source
En Java, j'ai dû définir une propriété
et ajoutez la région à l'instance s3Client.
la source
Avec boto3, voici le code:
ou
la source
Pour thumbor-aws, qui utilisait boto config, j'avais besoin de le mettre
$AWS_CONFIG_FILE
Donc, tout ce qui a utilisé boto directement sans changement, cela peut être utile
la source
cela m'a également permis de gagner du temps après avoir surfé pendant 24 heures.
la source
Pour Android SDK, setEndpoint résout le problème, bien qu'il soit obsolète.
la source
Fondamentalement, l'erreur était due au fait que j'utilisais l'ancienne version de aws-sdk et que j'ai mis à jour la version, donc cette erreur s'est produite.
dans mon cas avec le nœud js que
signatureVersion
j'utilisais dans un objet parmas comme celui-ci:Ensuite, j'ai mis la signature hors de l'objet params et j'ai travaillé comme du charme:
la source
Vérifiez votre région de compartiment AWS S3 et transmettez la région appropriée dans la demande de connexion.
Dans My Senario, j'ai défini ' APSouth1 ' pour l' Asie-Pacifique (Mumbai)
la source
Pour Boto3, utilisez ce code.
la source
Dans mon cas, le type de demande était incorrect. J'utilisais GET (stupide) Ça doit être PUT.
la source
Parfois, la version par défaut ne sera pas mise à jour. Ajoutez cette commande
dans
settings.py
la source
Essayez cette combinaison.
la source
Code pour Flask (boto3)
N'oubliez pas d'importer Config. Aussi, si vous avez votre propre classe de configuration, changez son nom.
la source