awscli, рассчитанная нами подпись запроса не соответствует предоставленной вами подписи

Я использую awscli (S3 Api) для обработки некоторых запросов с моим хранилищем объектов softlayer. Я могу получить список корзин, создать или удалить корзину. Когда я пытаюсь скопировать образец файла в конкретную корзину, я получаю сообщение об ошибке: aws --endpoint-url=https://s3-api.us-geo.objectstorage.softlayer.net s3 cp test.txt s3://my_test_bucket/files

Я получаю следующую ошибку (проверено как с sdk apis, так и с python boto3 api и wascli)

upload failed: ./test.txt to s3://my_test_bucket/test.txt An error occurred (SignatureDoesNotMatch) when calling the PutObject operation: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. For more information, see REST Authentication and SOAP Authentication for details.


person Houssem Fathallah    schedule 13.01.2017    source источник


Ответы (2)


Это странно - похоже, вы используете правильный синтаксис. Как вы передаете свои верительные грамоты? Самый простой способ - создать ~/.aws/credentials файл, содержащий:

[default]
aws_access_key_id = {Access Key ID}
aws_secret_access_key = {Secret Access Key}

Если вы получаете одну и ту же ошибку в разных инструментах / библиотеках, скорее всего, проблема в этом. Если ваши учетные данные настроены правильно, но проблема с подписью по-прежнему возникает, нам, вероятно, потребуется более глубокое погружение, чтобы выяснить, что происходит, потому что, похоже, вы не делаете ничего неправильного.

person Nick Lange    schedule 13.01.2017
comment
Я использую команду aws configure и с переменными evn (с помощью SET VALUE=KEY) я могу перечислить все содержимое своей корзины, но не могу загрузить - person Houssem Fathallah; 13.01.2017
comment
Хорошо, похоже, вы нашли дефект! Попробуйте войти в ~/.aws/config и удалить все, что указывает на регион, затем попробуйте запустить команду еще раз. - person Nick Lange; 13.01.2017
comment
Я тестировал это, но решения нет. Я использую ОС Windows, я посмотрю, связано ли это с ОС, потому что она отлично работает с ОС Ubuntu. в любом случае, спасибо. - person Houssem Fathallah; 13.01.2017
comment
Если вы не можете решить эту проблему, отправьте мне электронное письмо на nicholas.lange[at]ibm.com, и мы попробуем разобраться. Если это дефект, я бы хотел его исправить, а если это проблема ОС, я бы хотел, чтобы это было задокументировано. - person Nick Lange; 13.01.2017
comment
Спасибо @nick, сначала я использовал окна, затем я использовал изображение на основе образа docker ubuntu. Я могу перечислить корзины и их содержимое, но не могу загрузить. Теперь я переделываю все на ubuntu os 14.04 и python 2.7.6. Ничего из этого не работает ни с aswcli (cli на основе Python), ни с кодом. Поэтому я переключился на тестирование с помощью кода Ruby и ruby ​​aws-sdk, и все работает нормально (загрузка / загрузка). Теперь я почти уверен, что это связано с версией python, предоставляемой aws или в boto. - person Houssem Fathallah; 14.01.2017

Причина ошибки может заключаться в другой версии подписи.
IBM Cloud Object Storage использует версию подписи 2, но версия по умолчанию - 4. http://docs.aws.amazon.com/general/latest/gr/signature-version-2.html

Я не уверен, как установить версию подписи с помощью curl и python.
В SDK для Java вам нужно установить именно так, иначе вы получите ошибку.

AWSCredentialsProvider provider = loadCredentialProvider();

ClientConfiguration config = new ClientConfiguration();
config.withSignerOverride("S3SignerType");

// second arg region not needed
EndpointConfiguration endpointConfiguration = 
        new EndpointConfiguration(us-geo.objectstorage.softlayer.net, "");

AmazonS3 cos = AmazonS3ClientBuilder.standard()
        .withCredentials(provider)
        .withClientConfiguration(config)
        .withEndpointConfiguration(endpointConfiguration)
        .build();
person Taiki Shimba    schedule 23.06.2017