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

Un code de réponse HTTP 403 signifie qu’il est interdit à un client d’accéder à une URL valide. Le serveur comprend la demande, mais ne peut y répondre en raison de problèmes côté client.

Les passerelles API peuvent renvoyer des réponses 403 pour l’une des raisons suivantes :

ProblèmeEn-tête de réponseMessage d’erreurCause racine
Accès refusé« x-amzn-errortype » = « AccessDeniedException »« L’utilisateur n’est pas autorisé à accéder à cette ressource avec un refus explicite »L’appelant n’est pas autorisé à accéder à une API qui utilise un mécanisme d'autorisation de passerelle API lambda.
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> avec un refus explicite »L’appelant n’est pas autorisé à accéder à une API utilisant l’autorisation AWS Identity and Access Management (IAM). Ou bien, l’API est associée à une politique de ressources qui refuse explicitement l’accès à l’appelant.<br><br>Pour plus d’informations, consultez Politique IAM d’authentification et de ressources.
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 bien, l’API est associée à une politique de ressources qui n’autorise pas explicitement l’appelant à invoquer l’API.<br><br>Pour plus d’informations, consultez Politique IAM d’authentification et de ressources.
Accès refusé« x-amzn-errortype » = « AccessDeniedException »« Le jeton de sécurité inclus dans la demande n’est pas valide. »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 expirée »Le jeton d’authentification de la demande a expiré.
La clé API n’est pas valide.« x-amzn-errortype » = « ForbiddenException »« L’identifiant de clé API spécifié n’est pas valide. »L’appelant a utilisé une clé API qui n’est pas valide pour une méthode qui nécessite une clé API.
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. Vérifiez votre clé d’accès secrète AWS et votre méthode de signature. »La signature de la demande ne correspond pas à celle du serveur lors de l’accès à une API qui utilise l’autorisation IAM.
AWS WAF filtré« x-amzn-errortype » = « ForbiddenException »« Interdit »La demande est bloquée par le filtrage du pare-feu des applications Web lorsqu’AWS WAF est activé dans l’API.
Le chemin d’accès à la ressource n’existe pas.« x-amzn-errortype » = « MissingAuthenticationTokenException »« Jeton d’authentification manquant »Une demande sans en-tête « Autorisation » est envoyée vers un chemin de ressource d’API qui n’existe pas.<br><br>Pour plus d’informations, consultez Comment puis-je résoudre les erreurs 403 « Jeton d’authentification manquant » sur un point de terminaison API de la passerelle d’API REST ?
Le chemin d’accès à la 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 demande avec un en-tête « Autorisation » est envoyé à un chemin de ressource d’API qui n’existe pas.
Invoquer une API privée en utilisant des noms de DNS publics de manière incorrecte« x-amzn-errortype » = « ForbiddenException »« Interdit »L’invocation d’une API privée à partir d’un Virtual Private Cloud (VPC) Amazon utilisant de noms DNS publics n’est pas correcte. Par exemple : l’en-tête « Hôte » ou « x-apigw-api-id » est absent de la requête.<br><br>Pour plus d’informations, consultez Invocation de votre API privée à l’aide de noms d’hôtes DNS publics spécifiques à un point de terminaison.
Invocation d’une API REST dotée d’un nom de domaine personnalisé à l’aide du point de terminaison execute-api par défaut« x-amzn-errortype » = « ForbiddenException »« Interdit »L’appelant utilise le point de terminaison execute-api par défaut pour invoquer une API REST après avoir désactivé le point de terminaison par défaut.<br><br>Pour plus d’informations, consultez Désactivation du point de terminaison par défaut pour une API REST
Invocation d’un nom de domaine personnalisé de passerelle API qui nécessite un protocole TLS (Transport Layer Security) mutuel à l’aide d’un certificat client qui n’est pas valide.« x-amzn-errortype » = « ForbiddenException »« Interdit »Le certificat client présenté dans la demande d’API n’est pas émis par le truststore du nom de domaine personnalisé, ou il n’est pas valide.<br><br>Pour plus d’informations, consultez Comment puis-je résoudre les erreurs HTTP 403 Interdit provenant d’un nom de domaine personnalisé de passerelle API qui nécessite un protocole TLS mutuel ?
Invocation d’un nom de domaine personnalisé sans correspondance avec le chemin d’accès de base« x-amzn-errortype » = « ForbiddenException »« Interdit »L’appelant invoque un domaine personnalisé sans qu’un chemin de base ne soit mappé à une API.<br><br>Pour plus d’informations, consultez Configuration de noms de domaine personnalisés pour les API REST.
Invoquer une API avec un domaine personnalisé activé lorsque l’URL du domaine inclut l’étape« x-amzn-errortype » = « MissingAuthenticationTokenException »« Jeton d’authentification manquant »Un mappage d’API spécifie une API, une étape et éventuellement un chemin à utiliser pour le mappage. Par conséquent, lorsque l’étape d’une API est mappée à un domaine personnalisé, il n’est plus nécessaire d’inclure cette étape dans l’URL.<br><br>Pour plus d’informations, consultez Utilisation des mappages d’API pour les API REST.
L’étape dans l’URL de la demande n’est pas valide« x-amzn-errortype » = « ForbiddenException »« Interdit »L’URL de la demande de l’appelant comprend une étape qui n’existe pas. Vérifiez que l’étape existe et que l’URL de la demande est bien orthographiée.<br><br>Pour plus d’informations, consultez Invocation d’une API REST dans Amazon API Gateway.

