Comment résoudre les erreurs HTTP 403 Forbidden (HTTP 403 Accès interdit) à partir d'API Gateway ?

Date de la dernière mise à jour : 10/08/2020

Lorsque j'appelle mon API Amazon API Gateway, je reçois une erreur 403 Forbidden (Interdit). Comment résoudre ces erreurs ?

Brève description

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

Les API API Gateway peuvent renvoyer des réponses 403 Forbidden (Interdit) pour diverses raisons :

Problème En-tête de réponse Message d'erreur Détails
Access denied (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.
Access denied (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'appelant n'est pas autorisé à accéder à une API qui utilise l'autorisation AWS Identity and Access Management (IAM). Ou l'API dispose d'une stratégie de ressources attachée qui refuse explicitement l'accès à l'appelant.

Pour plus d'informations, consultez Stratégie de ressources et d'authentification IAM.

Access denied (Accès refusé) "x-amzn-ErrorType" = "AccessDeniedException" "User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn>" L'appelant n'est pas autorisé à accéder à une API qui utilise l'autorisation IAM. Ou, l'API dispose d'une stratégie de ressources attachée qui n'autorise pas explicitement l'appelant à appeler l'API.

Pour plus d'informations, consultez Stratégie de ressources et d'authentification IAM.

Access denied (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 utilisant l'autorisation IAM.
Missing authentication token (Jeton d'authentification manquant) "x-amzn-ErrorType" = "MissingAuthenticationTokenException" "Missing Authentication Token" Un jeton d'authentification n'a pas été trouvé dans la demande.
Authentication token expired (Jeton d'authentification expiré) "x-amzn-ErrorType" = "InvalidSignatureException" "Signature expired" Le jeton d'authentification de la demande a expiré.
Invalid API key (Clé API non valide) "x-amzn-ErrorType" = "ForbiddenException" "Invalid API Key identifier specified" L'appelant a utilisé une clé API non valide pour une méthode qui nécessite une clé API.
Invalid signature (Signature non 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 demande que nous avons calculée ne correspond pas à celle que vous avez fournie. Vérifiez votre clé d'accès secrète et votre méthode de signature. ») La signature de la demande ne correspond pas à celle du serveur lorsque vous accédez à une API qui utilise l'autorisation IAM.
Filtres AWS WAF "x-amzn-ErrorType" = "ForbiddenException" "Forbidden" La demande est bloquée par le filtre du pare-feu d'application web (WAF) lorsque AWS WAF est activé dans l'API.
Resource path doesn't exist (Le chemin vers les ressources n'existe pas.) "x-amzn-ErrorType" = "MissingAuthenticationTokenException" "Missing Authentication Token" Une demande sans en-tête « Autorization » est envoyée à un chemin de ressources d'API inexistant.
Resource path doesn't exist (Le chemin vers les ressources n'existe pas.) "x-amzn-ErrorType" = "IncompleteSignatureException" "Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=allow" Une demande avec un en-tête « Authorization » (Autorisation) est envoyée à un chemin de ressources d'API inexistant.
Appel incorrect d'une API privée à l'aide de noms DNS publics
"x-amzn-ErrorType" = "ForbiddenException" "Forbidden" Lors de l'appel d'une API privée depuis un Amazon Virtual Private Cloud (Amazon VPC) à l’aide de noms DNS publics, l'en-tête « Host » ou « x-apigw-api-id » est absent de la demande.

Pour plus d'informations, consultez la section Appel de votre API privée à l'aide de noms d'hôte DNS publics spécifiques aux points de terminaison.

Résolution

Suivez ces étapes de dépannage pour vous aider à déterminer la cause de l'erreur.

Prenez en compte la source de l'erreur.

Si l'erreur 403 a été signalée à partir d'autres ressources, la cause de l'erreur peut se trouver ailleurs. Par exemple :

  • Si l'erreur a été signalée dans un navigateur web, elle peut être provoquée par un paramètre de proxy incorrect. Le serveur proxy renvoie une erreur 403 si l'accès HTTP n'est pas autorisé.
  • S'il existe un autre service AWS devant l'API (par exemple, Amazon CloudFront), ce service peut rejeter la demande avec une erreur 403 dans la réponse.

Activez la journalisation des accès aux API pour analyser le problème.

Vérifiez que la ressource demandée existe dans la définition de l'API

Recherchez la ressource demandée dans l'API à l'aide de la console API Gateway ou de l'interface de ligne de commande AWS (AWS CLI).

Remarque : l'API doit être déployée avec la dernière définition d'API.

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

Si l'erreur peut être reproduite, vous pouvez utiliser la commande curl -v pour obtenir plus de détails entre le client et l'API. Par exemple :

curl -X GET -v https://apiId.execute-api.region.amazonaws.com/stageName/resourceName

Pour plus d'informations sur curl, consultez le site Web du projet curl.

Vérification de l'en-tête

Si l'erreur concerne une clé API, vérifiez que l'en-tête « x-api-key » a été envoyé dans la demande.

Vérification du paramètre DNS sur le point de terminaison d'un VPC

Si l'API est appelée depuis un Amazon VPC qui a un point de terminaison de VPC d'interface, vérifiez que le paramètre DNS du point de terminaison d'interface est défini correctement en fonction du type d'API.

Vérification de la stratégie de ressources

Procédez aux vérifications suivantes :

Analyse des journaux d'accès à l'API

Activez et analysez les journaux d'accès à l'API pour déterminer si les demandes atteignent l'API.

Analyse des messages de demande et de réponse HTTP

Si vous le pouvez, reproduisez l'erreur dans un navigateur web et utilisez les outils réseau du navigateur pour capturer les messages de demande et de réponse HTTP à des fins d'analyse. Pour une analyse hors connexion, enregistrez ces messages dans un fichier d'archive HTTP (HAR).

Conseil : pour obtenir des instructions sur la création d'un fichier HAR, consultez la rubrique Comment puis-je créer un fichier HAR à partir de mon navigateur pour un cas AWS Support ?

Analysez les demandes et les réponses entre le client et l'API pour trouver où l'erreur s'est produite.