Wie kann ich Signaturübereinstimmungs-Fehler beheben, wenn SigV4-signierte Anforderungen mit IAM-Authentifizierung an API Gateway gestellt werden?

Letzte Aktualisierung: 22.09.2022

Die signierte Anforderung von Signature Version 4 (SigV4) an Amazon API Gateway ist mit einer 403-Antwort und einem Fehler, ähnlich dem folgenden, fehlgeschlagen:

„Die von uns berechnete Anforderungssignatur stimmt nicht mit der von Ihnen angegebenen Signatur überein. Prüfen Sie Ihren geheimen AWS-Zugriffsschlüssel und die Signaturmethode.“

Wie kann ich das Problem beheben?

Kurzbeschreibung

API Gateway-API-Endpunkte, die AWS Identity and Access Management (IAM)-Authentifizierung verwenden, geben möglicherweise 403-Fehler zurück, wenn:

  • Die API-Anforderung nicht signiert ist und die API-Anforderung die IAM-Authentifizierung verwendet.
  • Die zum Signieren der Anforderung verwendeten IAM-Anmeldeinformationen falsch sind oder keine Berechtigung zum Aufrufen der API haben.
  • Die Signatur der signierten API-Anforderung nicht mit der Signatur für den API-Endpunkt des API Gateways übereinstimmt.
  • Der Header der API-Anforderung falsch ist.

Auflösung

IAM-Authentifizierung

Stellen Sie sicher, dass die API-Anforderung, die IAM-Authentifizierung verwendet, mit SigV4 signiert ist. Wenn die API-Anforderung nicht signiert ist, wird eventuell die folgende Fehlermeldung angezeigt: „Fehlendes Authentifizierungstoken“

IAM-Anmeldeinformationen

Stellen Sie sicher, dass die Authentifizierungs-Anmeldeinformation für den Zugriffsschlüssel und den geheimen Schlüssel korrekt sind. Wenn der Zugriffsschlüssel falsch ist, wird möglicherweise die folgende Fehlermeldung angezeigt: „Das in der Anforderung enthaltene Sicherheitstoken ist ungültig.“

Stellen Sie sicher, dass die zum Signieren der Anforderung verwendete IAM-Entität über die Berechtigungen execute-api:Invoke verfügt. Wenn die IAM-Entität nicht über die Berechtigungen execute-api:Invoke verfügt, wird möglicherweise die folgende Fehlermeldung angezeigt: „Benutzer: arn:aws:iam::xxxxxxxxxxxx:user/username ist nicht autorisiert, execute-api:Invoke auf der Ressource auszuführen“

Nichtübereinstimmung der Signatur

Wenn der geheime Zugriffsschlüssel falsch ist, wird möglicherweise die folgende Fehlermeldung angezeigt: „Die von uns berechnete Anforderungssignatur stimmt nicht mit der von Ihnen angegebenen Signatur überein.“

Der geheime Zugriffsschlüssel muss mit der ID des Zugriffsschlüssels im Anmeldeinformation-Parameter übereinstimmen. Für Anweisungen folgen Sie dem Abschnitt Senden einer Anforderung zum Testen der Authentifizierungs-Einstellungen unter Wie aktiviere ich die IAM-Authentifizierung für API-Gateway-REST-APIs?

Stellen Sie sicher, dass Sie die Anweisungen für den SigV4-Signaturprozess befolgt haben. Wenn Werte in der Signaturberechnung falsch sind, wird möglicherweise die folgende Fehlermeldung angezeigt: „Die von uns berechnete Anforderungssignatur stimmt nicht mit der von Ihnen angegebenen Signatur überein.“

Wenn API Gateway eine signierte Anforderung empfängt, berechnet es die Signatur neu. Wenn es Unterschiede in den Werten gibt, erhält API Gateway eine andere Signatur. Vergleichen Sie die kanonische Anforderung und Zeichenfolge mit Ihrer signierten Anforderung mit dem Wert in der Fehlermeldung. Ändern Sie den Signaturprozess, wenn es irgendwelche Unterschiede gibt.

Beispiel für eine 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 any 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-data are required headers for all signed request                       
x-amz-date:20220806T024003Z                              

content-type;host;x-amz-date                             -------- A list of signed headers
d167e99c53f15b0c105101d468ae35a3dc9187839ca081095e340f3649a04501        -------- hash of the payload

Beispiel für eine kanonische Fehlerantwort:

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
  <Error>
    <Type>Sender</Type>
    <Code>SignatureDoesNotMatch</Code>
    <Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

The canonical string for this request should have been 'GET / Action=ListGroupsForUser&MaxItems=100&UserName=Test&Version=2010-05-08&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential
=AKIAIOSFODNN7EXAMPLE%2F20120223%2Fus-east-1%2Fiam%2Faws4_request&X-Amz-Date=20120223T063000Z&X-Amz-SignedHeaders=host
host:iam.amazonaws.com

host
<hashed-value>'

The String-to-Sign should have been
'AWS4-HMAC-SHA256
20120223T063000Z
20120223/us-east-1/iam/aws4_request
<hashed-value>'
</Message>
  </Error>
  <RequestId>4ced6e96-5de8-11e1-aa78-a56908bdf8eb</RequestId>
</ErrorResponse>

Hinweis: Für API-Gateway-Header sind nur die host- und x-amz-date-Header erforderlich.

API-Anforderungs-Header

Stellen Sie sicher, dass der SigV4-Autorisierungs-Header den richtigen Anmeldeinformations-Schlüssel enthält, ähnlich dem Folgendem:

Authorization: AWS4-HMAC-SHA256 
Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, 
SignedHeaders=host;range;x-amz-date,
Signature=example-generated-signature

Wenn der Anmeldeinformations-Schlüssel fehlt oder falsch ist, wird möglicherweise die folgende Fehlermeldung angezeigt: „Für den Autorisierungs-Header ist der Anmeldeinformations-Parameter erforderlich. Der Autorisierungs-Header erfordert den Signatur-Parameter.“

Stellen Sie sicher, dass die SigV4-Autorisierungsanforderung auch das Anforderungsdatum mit HTTP Date oder dem x-amz-date-Header enthält.

Weitere Informationen finden Sie unter Problembehandlung bei Schlüsselsignierungs-Fehlern und Problembehandlung bei Fehlern in AWS Signature Version 4.