SignatureDoesNotMatch - Амазон С3 API-интерфейс

Я использую класс PHP для Amazon S3 и CloudFront - ссылке. Но когда я пытаюсь загрузить файл в ведро, я получаю эту ошибку:

[SignatureDoesNotMatch] подпись запроса, которую мы рассчитали, не соответствует предоставленной вами подписи. Проверьте ключ и способ подписи.

Как это исправить?

спасибо.

3 ответов


когда вы регистрируетесь в Amazon, вы можете создать себе пару ключей (Amazon называет эти ID ключа доступа и секретный ключ доступа).

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

Если вы получаете "подпись не соответствует", весьма вероятно, что вы использовали неправильный секрет клавиша доступа. Вы можете дважды проверить ключ доступа и секретный ключ доступа, чтобы убедиться, что они правильные?


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

проблемным символом был "- " chracter, который является "\u2013 "в unicode и отличается от" -".

$result = $s3->putObject(array(
    'Bucket'       => $bucket,
    'Key'          => $keyname,
    'Metadata' => [
        'name' => 'Terminology – Blah'
    ]
));

примечание из документации http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#UserMetadata...

Amazon S3 хранит пользовательские метаданные в нижнем регистре. Каждое имя, значение пара должна соответствует US-ASCII при использовании REST и UTF-8 при использовании SOAP или браузерные загрузки через POST.


у меня была эта ошибка с putObject() при указании Key начиная с символа косой черты (/) - после удаления косой черты он работал нормально.