Eu recebo um erro AWS::S3::Errors::InvalidRequest The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.
ao tentar fazer o upload do arquivo no bucket do S3 na nova região de Frankfurt. Tudo funciona corretamente com a US Standard
região.
Roteiro:
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 corrigi-lo?
Obrigado.
ruby
amazon-web-services
amazon-s3
aws-sdk
Alexey
fonte
fonte
Respostas:
O AWS4-HMAC-SHA256, também conhecido como Signature Version 4, ("V4") é um dos dois esquemas de autenticação suportados pelo S3.
Todas as regiões suportam a V4, mas o padrão US¹ e muitas - mas não todas - outras regiões, também suportam o outro esquema mais antigo, a Signature Version 2 ("V2").
De acordo com http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html ... novas regiões S3 implantadas após janeiro de 2014 oferecerão suporte apenas à V4.
Desde que Frankfurt foi introduzida no final de 2014, ele não suporta a V2, que é o que esse erro sugere que você esteja usando.
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html explica como ativar a V4 nos vários SDKs, supondo que você esteja usando um SDK com esse recurso.
Eu especularia que algumas versões mais antigas dos SDKs talvez não suportem essa opção; portanto, se as opções acima não ajudarem, talvez você precise de uma versão mais recente do SDK que está usando.
¹
US Standard
é o nome anterior para a implantação regional do S3 baseada naus-east-1
região. Desde o momento em que essa resposta foi originalmente escrita, "o Amazon S3 renomeou a região padrão dos EUA para a região leste dos EUA (N. Virgínia) para ser consistente com as convenções de nomes regionais da AWS". Para todos os fins práticos, é apenas uma alteração na nomeação.fonte
AWS4-HMAC-SHA256
implementaram: github.com/s3tools/s3cmd/issues/402Com o nó, tente
fonte
Você deve definir
signatureVersion: 'v4'
emconfig
usar nova versão sinal:Funciona para
JS
sdk.fonte
Para pessoas que usam
boto3
(Python SDK
), use o código abaixofonte
AuthorizationQueryParametersErrorError parsing the X-Amz-Credential parameter; the region 'us-east-1' is wrong; expecting 'us-east-2'us-east-2
Então eu adicioneiregion_name='us-east-2'
o código acimaProblema semelhante com o PHP SDK, isso funciona:
A parte importante é ae
signature
aregion
fonte
Eu tenho usado o Django e tive que adicionar essas variáveis extras de configuração para fazer isso funcionar. (além das configurações mencionadas em https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html ).
Ou anterior à versão 1.4.4 do boto3:
fonte
Em Java eu tive que definir uma propriedade
e adicione a região à instância s3Client.
fonte
Com boto3, este é o código:
ou
fonte
Para thumbor-aws, que usava boto config, eu precisava colocar isso no diretório
$AWS_CONFIG_FILE
Portanto, qualquer coisa que use boto diretamente, sem alterações, pode ser útil
fonte
isso também economizou meu tempo depois de navegar por 24 horas ..
fonte
Para o SDK do Android, setEndpoint resolve o problema, embora tenha sido descontinuado.
fonte
Basicamente, o erro ocorreu porque eu estava usando a versão antiga do aws-sdk e atualizei a versão para que esse erro ocorresse.
no meu caso com o nó js, eu estava usando o
signatureVersion
objeto parmas como este:Então eu coloquei a assinatura fora do objeto params e trabalhei como charme:
fonte
Verifique sua região de bucket do AWS S3 e passe a região adequada na solicitação de conexão.
No My Senario, configurei ' APSouth1 ' para a Ásia-Pacífico (Mumbai)
fonte
Para Boto3, use este código.
fonte
No meu caso, o tipo de solicitação estava errado. Eu estava usando GET (burro) Deve ser PUT.
fonte
Em algum momento a versão padrão não será atualizada. Adicione este comando
no
settings.py
fonte
Experimente esta combinação.
fonte
Código para o frasco (boto3)
Não se esqueça de importar o Config. Além disso, se você tiver sua própria classe de configuração, altere seu nome.
fonte