Comment résoudre les problèmes de connexion à un point de terminaison d'une API privée d'API Gateway ?

Dernière mise à jour : 22-09-2022

Je rencontre des problèmes pour me connecter au point de terminaison de mon API privée Amazon API Gateway qui se trouve dans Amazon Virtual Private Cloud (Amazon VPC). Comment résoudre ce problème ?

Brève description

Les ressources AWS de votre VPC Amazon peuvent ne pas se connecter à un point de terminaison d'API privée pour l'une des raisons suivantes :

Lorsque la journalisation Amazon CloudWatch est activée pour votre API, un message d'erreur indiquant la cause de l'erreur s'affiche dans vos journaux d'exécution.

Si la demande d'API ne produit aucun journal CloudWatch après l'activation de la journalisation, cela signifie que la demande n'a pas atteint le point de terminaison. Si vos demandes d'API n'atteignent pas le point de terminaison, assurez-vous que l'URL d'appel de l'API privée est correctement formatée.

Remarque : Les problèmes de connexion peuvent être dus à une politique de ressources API Gateway mal configurée ou à des noms DNS incorrects dans l'URL d'appel du point de terminaison d'API privé.

Résolution

Confirmer la cause de l'erreur

1.    Si ce n'est déjà fait, activez la journalisation CloudWatch pour votre API REST privée. Assurez-vous de configurer la journalisation d'exécution.

Astuce : Lorsque vous configurez les paramètres de journalisation, pour Log level, choisissez INFO. Choisissez également Log full requests/responses data (Consigner les données complètes des requêtes/réponses).

2.    Identifiez la cause des erreurs en consultant les journaux d'exécution de l'API REST dans CloudWatch. Si les demandes d'API atteignent le point de terminaison, un message d'erreur similaire à l'un des exemples suivants s'affiche :

  • « User: anonymous is not authorized to perform: execute-api:Invoke on resource: » (« L'utilisateur anonyme n'est pas autorisé à exécuter execute-api:Invoke sur la ressource: »)
  • « Connection timed out » (« La connexion a expiré »)

Si la demande d'API ne produit aucun journal CloudWatch après l'activation de la journalisation, assurez-vous que l'URL d'appel de l'API privée est correctement formatée. Pour obtenir des instructions, consultez la section Si la demande d'API ne produit aucun journal CloudWatch après l'activation de la journalisation de cet article.

Pour plus d'informations, consultez la section Comment trouver les erreurs d’API Rest API Gateway dans mes journaux CloudWatch

Pour résoudre le message d'erreur « User: anonymous is not authorized to perform: execute-api:Invoke on resource: » (« L'utilisateur anonyme n'est pas autorisé à exécuter execute-api:Invoke sur la ressource »)

1.    Vérifiez que la politique de ressources API Gateway du point de terminaison de l'API privée autorise le trafic du point de terminaison du VPC d'interface ou du VPC source vers le point de terminaison de l'API. Pour obtenir un exemple de politique de ressources, consultez la section Exemple : autoriser le trafic de l'API privée basé sur le VPC source ou le point de terminaison d'un VPC.

2.    Vérifiez que la politique du point de terminaison du VPC autorise le client à accéder au point de terminaison de l'API privée. Pour obtenir des exemples de politiques de point de terminaison de VPC, consultez la section Exemples de politiques de points de terminaison de VPC.

Pour obtenir des instructions sur la façon de tester les politiques de ressources API Gateway, consultez la section Tester la politique de ressource de l'article suivant : Comment autoriser uniquement des adresses IP spécifiques à accéder à mon API REST API Gateway ?

Important : si vous modifiez la politique de ressources de votre API, vous devez déployer votre API pour valider les modifications.

Pour résoudre les erreurs « Connection timed out » (« La connexion a expiré »)

1.    Vérifiez qu'un point de terminaison VPC d'API Gateway execute-api existe dans le VPC. Vérifiez également si le point de terminaison se trouve dans la même région AWS que l'API privée. Si ce n’est pas le cas, Créer un point de terminaison d’un VPC d’interface pour API Gateway execute-api.

2.    Vérifiez que le client qui invoque le point de terminaison d'API privé existe dans le même VPC ou a accès au VPC avec le point de terminaison du VPC. Vous pouvez le tester à l'aide de l'outil traceroute.

Remarque : Les API privées sont accessibles à partir de clients au sein du VPC ou de clients disposant d'une connectivité réseau au VPC.

