Résoudre les problèmes liés aux requêtes signées pour les API AWS - AWS Identity and Access Management

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Résoudre les problèmes liés aux requêtes signées pour les API AWS

Important

À moins que vous n'utilisiez AWS les SDK ou la CLI, vous devez écrire du code pour calculer les signatures qui fournissent des informations d'authentification dans vos demandes. Le calcul de la signature SigV4 peut s'avérer complexe et nous vous recommandons d'utiliser les kits SDK ou la CLI AWS dans la mesure du possible.

Lorsque vous développez du code qui crée une demande signée, vous pouvez recevoir le protocole HTTP 403 SignatureDoesNotMatch de Services AWS. Ces erreurs signifient que la valeur de signature de votre requête HTTP AWS ne correspond pas à la signature Service AWS calculée. Les erreurs HTTP 401 Unauthorized sont renvoyées lorsque les autorisations ne permettent pas à l'appelant d'effectuer la requête.

Les demandes d'API peuvent renvoyer une erreur si :

  • La demande d'API n'est pas signée et elle utilise l'authentification IAM.

  • Les informations d'identification IAM utilisées pour signer la demande sont incorrectes ou ne sont pas autorisées à invoquer l'API.

  • La signature de la demande d'API signée ne correspond pas à la signature calculée par le service  AWS .

  • L'en-tête de demande d'API est incorrect.

Note

Mettez à jour votre protocole de AWS signature de la version 2 (SigV2) à la version AWS Signature 4 (SigV4) avant d'explorer d'autres solutions aux erreurs. Les services, tels qu'Amazon S3, et les régions ne prennent plus en charge la signature SigV2.

Erreurs d'informations d'identification

Assurez-vous que la demande d'API est signée avec SigV4. Si la demande d'API n'est pas signée, il se peut que vous receviez le message d'erreur : Missing Authentication Token. Ajoutez la signature manquante et renvoyez la demande.

Vérifiez que les informations d'identification de la clé d'accès et de la clé secrète sont correctes. Si la clé d'accès est incorrecte, le message d'erreur suivant peut s'afficher : Unauthorized. Assurez-vous que l'entité utilisée pour signer la demande est autorisée à effectuer cette dernière. Pour plus de détails, consultez Résolution des problèmes liés aux messages d'erreur d'accès rejeté.

Erreurs de requête canonique et de chaîne de signature

Si le calcul de la requête canonique est incorrect dans Étape 2 : créer un hachage de la requête canonique ou Étape 3 : créer une chaîne de connexion, l'étape de vérification de la signature effectuée par le service échoue avec le message d'erreur :

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

Lorsque le AWS service reçoit une demande signée, il recalcule la signature. S'il existe des différences entre les valeurs, les signatures ne correspondent pas. Comparez la requête canonique et la chaîne à votre demande signée avec la valeur du message d'erreur. Modifiez le processus de signature en cas de différence.

Note

Vous pouvez également vérifier que vous n'avez pas envoyé la requête via un proxy qui modifie les en-têtes ou la requête.

Exemple de requête canonique
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

Pour vérifier que la clé secrète correspond à l'ID de la clé d'accès, vous pouvez les tester avec une implémentation fonctionnelle connue. Par exemple, utilisez un AWS SDK ou la AWS CLI pour envoyer une demande à AWS.

En-tête de la demande d'API

Assurez-vous que l'en-tête d'autorisation SigV4 que vous avez ajouté dans Étape 4 : calculer la signature contient la clé d'informations d'identification correcte similaire à la suivante :

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

Si la clé d'informations d'identification est manquante ou incorrecte, vous pouvez recevoir le message d'erreur suivant : Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter.. Assurez-vous que la demande d'autorisation SigV4 contient également la date de la demande en utilisant l'en-tête HTTP Date ou x-amz-date.

Erreurs d’étendue des informations d'identification

Le champ d'application des informations d'identification dans Étape 3 : créer une chaîne de connexion limite une signature à une date, une région et un service spécifiques. Cette chaîne présente le format suivant :

YYYYMMDD/region/service/aws4_request
Note

Si vous utilisez SigV4a, la région n'est pas incluse dans le champ d'application des informations d'identification.

Date

Si l'étendue des informations d'identification ne spécifie pas la même date que l'en-tête x-amz-date, l'étape de vérification de la signature échoue avec le message d'erreur suivant :

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

Si la requête indique une date future, l'étape de vérification de la signature échoue avec le message d'erreur suivant :

Signature not yet current: date is still later than date

Si la requête a expiré, l'étape de vérification de la signature échoue avec le message d'erreur suivant :

Signature expired: date is now earlier than date
Région

Si l'étendue des informations d'identification ne spécifie pas la même Région que la requête, l'étape de vérification de la signature échoue avec le message d'erreur suivant :

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

Si l'étendue des informations d'identification ne spécifie pas le même service que l'en-tête host, l'étape de vérification de la signature échoue avec le message d'erreur suivant :

Credential should be scoped to correct service: 'service'
Chaîne de terminaison

Si l'étendue des informations d'identification ne se termine pas par aws4_request, l'étape de vérification de la signature échoue avec le message d'erreur suivant :

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

Erreurs de signature de clé

Les erreurs causées par une dérivation incorrecte de la clé de signature ou une utilisation inappropriée du chiffrement sont plus difficiles à résoudre. Après avoir vérifié que la chaîne canonique et la chaîne à signer sont correctes, vous pouvez également vérifier l'existence de l'un des problèmes suivants :

  • La clé d'accès secrète ne correspond pas à l'ID de clé d'accès que vous avez spécifiée.

  • Votre code de dérivation de clé pose problème.

Pour vérifier que la clé secrète correspond à l'ID de la clé d'accès, vous pouvez les tester avec une implémentation fonctionnelle connue. Par exemple, utilisez un AWS SDK ou le AWS CLI pour faire une demande à AWS. Pour obtenir des exemples, consultez Demander des exemples de signature