En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je résoudre les erreurs HTTP 403 depuis API Gateway ?

Lecture de 11 minute(s)
0

Lorsque j’appelle mon API Amazon API Gateway, je reçois une erreur 403.

Brève description

Lorsqu'un client ne peut pas accéder à une URL valide, vous obtenez un code de réponse HTTP 403. Le serveur comprend la requête, mais ne peut y répondre en raison de problèmes côté client.
Les API API Gateway peuvent renvoyer des réponses 403 pour les raisons suivantes :

ProblèmeEn-tête de réponseMessage d’erreurCause racine
Accès refusé« x-amzn-errortype » = « AccessDeniedException »« User is not authorized to access this resource with an explicit deny »L’appelant n’est pas autorisé à accéder à une API qui utilise un mécanisme d'autorisation Lambda pour API Gateway.
Accès refusé« x-amzn-errortype » = « AccessDeniedException »« Utilisateur : <user-arn> n’est pas autorisé à exécuter : execute-api:Invoke sur la ressource : <api-resource-arn> with an explicit deny »L’appelant n’est pas autorisé à accéder à une API qui utilise l’autorisation AWS Identity and Access Management (IAM). Ou l'API est attachée à une stratégie de ressources qui refuse explicitement l'accès à l'appelant. Pour plus d'informations, consultez la section Authentification et stratégie de ressources IAM.
Accès refusé« x-amzn-errortype » = « AccessDeniedException »« Utilisateur : anonyme n’est pas autorisé à exécuter : execute-api:Invoke sur la ressource :<api-resource-arn> »L’appelant n’est pas autorisé à accéder à une API qui utilise une autorisation IAM. Ou l'API est attachée à une stratégie de ressources qui n'autorise pas explicitement l'appelant à invoquer l'API. Pour plus d'informations, consultez la section Authentification et stratégie de ressources IAM.
Accès refusé« x-amzn-errortype » = « AccessDeniedException »« The security token included in the request is invalid. »L’appelant a utilisé des clés IAM non valides pour accéder à une API qui utilise l’autorisation IAM.
Jeton d’authentification manquant« x-amzn-errortype » = « MissingAuthenticationTokenException »« Jeton d’authentification manquant »Un jeton d’authentification n’a pas été trouvé dans la demande.
Le jeton d’authentification a expiré« x-amzn-errortype » = « InvalidSignatureException »« Signature expired »Le jeton d’authentification de la requête a expiré.
La clé API n’est pas valide« x-amzn-errortype » = « ForbiddenException »« Forbidden »L'appelant a utilisé une clé API par rapport à une méthode qui requiert une clé API, mais la clé API n'est pas correcte. Ou la clé API n'est pas associée à un plan d'utilisation qui est associé à l'environnement. Ou la clé API est désactivée ou n'existe pas.
La signature n’est pas valide« x-amzn-errortype » = « InvalidSignatureException »« La signature de la demande calculée ne correspond pas à la signature que vous avez fournie. The security token included in the request is invalid. »La signature de la requête ne correspond pas à la signature sur le serveur lorsque l'appelant accède à une API qui utilise l'autorisation IAM.
AWS WAF filtré« x-amzn-errortype » = « ForbiddenException »« Forbidden »Le filtrage du pare-feu d’applications Web bloque la requête lorsqu’AWS WAF est activé dans l’API.
Le chemin de ressource n’existe pas« x-amzn-errortype » = « MissingAuthenticationTokenException »« Jeton d’authentification manquant »Une requête sans en-tête « Autorisation » est envoyée à un chemin de ressource d’API qui n’existe pas. Pour plus d’informations, consultez la section Comment puis-je résoudre les erreurs 403 « Missing Authentication Token » du point de terminaison API REST API Gateway ?
Le chemin de ressource n’existe pas« x-amzn-errortype » = « IncompleteSignatureException »« L’en-tête d’autorisation requiert le paramètre « Informations d’identification. » L’en-tête d’autorisation requiert le paramètre « Signature ». L’en-tête d’autorisation requiert le paramètre « SignedHeaders ». L’en-tête d’autorisation requiert l’existence d’un en-tête « X-Amz-Date » ou « Date ». Autorisation=autoriser »Une requête avec un en-tête « Autorisation » est envoyée à un chemin de ressource d’API qui n’existe pas.
Utilise de manière incorrecte les noms DNS publics pour invoquer une API privée« x-amzn-errortype » = « ForbiddenException »« Forbidden »Vous avez utilisé incorrectement des noms DNS publics pour invoquer une API privée depuis un Amazon Virtual Private Cloud (Amazon VPC). Par exemple : l'en-tête « Host » ou « x-apigw-api-id » est manquant dans la requête. Pour plus d’informations, consultez la section Invoquer une API privée à l'aide de noms d'hôtes DNS publics spécifiques au point de terminaison.
Utilise le point de terminaison execute-api par défaut pour invoquer une API REST qui comporte un nom de domaine personnalisé« x-amzn-errortype » = « ForbiddenException »« Forbidden »L'appelant utilise le point de terminaison execute-api par défaut pour invoquer une API REST après que vous avez désactivé le point de terminaison par défaut. Pour plus d'informations, consultez la section Désactiver le point de terminaison par défaut pour les API REST
Utilise un certificat client non valide pour invoquer un nom de domaine personnalisé API Gateway qui requiert un TLS mutuel« x-amzn-errortype » = « ForbiddenException »« Forbidden »Le truststore du nom de domaine personnalisé n'émet pas le certificat client qui figure dans la requête d'API, ou le certificat n'est pas valide. Pour plus d’informations, consultez la section Comment puis-je résoudre les erreurs HTTP 403 Interdit générées par un nom de domaine personnalisé API Gateway qui requiert un TLS mutuel ?
Invocation d’un nom de domaine personnalisé sans mappage du chemin de base« x-amzn-errortype » = « ForbiddenException »« Forbidden »L'appelant invoque un domaine personnalisé et ne mappe pas de chemin de base à une API. Pour plus d'informations, consultez la section Nom de domaine personnalisé pour les API REST dans API Gateway.
Invocation d’une API avec un domaine personnalisé activée lorsque l’URL du domaine inclut l’environnement« x-amzn-errortype » = « MissingAuthenticationTokenException »« Jeton d’authentification manquant »Un mappage d’API spécifie une API, un environnement et éventuellement un chemin à utiliser pour le mappage. Ainsi, lorsque l’environnement d'une API est mappé à un domaine personnalisé, il n'est plus nécessaire de l'inclure dans l'URL. Pour plus d'informations, consultez la section Mapper les environnements d’API à un nom de domaine personnalisé pour les API REST.
L’environnement dans l’URL de la requête n’est pas valide« x-amzn-errortype » = « ForbiddenException »« Interdit »L’URL de la requête de l’appelant inclut un environnement qui n’existe pas. Pour plus d'informations, consultez la section Invoquer des API REST dans API Gateway.