Pour installer traceroute, exécutez les commandes suivantes:

Amazon Linux :

$ sudo yum install traceroute

Ubuntu :

$ sudo apt-get install traceroute

Pour tester la connectivité à l'aide de traceroute :

$ sudo traceroute -n -T -p 443 <VPC-endpoint IP-address>

L'argument -T -p 443 -n effectue un traçage basé sur TCP sur le port 443.

3.    Vérifiez que les règles relatives aux groupes de sécurité de votre VPC Amazon sont correctement configurées.

Pour tester les groupes de sécurité de votre VPC Amazon :

Exécutez la commande suivante à partir du client qui envoie des demandes au point de terminaison de l'API privée. Remplacez{public-dns-hostname} par les noms d'hôte DNS publics contenant l'ID de point de terminaison du VPC pour votre API. Remplacez {region} par la Région AWS où se trouve le point de terminaison de votre VPC d'interface.

$ telnet {public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com 443

Si la connexion expire, cela signifie que les règles des groupes de sécurité de votre VPC Amazon ne sont pas correctement configurées.

Vérifiez les points suivants :

  • Le groupe de sécurité de la ressource à l'origine de la demande comprend une règle qui autorise le trafic sortant du port TCP 443 vers la plage d'adresses IP ou le groupe de sécurité du point de terminaison du VPC.
  • Le groupe de sécurité du point de terminaison du VPC comprend une règle qui autorise le trafic entrant sur le port TCP 443 à partir de la plage d'adresses IP ou du groupe de sécurité de la ressource à l'origine de la demande.

Pour plus d'informations, consultez la section Contrôle du trafic vers les ressources à l'aide de groupes de sécurité.

Si la demande d'API ne produit aucun journal CloudWatch après l'activation de la journalisation

1.    Vérifiez que la politique de ressources API Gateway du point de terminaison de l'API privée est correctement configurée.

Pour plus d'informations, consultez la section suivante de cet article :Pour résoudre les erreurs « User: anonymous is not authorized to perform: execute-api:Invoke on resource: » (« L'utilisateur anonyme n'est pas autorisé à exécuter execute-api:Invoke sur la ressource »).

2.    Vérifiez que l'URL d'appel de votre API privée est correctement formatée.

Un DNS privé doit être activé pour le point de terminaison du VPC pour que le format soit correct. Si le DNS privé n'est pas activé, vous devez utiliser des noms d'hôte DNS publics spécifiques au point de terminaison pour accéder au point de terminaison de l'API privée. Si le DNS privé est activé, vous devez utiliser des noms de DNS privés pour accéder au point de terminaison de l'API privée.

Pour plus d'informations, consultez la rubrique Procédure d'appel d'une API privée.

Vérifiez que le domaine du point de terminaison de l'API privée est correctement résolu à l'adresse IP du point de terminaison du VPC

1.    Exécutez la commande nslookup suivante à partir du client qui envoie des demandes au point de terminaison de l'API privée. Remplacez {restapi-id} par l'ID de votre API privée. Remplacez {region} par la Région AWS où se trouve le point de terminaison de votre API privée.

$ nslookup {restapi-id}.execute-api.{region}.amazonaws.com

Une sortie réussie indique les adresses IP privées du point de terminaison du VPC.

2.    Exécutez la commande nslookup suivante : Remplacez{public-dns-hostname} par les noms d'hôte DNS publics contenant l'ID de point de terminaison du VPC pour votre API. Remplacez {region} par la Région AWS où se trouve le point de terminaison de votre VPC d'interface.

$ nslookup {public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com

Une sortie réussie indique les adresses IP privées du point de terminaison du VPC.

3.    Comparez les adresses IP dans les sorties de chaque commande. Si les adresses IP de chaque sortie de commande correspondent, la configuration fonctionne comme prévu.

Remarque : vous pouvez activer le DNS privé pour le point de terminaison du VPC à tout moment dans la console du VPC Amazon en procédant comme suit :
Dans le volet Endpoints (Points de terminaison), sélectionnez le point de terminaison de votre VPC d'interface.
Choisissez Actions.
Choisissez Modify Private DNS names (Modifier les noms DNS privés).
Cochez la caseEnable Private DNS Name (Activer le nom DNS privé). Choisissez ensuite Save Changes (Enregistrer les modifications).
Choisissez Modify Private DNS names (Modifier les noms DNS privés).