Я получаю сообщение об ошибке AWS::S3::Errors::InvalidRequest The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.
при попытке загрузить файл в корзину S3 в новом регионе Франкфурта. Все исправно работает с US Standard
регионом.
Автор сценария:
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)
Как это исправить?
Спасибо.
ruby
amazon-web-services
amazon-s3
aws-sdk
Алексей
источник
источник
Ответы:
AWS4-HMAC-SHA256, также известный как версия подписи 4 («V4»), является одной из двух схем аутентификации, поддерживаемых S3.
Все регионы поддерживают V4, но стандарт США¹, и многие - но не все - другие регионы также поддерживают другую, более старую схему, Signature Version 2 («V2»).
Согласно http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html ... новые регионы S3, развернутые после января 2014 г., будут поддерживать только V4.
Поскольку Франкфурт был представлен в конце 2014 года, он не поддерживает V2, что предлагает вам использовать эта ошибка.
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html объясняет, как включить V4 в различных SDK, если вы используете SDK, который имеет такую возможность.
Я бы предположил, что некоторые старые версии SDK могут не поддерживать эту опцию, поэтому, если вышеуказанное не помогает, вам может потребоваться более новая версия SDK, которую вы используете.
¹
US Standard
- это прежнее название регионального развертывания S3, базирующегося в этомus-east-1
регионе. С момента написания этого ответа «Amazon S3 переименовал Стандартный регион США в регион Восток США (Северная Вирджиния) в соответствии с региональными соглашениями об именах AWS». Для всех практических целей это всего лишь изменение наименования.источник
AWS4-HMAC-SHA256
реализовали: github.com/s3tools/s3cmd/issues/402С узлом попробуйте
источник
Вы должны установить
signatureVersion: 'v4'
вconfig
использовать новую версию знака:Работает для
JS
sdk.источник
Для людей, использующих
boto3
(Python SDK
), используйте приведенный ниже кодисточник
AuthorizationQueryParametersErrorError parsing the X-Amz-Credential parameter; the region 'us-east-1' is wrong; expecting 'us-east-2'us-east-2
Итак, я добавилregion_name='us-east-2'
к приведенному выше кодуАналогичная проблема с PHP SDK, это работает:
Важным моментом является то,
signature
чтоregion
источник
Я использовал Django, и мне пришлось добавить эти дополнительные переменные конфигурации, чтобы это работало. (в дополнение к настройкам, указанным в https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html ).
Или до версии boto3 1.4.4:
источник
В Java мне пришлось установить свойство
и добавьте регион в экземпляр s3Client.
источник
С boto3 это код:
или
источник
Для thumbor-aws, который использовал конфигурацию Boto, мне нужно было поместить это в
$AWS_CONFIG_FILE
Таким образом, все, что использовало boto напрямую, без изменений, может быть полезно
источник
это также сэкономило мне время после серфинга в течение 24 часов ..
источник
Для Android SDK проблему решает setEndpoint, хотя она устарела.
источник
В основном ошибка возникла из-за того, что я использовал старую версию aws-sdk и обновил ее, поэтому возникла эта ошибка.
в моем случае с node js я использовал
signatureVersion
в объекте parmas вот так:Затем я поставил подпись из объекта params и работал как шарм:
источник
Проверьте AWS S3 Bucket области и Передайте соответствующий регион в запросе подключения.
В My Senario я установил « APSouth1 » для Азиатско-Тихоокеанского региона (Мумбаи)
источник
Для Boto3 используйте этот код.
источник
В моем случае тип запроса был неправильным. Я использовал GET (тупой) Это должно быть PUT.
источник
Иногда версия по умолчанию не обновляется. Добавьте эту команду
в
settings.py
источник
Попробуйте эту комбинацию.
источник
Код для Flask (boto3)
Не забудьте импортировать Config. Также, если у вас есть собственный класс конфигурации, измените его имя.
источник
Ответ Supernova для django / boto3 / django-storerages работал со мной:
просто добавьте их в свой settings.py и соответствующим образом измените код региона
вы можете проверить регионы AWS: введите описание ссылки здесь
источник