Direkt zum Inhalt

Wie behebe ich Fehler des Typs „SignatureDoesNotMatch“ oder „403 Forbidden“ bei Anfragen mit vorsignierten Amazon-S3-URLs?

Lesedauer: 3 Minute
0

Ich habe eine vorsignierte URL von Amazon Simple Storage Service (Amazon S3) verwendet, um Anfragen an meinen Amazon-S3-Bucket zu stellen. Dabei habe ich die Fehlermeldung „SignatureDoesNotMatch“ oder „403 Forbidden“ erhalten.

Kurzbeschreibung

Wenn du eine vorsignierte URL generierst, berechnet der Client eine eindeutige Signatur zur Authentifizierung der Anfrage. Daraufhin berechnet Amazon S3 eine Signatur auf der Grundlage der Parameter, die der Client in der HTTP-Anfrage sendet, und vergleicht die Signaturen miteinander. Stimmen die Signaturen nicht überein, erhältst du den Fehler „SignatureDoesNotMatch“.

Lösung

Überprüfe zur Fehlerbehebung die folgenden Konfigurationseinstellungen für deine Anfrage mit einer vorsignierten Amazon-S3-URL.

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Verwende außerdem unbedingt die neueste Version der AWS CLI.

Validieren der HTTP-Methode

Wenn du eine vorsignierte URL generierst, weist du der URL eine HTTP-Aktion zu. Stelle sicher, dass die Aktion, die der Client in der HTTP-Anfrage sendet, mit der HTTP-Aktion in der URL übereinstimmt. Weist du der URL beispielsweise eine GET-Aktion zu, muss die HTTP-Aktion in der Anfrage ebenfalls GET sein.

Überprüfen des geheimen Zugriffsschlüssels

Prüfe, ob der geheime Zugriffsschlüssel, den du zum Generieren der vorsignierten URL verwendet hast, den Status Falsch, Nicht gültig oder Abgeschaltet aufweist. Der geheime Zugriffsschlüssel nimmt einen dieser Status an, wenn du ihm nicht übereinstimmende Zeichen oder falsche Leerzeichen hinzufügst. Vergewissere dich, dass du den richtigen Zugriffsschlüssel verwendest, um die vorsignierte URL neu zu generieren.

Überprüfen des Bucket- und Schlüsselnamens in der URL

Stelle sicher, dass Bucket-Name und Objektname korrekt sind und mit den Namen übereinstimmen, die in der generierten Signatur der URL enthalten sind. Die Groß- und Kleinschreibung des Namens muss ebenfalls übereinstimmen.

Überprüfen der Header, die in der HTTP-Anfrage verwendet werden

Stelle sicher, dass die HTTP-Header, die du zum Generieren der Signatur verwendest, mit den Headern übereinstimmen, die der Client in der HTTP-Anfrage an S3 sendet.

Achte außerdem darauf, dass der Wert des Headers mit dem Wert übereinstimmt, der bei der Signaturberechnung generiert wurde. 

Bestätigen, dass die AWS-Region korrekt ist

Bevor du die vorsignierte URL an S3 sendest, musst du sicherstellen, dass die AWS-Region, in der du die URL generiert hast, mit der Region übereinstimmt, in der sich der Bucket derzeit befindet.

Führe die API-Anforderung GetBucketLocation aus, um herauszufinden, in welcher Region sich dein S3-Bucket befindet. Alternativ kannst du für diese Anfrage den AWS-CLI-Befehl get-bucket-location nutzen:

$ aws s3api get-bucket-location --bucket example-bucket

Beispielausgabe:

{      
"LocationConstraint": "us-west-2"  
}

Überprüfen der Gültigkeitsdauer der Systemzeit

Legst du die Systemzeit auf ein Datum nach Ende der Gültigkeitsdauer der digitalen Signatur fest, wird die Signatur als abgelaufen angezeigt und schlägt fehl. Legst du die Systemzeit auf ein Datum vor Beginn der Gültigkeitsdauer der Signatur fest, ist die Signatur ungültig und schlägt fehl.

Ähnliche Informationen

Liste der Fehlercodes

Warum läuft die vorsignierte URL für meinen Amazon-S3-Bucket vor der von mir angegebenen Ablaufzeit ab?

Objekte mit vorsignierten URLs herunter- und hochladen

Wie behebe ich den Fehler „Request has expired“, wenn ich versuche, auf ein S3-Objekt zuzugreifen?

AWS OFFICIALAktualisiert vor 10 Monaten