Amazon Web Services
Allgemeine Referenz (Version 1.0)

Behebung von Signaturversion 4-Fehlern bei AWS

Wenn Sie Code entwickeln, der Signaturversion 4 implementiert, erhalten Sie unter Umständen Fehlermeldungen von den AWS-Produkten, die Sie testen. Die Fehler sind in der Regel auf einen Fehler bei der Kanonisierung der Anforderung, auf eine falsche Ableitung oder Verwendung des Signaturschlüssels oder auf einen Validierungsfehler der mit der Anforderung übermittelten signaturspezifischen Parameter zurückzuführen.

Behebung von Signaturversion 4-Kanonisierungsfehlern bei AWS

Schauen Sie sich die folgende Anforderung an:

https://iam.amazonaws.com/?MaxItems=100 &Action=ListGroupsForUser &UserName=Test &Version=2010-05-08 &X-Amz-Date=20120223T063000Z &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIAIOSFODNN7EXAMPLE/20120223/us-east-1/iam/aws4_request &X-Amz-SignedHeaders=host &X-Amz-Signature=<calculated value>

Wenn Sie die kanonische Anforderung oder die zu signierende Zeichenfolge falsch berechnen, schlägt die Signaturüberprüfung durch den Service fehl. Das folgende Beispiel zeigt eine typische Fehlermeldung. Diese enthält die kanonische Zeichenfolge und die zu signierende Zeichenfolge, wie sie vom Service berechnet wurde. Sie können Ihren Berechnungsfehler beheben, indem Sie die zurückgegebenen Zeichenfolgen mit der kanonischen Zeichenfolge und Ihrer berechneten zu signierenden Zeichenfolge vergleichen.

<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>

Bei Tests mit einem SDK empfehlen wir zur Fehlerbehebung eine Überprüfung jedes Ableitungsschritts anhand bekannter Werte. Weitere Informationen finden Sie unter Signaturversion 4-Testsuite.

Behebung von Fehlern beim Umfang der Anmeldeinformationen mit AWS Signature Version 4

AWS-Produkte prüfen die Anmeldeinformationen auf den richtigen Umfang; die Anmeldeparameter müssen den richtigen Service, die richtige Region und das korrekte Datum angeben. Beispielsweise verweist die folgende Anmeldeinformation auf den Service Amazon RDS:

Credential=AKIAIOSFODNN7EXAMPLE/20120224/us-east-1/rds/aws4_request

Wenn Sie die gleichen Anmeldeinformationen für die Übermittlung einer Anforderung an IAM verwenden, erhalten Sie die folgende Fehlermeldung:

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Credential should be scoped to correct service: 'iam'. </Message> </Error> <RequestId>aa0da9de-5f2b-11e1-a2c0-c1dc98b6c575</RequestId>

Die Anmeldeinformationen müssen auch die richtige Region aufweisen. Beispielsweise ist in der folgenden Anmeldeinformation für eine IAM-Anforderung die Region USA West (Nordkalifornien) falsch angegeben.

Credential=AKIAIOSFODNN7EXAMPLE/20120224/us-west-1/iam/aws4_request

Wenn Sie die Anmeldeinformationen für die Übermittlung einer Anforderung an IAM verwenden, das nur die Angabe der Region us-east-1 akzeptiert, erhalten Sie die folgende Meldung:

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Credential should be scoped to a valid region, not 'us-east-1'. </Message> </Error> <RequestId>8e229682-5f27-11e1-88f2-4b1b00f424ae</RequestId> </ErrorResponse>

Sie erhalten die gleiche Meldung in Bezug auf eine ungültige Region von AWS-Produkten, die in mehreren Regionen verfügbar sind, wenn Sie Anforderungen an eine Region senden, die sich von der Region unterscheidet, die Sie im Umfang der Anmeldeinformationen angegeben haben.

In den Anmeldeinformationen muss auch die richtige Region für den Service und die Aktion in Ihrer Anforderung angegeben sein.

Das Datum, das Sie als Teil der Anmeldeinformationen verwenden, muss mit dem Datumswert im x-amz-date-Header übereinstimmen. Beispielsweise stimmt der folgende x-amz-date-Headerwert nicht mit dem Datumswert überein, der im darauf folgenden Credential-Parameter verwendet wird.

x-amz-date:"20120224T213559Z" Credential=AKIAIOSFODNN7EXAMPLE/20120225/us-east-1/iam/aws4_request

Wenn Sie diese Kombination aus x-amz-date-Header und Anmeldeinformation verwenden, erhalten Sie die folgende Fehlermeldung:

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Date in Credential scope does not match YYYYMMDD from ISO-8601 version of date from HTTP: '20120225' != '20120224', from '20120 224T213559Z'.</Message> </Error> <RequestId>9d6ddd2b-5f2f-11e1-b901-a702cd369eb8</RequestId> </ErrorResponse>

Auch eine abgelaufene Signatur kann eine Fehlermeldung generieren. Die folgende Fehlermeldung wurde z. B. aufgrund einer abgelaufenen Signatur erzeugt.

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Signature expired: 20120306T074514Z is now earlier than 20120306T074556Z (20120306T080056Z - 15 min.)</Message> </Error> <RequestId>fcc88440-5dec-11e1-b901-a702cd369eb8</RequestId> </ErrorResponse>

Behebung von Schlüsselsignierfehlern mit AWS Signature Version 4

Fehler durch eine falsche Ableitung des Signaturschlüssels oder eine falsche Verwendung der Kryptografie sind schwieriger zu beheben. In der Fehlermeldung werden Sie darauf hingewiesen, dass die Signatur nicht übereinstimmt. Wenn Sie überprüft haben, dass die kanonische Zeichenfolge und die zu signierende Zeichenfolge korrekt sind, ist die Abweichung bei der Signatur wahrscheinlich auf eines der beiden folgenden Probleme zurückzuführen:

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

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

Um zu prüfen, ob der geheime Schlüssel mit der Zugriffsschlüssel-ID übereinstimmt, können Sie Ihren geheimen Schlüssel und Ihre Zugriffsschlüssel-ID mit einer funktionierenden Implementierung verwenden. Eine Möglichkeit besteht darin, mit einem AWS SDK ein Programm zu schreiben, das unter Verwendung der Zugriffsschlüssel-ID und des geheimen Zugriffsschlüssels eine einfache Anforderung an AWS sendet.

Um zu prüfen, ob Ihr Code zur Schlüsselableitung korrekt ist, können Sie ihn mit unserem Beispielcode vergleichen. Weitere Informationen finden Sie unter Beispiele für das Ableiten eines Signaturschlüssels für Signature Version 4.