Für die Authentifizierung ist ein gültiges Datum erforderlich, wenn ich eine Verbindung zu AWS S3 herstelle.

Für die Authentifizierung ist ein gültiges Datum erforderlich, wenn ich eine Verbindung zu AWS S3 herstelle.

Ich möchte eine Datei von Amazon AWS S3 herunterladen (GET) und die Befehle in ein Shell-Skript schreiben.

Aber ich bekomme immer die Fehlermeldung:Die AWS-Authentifizierung erfordert einen gültigen Date- oder x-amz-date-Header. Ich bin sicher, dass mit meinen Schlüsseln alles in Ordnung ist.

Hier ist meine s3.sh vonhttps://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

und es wird immer die Fehlermeldung angezeigt:

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

hat jemand ideen? danke

Antwort1

Ihr Skript verwendet den folgenden Wert für das Datum

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

Das Skript, auf das Sie verweisen, verwendet ein anderes Datumsformat. Da das andere Format einwandfrei funktioniert, ändern Sie Ihr Skript entsprechend.

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

verwandte Informationen