У меня есть сценарий для загрузки файла с AWS S3, и он работает с отдельного сервера вне AWS. Но когда я поместил этот скрипт в экземпляр EC2 и попробовал его, он возвращает ошибку «SignatureDoesNotMatch». Подписанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой ключ и метод подписи ».Загрузить файл AWS S3 из экземпляра EC2
Но он работает на другом сервере. Эк2 находится в том же регионе, что и хост s3. Я предполагаю, что это имеет какое-то отношение к хосту. Я пробовал этот хост/url, но он возвращает ту же ошибку.
Любой, кто может загружать файлы s3 из ec2 с помощью curl? Мне нужно использовать только завиток. Пожалуйста, ответьте, если вы знаете, как это сделать через завиток. Благодарю.
https://s3-ap-southeast-1.amazonaws.com/ $ ведро/$ файл
https://s3.amazonaws.com/ $ ведро/$ файл
https: //$bucket.s3-ap-southeast-1.amazonaws.com/$file
HTTPS : //$bucket.s3.amazonaws.com/$file
#!/bin/sh
file="file-name"
bucket="bucket-name"
resource="/${bucket}/${file}"
contentType="application/x-compressed-tar"
dateValue="`date +'%a, %d %b %Y %H:%M:%S %z'`"
stringToSign="GET\n\n${contentType}\n${dateValue}\n${resource}"
s3Key="xxxxxxxxxxxxxxxxxx"
s3Secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
signature=$(echo -en "${stringToSign}" | openssl sha1 -hmac "${s3Secret}" -binary | base64)
curl -H "Host: s3-ap-southeast-1.amazonaws.com" \
-H "Date: $dateValue" \
-H "Content-Type: $contentType" \
-H "Authorization: AWS ${s3Key}:${signature}" \
https://s3-ap-southeast-1.amazonaws.com/$bucket/$file -o $file
[Мы уже видели такой вопрос раньше] (http://stackoverflow.com/q/39921825/1695906), предположительно связанный с ошибкой в OpenSSL, потому что он был разрешен путем обновления OpenSSL. К сожалению, старая версия не была идентифицирована, поэтому основная причина не была идентифицирована. Возможно, сравнение версий OpenSSL на этих двух машинах станет отправной точкой для вас. –
Привет, Майкл, я просто попробовал более высокий opensl ver. Тот, который на серверах, которые вне aws и работал, имеет OpenSSL 1.0.1e-fips 11 февраля 2013 года, а затем теперь сервер aws имеет OpenSSL 1.0.2j 26 Sep 2016, но он все равно возвращает SignatureDoesNotMatch. Мне интересно, может ли это быть, я не использую правильный хост или URL? – sparkmix
Кажется, мой выше код работает для centos. Я попробовал другой сервер ubuntu, и он не работает. Может быть, так или иначе строка для генерации подписи не обрабатывается должным образом для ubuntu. Я пробовал последнюю версию openssl, но, похоже, все еще не работает. – sparkmix