Résolution

Identifier la cause de l’erreur

Si l'erreur 403 est signalée à partir d'autres ressources, comme dans les exemples suivants, il peut y avoir une autre cause à l'erreur :

  • Si l'erreur est signalée dans un navigateur Web, un paramètre de proxy incorrect pourrait ne pas autoriser l'accès HTTP.
  • Si un autre service AWS se trouve devant l'API, tel qu'Amazon CloudFront, le service peut rejeter la requête.

Pour identifier la cause de l'erreur, configurez la journalisation des accès Amazon CloudWatch pour votre API. Puis, consultez les événements de journaux de votre API dans CloudWatch pour déterminer si les requêtes atteignent l'API.

Remarque : Les API HTTP ne prennent pas en charge la journalisation des exécutions.

Pour résoudre les erreurs 403 renvoyées par un nom de domaine personnalisé qui requiert le TLS mutuel et invoque une API HTTP, vous devez procéder comme suit :

  1. Créez un nouveau mappage d'API pour tester l'invocation de l'API REST pour votre nom de domaine personnalisé.
  2. Pour identifier la cause des erreurs, consultez les événements de journaux de votre API REST dans CloudWatch.
  3. Après avoir identifié et résolu l'erreur, réacheminez le mappage d'API vers votre API HTTP.

Confirmez que la ressource demandée existe dans la définition de l’API

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez la version la plus récente de l’AWS CLI.

Utilisez la console API Gateway ou l'AWS CLI pour vérifier les configurations suivantes :

Utiliser la commande curl pour obtenir les détails de la requête et de la réponse

Si vous pouvez reproduire l'erreur, utilisez la commande curl -v pour obtenir de plus amples détails entre le client et l'API :

curl -X HTTP_VERB -v https://{api_id}.execute-api.{region}.amazonaws.com/{stage_name}/{resource_name}

Vérifier que l’en-tête de la requête est correct

Si l’erreur est due à une clé API non valide, vérifiez que l’en-tête « x-api-key » a été envoyé dans la requête. Si l'en-tête n'est pas inclus ou n'est pas correct, mettez à jour l'en-tête de la requête.

Vérifier que le paramètre DNS sur les points de terminaison de VPC Amazon est correctement défini

Remarque : Les tâches suivantes s'appliquent aux API que vous invoquez depuis un Amazon VPC ne possédant qu'un seul point de terminaison de VPC d'interface.

Vérifiez que le paramètre DNS du point de terminaison d'interface est correctement défini en fonction du type d'API que vous utilisez.

Pour invoquer une API régionale depuis un Amazon VPC, les noms DNS privés doivent être désactivés sur le point de terminaison d’interface. Un DNS public peut ensuite résoudre le nom d'hôte du point de terminaison. Pour en savoir plus, consultez la section Créer une API privée.

Pour utiliser le nom DNS privé de l'API afin d'invoquer une API privée depuis un Amazon VPC, activez les noms DNS privés sur le point de terminaison. Les ressources du sous-réseau local Amazon VPC peuvent ensuite résoudre le nom d'hôte du point de terminaison d'interface.

Remarque : Si vous utilisez l'une des options suivantes pour invoquer l'API privée, il n’est pas nécessaire de configurer le nom DNS public de l'API privée ou un alias Amazon Route 53.

Examiner la stratégie de ressources de l’API

Examinez la stratégie de ressources de votre API pour vérifier les configurations suivantes :

Examiner les messages de requête et de réponse HTTP

Reproduisez l’erreur dans un navigateur Web. Puis, utilisez les outils réseau du navigateur pour capturer les messages de requête et de réponse HTTP et analysez-les pour déterminer où l’erreur s’est produite.

Remarque : pour une analyse hors ligne, enregistrez les messages dans un fichier HTTP Archive (HAR).

Informations connexes

Erreurs courantes

Comment puis-je autoriser uniquement des adresses IP spécifiques à accéder à mon API REST API Gateway ?

Comment puis-je résoudre les problèmes de connexion à un point de terminaison d’API privée API Gateway ?

Comment puis-je activer CloudWatch Logs pour résoudre les problèmes liés à mon API REST API Gateway ou à mon API WebSocket ?

Projet curl sur le site Web de curl