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 à la signature de la version 4 de Signature pour les demandes AWS API
Important
À moins que vous n'utilisiez le AWS SDKs ouCLI, 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 être une tâche complexe, et nous vous recommandons d'utiliser le AWS SDKs ou CLI chaque fois que cela est possible.
Lorsque vous développez du code qui crée une demande signée, vous pouvez recevoir HTTP 403 SignatureDoesNotMatch
de Services AWS. Ces erreurs signifient que la valeur de signature figurant dans votre HTTP demande AWS ne correspond pas à la signature Service AWS calculée. HTTPUnauthorized
Les erreurs 401 sont renvoyées lorsque les autorisations ne permettent pas à l'appelant de faire la demande.
APIles demandes peuvent renvoyer une erreur si :
-
La API demande n'est pas signée et utilise IAM l'authentification. API
-
Les IAM informations d'identification utilisées pour signer la demande sont incorrectes ou ne sont pas autorisées à invoquer leAPI.
-
La signature de la API demande signée ne correspond pas à la signature calculée par le AWS service.
-
L'en-tête de la API demande 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.
Causes possibles :
Erreurs d'informations d'identification
Assurez-vous que la API demande est signée avec SigV4. Si la API demande 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 Création d’un hachage de la requête canonique ou Création d’une chaîne à signer, 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 le AWS CLI pour faire une demande à AWS.
En-tête de demande API
Lorsque l’en-tête d’autorisation est vide, que la clé ou la signature des informations d’identification est manquante ou incorrecte, que l’en-tête ne commence pas par un nom d’algorithme ou que les paires clé-valeur n’incluent pas de signe égal, vous recevez l’une des erreurs suivantes :
-
L’en-tête d’autorisation ne peut pas être vide.
-
L’en-tête d’autorisation nécessite le paramètre « Informations d’identification ».
-
L’en-tête d’autorisation nécessite le paramètre « Signature ».
-
La signature contient une paire clé=valeur non valide (signe égal manquant) dans l’en-tête d’autorisation.
Assurez-vous que l'en-tête d'autorisation SigV4 que vous avez ajouté Calcul de la signature inclut la bonne clé d'identification et inclut également la date de la demande en utilisant la HTTP date ou l'x-amz-date
en-tête.
Si vous avez reçu une IncompleteSignatureException erreur et que la construction de la signature est correcte, vous pouvez vérifier que l'en-tête d'autorisation n'a pas été modifié pendant le transfert vers le en Service AWS calculant un hachage SHA -256 et un codage B64 de l'en-tête d'autorisation dans votre demande côté client.
-
Obtenez l’en-tête d’autorisation que vous avez envoyé dans la requête. Votre en-tête d’autorisation ressemble à l’exemple suivant :
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=example-generated-signature
-
Calculez un hachage SHA -256 de l'en-tête d'autorisation.
hashSHA256(rawAuthorizationHeader) = hashedAuthorizationHeader
-
Codez l’en-tête d’autorisation haché au format Base64.
base64(hashedAuthorizationHeader) = encodedHashedAuthorizationHeader
-
Comparez la chaîne hachée et codée que vous venez de calculer à la chaîne que vous avez reçue dans votre message d’erreur. Votre message d’erreur doit ressembler à l’exemple suivant :
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'.
-
Si les deux hachages diffèrent, c’est qu’une partie de l’en-tête d’autorisation a été modifiée en transit Ce changement peut être dû au fait que les gestionnaires de votre réseau ou de votre client attachent des en-têtes signés ou modifient l’en-tête d’autorisation d’une manière ou d’une autre.
-
Si les deux hachages correspondent, l'en-tête d'autorisation que vous avez envoyé dans la demande correspond à celui AWS reçu. Consultez le message d’erreur que vous avez reçu pour déterminer si le problème est dû à des informations d’identification ou à une signature incorrectes. Ces erreurs sont traitées dans les autres sections de cette page.
Erreurs d’étendue des informations d'identification
Le champ d'application des informations d'identification dans Création d’une chaîne à signer 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 le champ d'application des informations d'identification ne spécifie pas la même date que le x-amz-date en-tête, l'étape de vérification de 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 thandate
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 thandate
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 le host en-tête, l'étape de vérification de signature échoue avec le message d'erreur suivant :
Credential should be scoped to correct service: 'service
'
Chaîne de terminaison
Si la portée des informations d'identification ne se termine pas par aws4_request, l'étape de vérification de 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