Résolution

Examiner la source de l’erreur

Si l’erreur 403 a été signalée par d’autres ressources, elle peut avoir une autre origine. Par exemple :

  • si l’erreur a été signalée dans un navigateur Web, elle peut être due à un mauvais paramétrage du proxy. Le serveur proxy renvoie une erreur 403 si l’accès HTTP n’est pas autorisé.
  • S’il existe un autre service AWS en amont de l’API, ce service peut rejeter la demande en envoyant une erreur 403 dans la réponse. Par exemple : Amazon CloudFront.

Identifier la cause de l’erreur

Si ce n’est pas déjà fait, configurez la journalisation des accès Amazon CloudWatch pour votre API. Consultez ensuite les journaux d’exécution de votre API dans CloudWatch pour déterminer si les demandes 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 nécessite le protocole TLS mutuel et invoque une API HTTP, vous devez procéder comme suit :

1.    Créez un nouveau mappage d’API pour votre nom de domaine personnalisé qui invoque une API REST à des fins de test uniquement.

2.    Identifiez la cause des erreurs en consultant les journaux d’exécution de votre API REST dans CloudWatch.

3.    Une fois l’erreur identifiée et résolue, ré-acheminez le mappage d’API pour votre nom de domaine personnalisé vers votre API HTTP.

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

Remarque : Si des erreurs surviennent lors de l’exécution des commandes de l’interface de la ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente d’AWS CLI.

Vérifiez les points suivants à l’aide de la console passerelle API ou de l’AWS CLI :

  • L’API est déployée avec la dernière définition de l’API.
  • La ressource demandée existe dans la définition de l’API.

Utiliser la commande curl pour obtenir les détails de la demande et de la réponse

Si l’erreur peut être reproduite, utilisez la commande curl -v pour obtenir plus de détails entre le client et l’API, comme suit :

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

**Remarque :**pour obtenir plus d’informations, reportez-vous au site Web du projet curl.

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

Vérifier que les paramètres DNS de toute interface des points de terminaison d’un VPC Amazon sont correctement définis

Remarque : vérifiez ce qui suit pour les API invoquées depuis un Amazon VPC doté d’un point de terminaison d’un VPC d’interface uniquement.

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.

Gardez à l’esprit les points suivants :

  • Pour invoquer une API régionale depuis l’intérieur d’un Amazon VPC, les noms DNS privés doivent être désactivés sur le point de terminaison d’interface. Ensuite, le nom d’hôte du point de terminaison peut être résolu par un DNS public. Pour en savoir plus, consultez Création d’une API privée dans Amazon API Gateway.
  • Pour invoquer une API privée depuis l’intérieur d’un Amazon VPC à l’aide du nom DNS privé de l’API, les noms DNS privés doivent être activés sur le point de terminaison d’interface. Ensuite, le nom d’hôte du point de terminaison d’interface peut être résolu en fonction des ressources du sous-réseau local d’Amazon VPC. Pour plus d’informations, consultez Comment invoquer une API privée.
    **Remarque :**il n’est pas nécessaire de configurer un DNS privé si vous invoquez l’API privée à l’aide de l’une des méthodes suivantes :
    Le nom DNS public de l’API privée.
    -ou-
    Un alias Amazon Route 53.

Passer en revue la politique de ressources d’API

Passez en revue la politique de ressources de votre API pour vérifier les points suivants :

Examiner les messages de demande et de réponse HTTP

Reproduisez l’erreur dans un navigateur Web, si possible. Ensuite, utilisez les outils réseau du navigateur pour recueillir les messages de demande 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 - Amazon API Gateway

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

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

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