Problembehandlung beim Signieren von AWS API Anfragen mit Signature Version 4 - AWS Identitäts- und Zugriffsverwaltung

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Problembehandlung beim Signieren von AWS API Anfragen mit Signature Version 4

Wichtig

Sofern Sie nicht das AWS SDKs oder verwendenCLI, müssen Sie Code schreiben, um Signaturen zu berechnen, die in Ihren Anfragen Authentifizierungsinformationen enthalten. Die SigV4-Signaturberechnung kann ein komplexes Unterfangen sein, und wir empfehlen, dass Sie, CLI wann immer möglich, das AWS SDKs oder verwenden.

Wenn Sie Code entwickeln, der eine signierte Anfrage erstellt, erhalten Sie möglicherweise HTTP 403 SignatureDoesNotMatch von AWS-Services. Diese Fehler bedeuten, dass der Signaturwert in Ihrer HTTP Anfrage AWS nicht mit der AWS-Service berechneten Signatur übereinstimmt. HTTPUnauthorized401-Fehler treten zurück, wenn der Anrufer aufgrund von Zugriffsberechtigungen die Anfrage nicht stellen kann.

APIAnfragen können in folgenden Fällen einen Fehler zurückgeben:

  • Die API Anfrage ist nicht signiert und die API Anfrage verwendet IAM Authentifizierung.

  • Die zum Signieren der Anfrage verwendeten IAM Anmeldeinformationen sind falsch oder verfügen nicht über die erforderlichen Berechtigungen zum Aufrufen von. API

  • Die Signatur der signierten API Anfrage stimmt nicht mit der Signatur überein, die der AWS Dienst berechnet hat.

  • Der API Anforderungsheader ist falsch.

Anmerkung

Aktualisieren Sie Ihr Signaturprotokoll von AWS Signature Version 2 (SigV2) auf AWS Signature Version 4 (Sigv4), bevor Sie sich mit anderen Fehlerlösungen befassen. Dienste wie Amazon S3 und Regions unterstützen die SIGv2-Signatur nicht mehr.

Fehler bei den Anmeldeinformationen

Stellen Sie sicher, dass die API Anfrage mit SigV4 signiert ist. Wenn die API Anfrage nicht signiert ist, erhalten Sie möglicherweise den folgenden Fehler:Missing Authentication Token. Fügen Sie die fehlende Signatur hinzu und senden Sie die Anfrage erneut.

Stellen Sie sicher, dass die Authentifizierungsdaten für den Zugriffsschlüssel und den geheimen Schlüssel korrekt sind. Wenn der Zugriffsschlüssel falsch ist, erhalten Sie möglicherweise die folgende Fehlermeldung: Unauthorized. Stellen Sie sicher, dass die zum Signieren der Anfrage verwendete Entität berechtigt ist, die Anfrage zu stellen. Details hierzu finden Sie unter Problembehandlung bei Fehlermeldungen mit verweigertem Zugriff.

Fehler bei der kanonischen Anfrage und beim Signieren der Zeichenfolge

Wenn Sie die kanonische Anfrage in Erstellen Sie einen Hash der kanonischen Anfrage oder Erstellen Sie eine Zeichenfolge zum Signieren falsch berechnet haben, schlägt der vom Service durchgeführte Signaturüberprüfungsschritt mit der Fehlermeldung fehl:

The request signature we calculated does not match the signature you provided

Wenn der AWS Dienst eine signierte Anfrage empfängt, berechnet er die Signatur neu. Wenn die Werte unterschiedlich sind, stimmen die Signaturen nicht überein. Vergleichen Sie die kanonische Anfrage und die Zeichenfolge mit Ihrer signierten Anfrage mit dem Wert in der Fehlermeldung. Ändern Sie den Signaturprozess, falls es Unterschiede gibt.

Anmerkung

Sie können auch überprüfen, ob Sie die Anfrage nicht über einen Proxy gesendet haben, der die Header oder die Anfrage ändert.

Beispiel für kanonische Anforderung
GET -------- HTTP method / -------- Path. For API stage endpoint, it should be /{stage-name}/{resource-path} -------- Query string key-value pair. Leave it blank if the request doesn't have a query string. content-type:application/json -------- Header key-value pair. One header per line. host:0123456789.execute-api.us-east-1.amazonaws.com -------- Host and x-amz-date are required headers for all signed requests. x-amz-date:20220806T024003Z content-type;host;x-amz-date -------- A list of signed headers d167e99c53f15b0c105101d468ae35a3dc9187839ca081095e340f3649a04501 -------- Hash of the payload

Um zu überprüfen, ob der Geheimschlüssel mit der Zugriffsschlüssel-ID übereinstimmt, können Sie ihn mit einer bekannten funktionierenden Implementierung testen. Verwenden Sie beispielsweise ein AWS SDK oder das, um eine Anfrage AWS CLI an zu stellen. AWS

API-Header der Anforderung

Wenn der Autorisierungsheader leer ist, der Anmeldeinformationsschlüssel oder die Signatur fehlt oder falsch ist, der Header nicht mit einem Algorithmusnamen beginnt oder die Schlüssel-Wert-Paare kein Gleichheitszeichen enthalten, erhalten Sie einen der folgenden Fehler:

  • Der Autorisierungsheader darf nicht leer sein.

  • Für den Autorisierungsheader ist der Parameter 'Credential' erforderlich.

  • Für den Autorisierungsheader ist der Parameter „Signature“ erforderlich.

  • Die Signatur enthält ein ungültiges Schlüssel=Wert-Paar (fehlendes Gleichheitszeichen) im Autorisierungsheader.

