Ошибка при загрузке файла на S3: рассчитанная нами подпись запроса не соответствует предоставленной вами подписи - PullRequest
1 голос
/ 20 мая 2019

Я пытаюсь загрузить файл в S3 Bucket, используя следующий сценарий оболочки:

file=somefile.txt
bucket=some-bucket
resource="/${bucket}/${file}"
contentType="application/x-compressed-tar"
dateValue=`date -R`
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
s3Key=xxxxxxxxxxxxxxx
s3Secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`
curl -X PUT -T "${file}" \
  -H "Host: ${bucket}.s3.amazonaws.com" \
  -H "Date: ${dateValue}" \
  -H "Content-Type: ${contentType}" \
  -H "Authorization: AWS ${s3Key}:${signature}" \
  https://${bucket}.s3.amazonaws.com/${file}

Сценарий выше успешно загружает файл в корзину.Однако он не делает файл / объект общедоступным, поэтому при попытке загрузить файл с помощью wget https://some-bucket.s3.amazonaws.com/somefile.txt происходит сбой.

Чтобы сделать объект / файл общедоступным, я попытался передать управление доступом acl="x-amz-acl:public-read"во время загрузки (скрипт ниже):

file=somefile.txt
bucket=some-bucket
resource="/${bucket}/${file}"
contentType="application/x-compressed-tar"
dateValue=`date -R`
acl="x-amz-acl:public-read"
stringToSign="PUT\n\n${contentType}\n${dateValue}\n$acl\n${resource}"
s3Key=xxxxxxxxxxxxxxxxxxxxxxxx
s3Secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`
curl -X PUT -T "${file}" \
  -H "Host: ${bucket}.s3.amazonaws.com" \
  -H "Date: ${dateValue}" \
  -H "$acl" \
  -H "Content-Type: ${contentType}" \
  -H "Authorization: AWS ${s3Key}:${signature}" \
  https://${bucket}.s3.amazonaws.com/${file} 

Но, когда я выполняю этот скрипт, он не может загрузить файл на S3 и выдает следующую ошибку:

< ..Code>SignatureDoesNotMatch</ Code>
<..Message >The request signature we calculated does not match the signature you provided. Check your key and signing method.</ Message>

Что можетбыть проблемой?Что-то не так с тем, как я пытаюсь обеспечить контроль доступа в скрипте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...