AWS S3 に接続する場合、認証には有効な日付が必要です。

AWS S3 に接続する場合、認証には有効な日付が必要です。

Amazon AWS S3からファイルをダウンロード(GET)し、シェルスクリプトにコマンドを書きたいです。

しかし、常にエラーメッセージが表示されます。AWS 認証には有効な日付または x-amz-date ヘッダーが必要です。。私の鍵は大丈夫だと確信しています。

これは私のs3.shです。https://stackoverflow.com/questions/27658147/download-private-file-from-s3-using-bash:

#!/bin/sh
s3key="xxxxxxxxxxxxxxxxxxxx"
s3skey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
file=/aaa.pdf
bucket=test
date=$(date +"%a, %d %b %Y %T %z")
echo $date
content_type='application/x-compressed-tar'
string="GET\n\n$content_type\n$date\n/$bucket$file"
signature=$(echo -en "${string}" | openssl sha1 -hmac "${s3skey}" -binary | base64)
curl -H "Host: $bucket.s3.amazonaws.com" \
    -H "Date: $date" \
    -H "x-amz-date: $date" \
    -H "Content-Type: $content_type" \
    -H "Authorization: AWS ${s3key}:$signature" \
 https://$bucket.s3-ap-northeast-1.amazonaws.com$file

常にエラーメッセージが表示されます。

<Code>AccessDenied</Code><Message>AWS authentication requires a valid Date or x-amz-date header</Message>

誰でもどんなアイデアがありますか?ありがとう

答え1

スクリプトでは、次の日付値を使用します。

date=$(date +"%a, %d %b %Y %T %z")

参照したスクリプトは異なる日付形式を使用します。他の形式もうまく機能するため、その形式に合わせてスクリプトを変更してください。

dateValue="`date +'%a, %d %b %Y %H:%M:%S %z'`" 

関連情報