Stellen Sie sicher, dass der SigV4-Autorisierungsheader, den Sie hinzugefügt haben, den richtigen Anmeldeinformationsschlüssel und auch das Anforderungsdatum enthält, indem Sie entweder Date oder den Header verwenden. Berechne die Signatur HTTP x-amz-date

Wenn Sie einen IncompleteSignatureException Fehler erhalten haben und die Konstruktion der Signatur korrekt ist, können Sie überprüfen, ob der Autorisierungsheader bei der Übertragung nicht geändert wurde, AWS-Service indem Sie in Ihrer clientseitigen Anfrage einen SHA -256-Hash und eine B64-Kodierung des Autorisierungsheaders berechnen.

  1. Rufen Sie den Autorisierungsheader ab, den Sie in der Anfrage gesendet haben. Ihr Autorisierungsheader ähnelt dem folgenden Beispiel:

    Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=example-generated-signature
  2. Berechnet einen SHA -256-Hash des Autorisierungsheaders.

    hashSHA256(rawAuthorizationHeader) = hashedAuthorizationHeader
  3. Codieren Sie den Hash-Autorisierungsheader im Base64-Format.

    base64(hashedAuthorizationHeader) = encodedHashedAuthorizationHeader
  4. Vergleichen Sie die soeben berechnete Hash-Zeichenfolge und die kodierte Zeichenfolge mit der Zeichenfolge, die Sie in Ihrer Fehlermeldung erhalten haben. Ihre Fehlermeldung sollte dem folgenden Beispiel ähneln:

    com.amazon.coral.service#IncompleteSignatureException: The signature contains an in-valid key=value pair (missing equal-sign) in Authorization header (hashed with SHA-256 and encoded with Base64): '9c574f83b4b950926da4a99c2b43418b3db8d97d571b5e18dd0e4f3c3ed1ed2c'.
  • Wenn sich die beiden Hashes unterscheiden, hat sich ein Teil des Autorisierungsheaders während der Übertragung geändert. Diese Änderung könnte darauf zurückzuführen sein, dass Ihre Netzwerk- oder Client-Handler signierte Header anhängen oder den Autorisierungsheader auf irgendeine Weise ändern.

  • Wenn die beiden Hashes übereinstimmen, entspricht der Autorisierungsheader, den Sie in der Anfrage gesendet haben, dem, den Sie erhalten haben. AWS Überprüfen Sie die Fehlermeldung, die Sie erhalten haben, um festzustellen, ob das Problem auf falsche Anmeldeinformationen oder Signaturen zurückzuführen ist. Diese Fehler werden in den anderen Abschnitten auf dieser Seite behandelt.

Fehler im Geltungsbereich der Anmeldeinformationen

Der in Erstellen Sie eine Zeichenfolge zum Signieren erstellte Anmeldeinformationsbereich beschränkt eine Signatur auf ein bestimmtes Datum, eine bestimmte Region und einen bestimmten Service. Die Zeichenfolge hat das folgende Format:

YYYYMMDD/region/service/aws4_request
Anmerkung

Wenn Sie SigV4a verwenden, ist die Region nicht im Gültigkeitsbereich der Anmeldeinformationen enthalten.

Datum

Wenn der Gültigkeitsbereich der Anmeldeinformationen nicht dasselbe Datum angibt wie x-amz-date Header schlägt der Schritt zur Signaturüberprüfung fehl und die folgende Fehlermeldung wird angezeigt:

Date in Credential scope does not match YYYYMMDD from ISO-8601 version of date from HTTP

Wenn die Anforderung einen Zeitpunkt in der Zukunft angibt, schlägt der Schritt zur Signaturüberprüfung mit der folgenden Fehlermeldung fehl:

Signature not yet current: date is still later than date

Wenn die Anfrage abgelaufen ist, schlägt der Schritt zur Signaturüberprüfung mit der folgenden Fehlermeldung fehl:

Signature expired: date is now earlier than date
Region

Wenn der Geltungsbereich der Anmeldeinformationen nicht dieselbe Region wie die Anfrage angibt, schlägt der Schritt zur Signaturüberprüfung mit der folgenden Fehlermeldung fehl:

Credential should be scoped to a valid Region, not region-code
Service

Wenn der Gültigkeitsbereich der Anmeldeinformationen nicht denselben Dienst angibt wie host Header schlägt der Schritt zur Signaturüberprüfung fehl und die folgende Fehlermeldung wird angezeigt:

Credential should be scoped to correct service: 'service'
Abschlusszeichenfolge

Wenn der Gültigkeitsbereich der Anmeldeinformationen nicht endet mit aws4_request, schlägt der Schritt zur Signaturüberprüfung fehl und die folgende Fehlermeldung wird angezeigt:

Credential should be scoped with a valid terminator: 'aws4_request'

Fehler bei der Schlüsselsignierung

Fehler, die durch falsche Ableitung des Signaturschlüssels oder unsachgemäße Verwendung von Kryptografie verursacht werden, sind schwieriger zu beheben. Nachdem Sie überprüft haben, ob die kanonische Zeichenfolge und die zu signierende Zeichenfolge korrekt sind, können Sie auch überprüfen, ob eines der folgenden Probleme vorliegt:

  • Der geheime Zugriffsschlüssel stimmt nicht mit der Zugriffsschlüssel-ID überein, die Sie angegeben haben.

  • Es liegt ein Problem mit dem Code zur Schlüsselableitung vor.

Um zu überprüfen, ob der Geheimschlüssel mit der Zugriffsschlüssel-ID übereinstimmt, können Sie ihn mit einer bekannten funktionierenden Implementierung testen. Verwenden Sie beispielsweise ein AWS SDK oder das, AWS CLI um eine Anfrage zu stellen AWS. Beispiele finden Sie unter Anfordern von Signaturbeispielen