El mecanismo de autorización que ha proporcionado no es compatible. Utilice AWS4-HMAC-SHA256

Resuelto Alexey asked hace 54 años • 26 respuestas

Recibo un error AWS::S3::Errors::InvalidRequest The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.cuando intento cargar un archivo en el depósito S3 en la nueva región de Frankfurt. Todo funciona correctamente con US Standardla región.

Guion:

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)

¿Como arreglarlo?

Gracias.

Alexey avatar Jan 01 '70 08:01 Alexey
Aceptado

AWS4-HMAC-SHA256, también conocido como Signature Version 4 ("V4") es uno de los dos esquemas de autenticación admitidos por S3.

Todas las regiones admiten V4, excepto el estándar de EE. UU.¹, y muchas otras regiones, pero no todas, también admiten el otro esquema anterior, Signature Version 2 ("V2").

Según http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authentication-requests.html ... las nuevas regiones S3 implementadas después de enero de 2014 solo admitirán V4.

Dado que Frankfurt se introdujo a finales de 2014, no es compatible con V2, que es lo que este error sugiere que está utilizando.

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html explica cómo habilitar V4 en los distintos SDK, suponiendo que esté utilizando un SDK que tenga esa capacidad.

Yo especularía que es posible que algunas versiones anteriores de los SDK no admitan esta opción, por lo que si lo anterior no ayuda, es posible que necesite una versión más reciente del SDK que está utilizando.


¹ US Standardes el nombre anterior de la implementación regional de S3 que se basa en la us-east-1región. Desde el momento en que se escribió originalmente esta respuesta, "Amazon S3 cambió el nombre de Región estándar de EE. UU. a Región Este de EE. UU. (Norte de Virginia) para que sea coherente con las convenciones de nomenclatura regionales de AWS". A todos los efectos prácticos, es sólo un cambio de nombre.

Michael - sqlbot avatar Oct 23 '2014 22:10 Michael - sqlbot

Con nodo, prueba

var s3 = new AWS.S3( {
    endpoint: 's3-eu-central-1.amazonaws.com',
    signatureVersion: 'v4',
    region: 'eu-central-1'
} );
morris4 avatar Jul 26 '2015 11:07 morris4

Para las personas que usan boto3( Python SDK), use el siguiente código

from botocore.client import Config


s3 = boto3.resource(
    's3',
    aws_access_key_id='xxxxxx',
    aws_secret_access_key='xxxxxx',
    config=Config(signature_version='s3v4')
)
Penkey Suresh avatar Dec 22 '2016 07:12 Penkey Suresh

Debes configurar signatureVersion: 'v4'el configuso de la nueva versión de inicio de sesión:

AWS.config.update({
    signatureVersion: 'v4'
});

Funciona para JSSDK.

Denis Rizun avatar Mar 24 '2015 13:03 Denis Rizun