Ваша подпись выглядит нормально, но ваш запрос неверен и, следовательно, не совпадает.
-H "Host: ${bucket}.${region}.amazonaws.com" \
неверно.
Правильное значение ${bucket}.s3 ${region}.amazonaws.com
. Вы пропускаете s3.
в имени хоста ... но даже если это правильно, это все равно неверноj, потому что ваш URL https://s3.amazonaws.com/${bucket}/...
также включает в себя корзину, что означает, что ваше имя корзины неявно добавляется в начало ключа объекта потому что это появляется дважды.
Кроме того, https://s3.amazonaws.com
- это us-east-1. Чтобы подключиться к правильному региону, ваш URL должен быть одним из следующих вариантов:
https://${region}.s3.amazonaws.com/${bucket}/${folderPathAtS3}
https://${bucket}.${region}.s3.amazonaws.com/${folderPathAtS3}
https://${bucket}.s3.amazonaws.com/${folderPathAtS3}
Используйте один из этих форматов и исключите -H "Host: ..."
, потому что тогда он будет избыточным.
Последний из трех форматов URL начнет работать только после того, как корзине будет больше нескольких минут или часов. S3 создает их автоматически, но это занимает некоторое время.