Passer au contenu

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

Le code d'état « HTTP 403 » s'affiche lorsqu'un client ne peut pas accéder à une URL valide. Le serveur comprend la requête, mais des problèmes côté client ne permettent pas au serveur de répondre à la requête.

Les API API Gateway peuvent renvoyer des erreurs « HTTP 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 in an identity-based policy »Le mécanisme d’autorisation API Gateway Lambda utilisé par l'API n'autorise pas l'appelant.
Accès refusé« x-amzn-errortype » = « AccessDeniedException »« User: user-arn is not authorized to perform: execute-api:Invoke on resource: api-resource-arn with an explicit deny »L'autorisation Gestion des identités et des accès AWS (AWS IAM) utilisée par l'API n'autorise pas l'appelant. Ou, la politique de ressources qui est associée à l’API refuse explicitement l'accès à l'appelant. Pour plus d'informations, consultez la section Authentification et politique de ressources IAM.
Accès refusé« x-amzn-errortype » = « AccessDeniedException »« User: anonymous is not authorized to perform: execute-api:Invoke on resource:api-resource-arn »L'autorisation IAM utilisée par l'API n'autorise pas l'appelant. Ou, la politique de ressources qui est associée à l’API n'autorise pas explicitement l'appelant à invoquer l'API. Pour plus d'informations, consultez la section Authentification et politique 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.
La clé API n’est pas valide« x-amzn-errortype » = « ForbiddenException »« Forbidden »L'appelant a utilisé une clé API incorrecte par rapport à une méthode qui requiert une clé API. Ou bien, vous n'avez pas associé la clé API à un plan d'utilisation qui se connecte à l’étape. Ou, vous avez désactivé la clé API ou celle-ci n'existe pas.
AWS WAF filtré« x-amzn-errortype » = « ForbiddenException »« Forbidden »Le filtrage du pare-feu d’applications Web bloque la requête lorsque vous activez AWS WAF dans l’API.
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.
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 publics dans API Gateway.
Invocation d’un nom de domaine personnalisé privé« x-amzn-errortype » = « ForbiddenException »« Forbidden »Vous n'avez pas associé le nom de domaine personnalisé privé à un point de terminaison de VPC.
L'étape dans l’URL de la requête n'est pas valide« x-amzn-errortype » = « ForbiddenException »« Forbidden »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.
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 Forbidden générées par un nom de domaine personnalisé API Gateway qui requiert un TLS mutuel ?
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 des règles de routage avec un nom de domaine personnalisé« x-amzn-errortype » = « ForbiddenException »« Forbidden »Vous n'avez pas configuré de règle de routage correspondante avec le nom de domaine personnalisé. Pour plus d'informations, consultez la section Résolution des problèmes liés aux règles de routage.
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 »Vous avez envoyé une requête avec un en-tête Autorisation à un chemin de ressource d’API qui n’existe pas.
Le jeton d’authentification a expiré« x-amzn-errortype » = « InvalidSignatureException »« Signature expired »Le jeton d'authentification de la requête a expiré.
La signature n’est pas valide« x-amzn-errortype » = « InvalidSignatureException »« The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. »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.
Invocation d’une API avec un domaine personnalisé activée lorsque l’URL du domaine inclut l’environnement« x-amzn-errortype » = « MissingAuthenticationTokenException »« Missing Authentication Token »Un mappage d’API spécifie une API, un environnement et éventuellement un chemin à utiliser pour le mappage. Lorsque vous associez l’étape d'une API à un domaine personnalisé, il n'est pas nécessaire d'inclure l’étape dans l'URL. Pour plus d'informations, consultez la section Utiliser les mappages d'API pour connecter les étapes d'API à un nom de domaine personnalisé pour les API REST.
Jeton d’authentification manquant« x-amzn-errortype » = « MissingAuthenticationTokenException »« Missing Authentication Token »La requête ne comporte pas de jeton d'authentification.
Jeton d’authentification manquant« x-amzn-errortype » = « MissingAuthenticationTokenException »« Missing Authentication Token »Vous avez envoyé une requête à une méthode d'API qui n'existe pas dans l'API.
Jeton d’authentification manquant« x-amzn-errortype » = « MissingAuthenticationTokenException »« Missing Authentication Token »Vous avez envoyé une requête à une ressource d'API qui n'existe pas dans l'API.
Le chemin de ressource n’existe pas« x-amzn-errortype » = « MissingAuthenticationTokenException »« Missing Authentication Token »Vous avez envoyé une requête sans en-tête Autorisation à 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 ?

Résolution

Confirmer 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 section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien 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 :

Identifier la cause de l’erreur

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 API Gateway. Si les requêtes atteignent l'API API Gateway et que des messages d'erreur apparaissent dans vos journaux, vous pouvez continuer à résoudre les problèmes liés à API Gateway. Si les requêtes atteignent d'autres ressources, d'autres proxys ou services peuvent être à l'origine de l'erreur.

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

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

curl -X HTTP\_VERB -v https://api-id.execute-api.region.amazonaws.com/stage

Remarque : Remplacez l'exemple d'URL par l'URL d’invocation de l’API.

Vérifier votre API REST et rediriger le mappage de l'API

Si vous utilisez un nom de domaine personnalisé qui requiert un protocole TLS mutuel et invoque une API HTTP, vous risquez de recevoir des erreurs 403.

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

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

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

Vérifier que vous avez correctement configuré le paramètre DNS sur les points de terminaison Amazon VPC de l'interface

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 vous avez correctement configuré le paramètre DNS du point de terminaison d'interface en fonction du type d'API que vous utilisez.

Pour invoquer une API régionale AWS 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 activez le DNS privé et que vous utilisez l'URI par défaut, vous n'avez pas besoin de configurer le nom DNS public de l'API privée ou un alias Amazon Route 53.

Examiner la politique de ressources de l’API

Examinez la politique 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 recueillir 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 résoudre les problèmes de connexion à un point de terminaison d’une API privée API Gateway ?

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

curl sur le site Web curl