El mecanismo de autorización que ha proporcionado no es compatible. Utilice AWS4-HMAC-SHA256
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 Standard
la 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.
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 Standard
es el nombre anterior de la implementación regional de S3 que se basa en la us-east-1
regió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.
Con nodo, prueba
var s3 = new AWS.S3( {
endpoint: 's3-eu-central-1.amazonaws.com',
signatureVersion: 'v4',
region: 'eu-central-1'
} );
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')
)
Debes configurar signatureVersion: 'v4'
el config
uso de la nueva versión de inicio de sesión:
AWS.config.update({
signatureVersion: 'v4'
});
Funciona para JS
SDK.