Предоставленный вами механизм авторизации не поддерживается. Пожалуйста, используйте AWS4-HMAC-SHA256
Я получаю сообщение об ошибке 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)
как это исправить?
спасибо.
10 ответов:
AWS4-HMAC-SHA256, также известный как Signature Version 4, ("V4") является одной из двух схем аутентификации, поддерживаемых S3.
все регионы поддерживают V4, но US-Standard1, и многие-но не все-другие регионы, также поддерживают другую, более старую схему, версию подписи 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.
1
US Standard- Это прежнее имя для регионального развертывания S3, которое основано наus-east-1края. С тех пор, как этот ответ был первоначально написан, "Amazon S3 переименовал стандартный регион США в регион восток США (штат Северная Вирджиния), чтобы соответствовать региональным соглашениям об именах AWS." для всех практических целей, это всего лишь изменение наименования.
с узлом, попробуйте
var s3 = new AWS.S3( { endpoint: 's3-eu-central-1.amazonaws.com', signatureVersion: 'v4', region: 'eu-central-1' } );
вы должны установить
signatureVersion: 'v4'inconfigчтобы использовать новую версию знака:AWS.config.update({ signatureVersion: 'v4' });работает
JSsdk.
для людей с помощью
boto3(Python SDK) используйте приведенный ниже кодfrom botocore.client import Config s3 = boto3.resource( 's3', aws_access_key_id='xxxxxx', aws_secret_access_key='xxxxxx', config=Config(signature_version='s3v4') )
аналогичная проблема с PHP SDK, это работает:
$s3Client = S3Client::factory(array('key'=>YOUR_AWS_KEY, 'secret'=>YOUR_AWS_SECRET, 'signature' => 'v4', 'region'=>'eu-central-1'));важный момент-это
signatureиregion
в Java я должен был установить свойство
System.setProperty(SDKGlobalConfiguration.ENFORCE_S3_SIGV4_SYSTEM_PROPERTY, "true")и добавьте регион в экземпляр s3Client.
s3Client.setRegion(Region.getRegion(Regions.EU_CENTRAL_1))
для thumbor-aws, который использовал Boto config, мне нужно было поместить это в
$AWS_CONFIG_FILE[default] aws_access_key_id = (your ID) aws_secret_access_key = (your secret key) s3 = signature_version = s3Так что все, что используется boto непосредственно без изменений, это может быть полезно
для Android SDK setEndpoint решает проблему, хотя она устарела.
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( context, "identityPoolId", Regions.US_EAST_1); AmazonS3 s3 = new AmazonS3Client(credentialsProvider); s3.setEndpoint("s3.us-east-2.amazonaws.com");
С boto3, это код:
s3_client = boto3.resource('s3', region_name='eu-central-1')и
s3_client = boto3.client('s3', region_name='eu-central-1')
я использовал Django, и мне пришлось добавить эти дополнительные переменные конфигурации, чтобы сделать эту работу. (в дополнение к настройкам, упомянутым в https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html).
AWS_S3_REGION_NAME = "ap-south-1" AWS_S3_SIGNATURE_VERSION = "s3v4"
Comments