Я пытаюсь загрузить файл из своего хранилища s3 с помощью простого сценария bash, который я нашел в Интернете.Не удается получить файл из хранилища amazon s3 с помощью curl с строкой запроса requestauthentication
#!/bash/sh
bucket='my_bucket_name'
file_path='path_to_my_file'
resource="/${bucket}/${file_path}"
# set url time to expire
expires=$(date +%s -d '4000 seconds')
stringtoSign="GET\n\n\n${expires}\n${resource}"
s3Key='s3Key_here'
s3Secret='s3SecretKey_here'
signature=`echo -en ${stringtoSign} | openssl sha1 -hmac ${s3Key} -binary | base64`
curl -G https://${bucket}.s3.amazonaws.com/${file_path} \
--data AWSAccessKeyId=${s3Key} \
--data Expires=${expires}\
--data-urlencode Signature=${signature}
Как вы можете видеть здесь ничего особенного. Я хочу использовать вариант с запросом строки запроса.
Но он всегда отправляет мне сообщение об ошибке «403 Forbidden» с дополнительным сообщением - «Подписанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой ключ и метод подписи». Ошибка в том, что сообщение об ошибке не помогло мне.
Я проверил полномочия с помощью библиотеки бото питона,
import boto
from boto.s3.key import Key
KEY_ID = 'key_id'
SECRET_KEY_ID = 'secret_key'
SOURCE_FILE_NAME = 'path_to_file'
DEST_FILE_NAME = 'file'
BUCKET_NAME = 'my_bucket_name'
boto.set_stream_logger('boto')
conn = boto.connect_s3(KEY_ID, SECRET_KEY_ID)
bucket = conn.get_bucket(BUCKET_NAME)
# Get the Key object of the given key, in the bucket
k = Key(bucket, SOURCE_FILE_NAME)
# Get the contents of the key into a file
k.get_contents_to_filename(DEST_FILE_NAME)
только что вошли две секретные ключи, которые я получил, имя ведра и путь к файлу и он работал на меня. Но это не то, что я ищу.
Конечно, я прочитал это docs и попытался следовать за ним. Моя переменная «stringtoSing» формируется правильным образом. Я просто не могу представить, где ошибка.
Возможно, было бы намного проще использовать [aws cli] (http://docs.aws.amazon.com/cli/latest/reference/s3/cp.html) 'aws s3 cp s3: // bucket/key local/file' –