Passer au contenu

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

Lecture de 9 minute(s)
0

Je souhaite résoudre les problèmes rencontrés lorsque je me connecte à mon point de terminaison d'API privée Amazon API Gateway qui se trouve dans Amazon Virtual Private Cloud (Amazon VPC).

Brève description

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

Pour déterminer la cause, vous pouvez activer Amazon CloudWatch Logs pour votre API et consulter les journaux.

Si la requête d'API ne produit pas de journaux après que vous avez activé CloudWatch Logs, cela signifie que la requête n'a pas atteint le point de terminaison. Si vos requêtes d'API n'atteignent pas le point de terminaison, vérifiez que vous avez correctement configuré l'URL d'invocation de l'API privée.<br id=hardline_break/> Pour en savoir plus, consultez la section Comment puis-je trouver les erreurs d’API REST API Gateway dans mes journaux CloudWatch ?

Remarque : une politique de ressources API Gateway incorrectement configurée ou un nom DNS incorrect dans l'URL d'invocation du point de terminaison d'API privée peut entraîner des problèmes de connexion.

Résolution

Confirmer l’origine du problème

Procédez comme suit :

  1. Activez CloudWatch Logs pour votre API REST privée.
  2. Dans Niveau de journalisation, choisissez INFO, puis sélectionnez Consigner les demandes complètes/données de réponse.
  3. Consultez les journaux d’exécution de votre API REST dans CloudWatch pour identifier la cause du problème.

Si les requêtes 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: »
  • « SSL: no alternative certificate subject name matches target host name custom-domain.com/resource »
  • « Connection timed out »
  • « Could not resolve host: https://example.com/resource »

« User: anonymous is not authorized to perform: execute-api:Invoke on resource: »

Pour résoudre ce problème, configurez les politiques suivantes :

  • La politique de ressources API Gateway de l'API privée doit autoriser le trafic depuis le point de terminaison de VPC d'interface ou le VPC source vers le point de terminaison de l'API.
  • La politique de point de terminaison de VPC doit autoriser l'accès du client au point de terminaison d'API privée. Il s'agit de la politique de ressources pour le service execute-api.
  • La politique de ressources du nom de domaine personnalisé doit autoriser l'accès à vos points de terminaison de VPC pour invoquer votre nom de domaine personnalisé privé. Par défaut, API Gateway fournit un nom de domaine personnalisé avec un refus explicite dans la politique de ressources du nom de domaine personnalisé. Pour plus d'informations, consultez la section Didacticiel : Créer et invoquer un nom de domaine personnalisé pour les API privées.<br id=hardline_break/> Important : si vous modifiez la politique de ressources de votre API, déployez votre API sur l’étape pour enregistrer les modifications.

« SSL: no alternative certificate subject name matches target host name custom-domain.com/resource »

Pour résoudre ce problème, vérifiez si vous avez créé des associations d'accès au nom de domaine personnalisé privé pour votre point de terminaison de VPC privée pour le service execute-api.

« Connection timed out »

Pour résoudre les problèmes de délai de connexion, procédez comme suit :

  1. Vérifiez qu'un point de terminaison de VPC execute-api API Gateway existe dans le VPC dans lequel vous hébergez votre client. Puis, assurez-vous que le point de terminaison se trouve dans la même région AWS que l'API privée. Si le point de terminaison n'existe pas, créez un point de terminaison de VPC d'interface pour API Gateway execute-api.

  2. Utilisez traceroute pour vérifier que le client qui invoque l'API privée existe dans le même VPC ou peut accéder au VPC via le point de terminaison de VPC.

    Exécutez la commande suivante pour installer traceroute :

    Amazon Linux :

    sudo yum install traceroute

    Ubuntu :

    sudo apt-get install traceroute

    Pour utiliser traceroute afin de tester la connectivité, exécutez la commande suivante :

    sudo traceroute -n -T -p 443 VPC-endpoint IP-address

    Remarque : l’argument -T -p 443 -n effectue un suivi basé sur TCP sur le port 443. Remplacez VPC-endpoint IP-address par l'adresse IP de votre point de terminaison de VPC.

  3. Vérifiez que vous avez correctement configuré les règles pour vos groupes de sécurité Amazon VPC.<br id=hardline_break/> Pour tester vos groupes de sécurité Amazon VPC, exécutez la commande suivante depuis le client qui envoie des requêtes au point de terminaison d'API privée :

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

    Remarque : remplacez public-dns-hostname par les noms d'hôte DNS publics qui contiennent l'ID de point de terminaison de VPC pour votre API. Remplacez également region par la région dans laquelle se trouve votre point de terminaison de VPC d'interface.

    Vous pouvez également exécuter la commande suivante depuis le client qui adresse des requêtes au nom de domaine personnalisé de l'API privée :

    telnet custom-domain-name 443

    Remarque : remplacez custom-domain-name par le nom de votre domaine personnalisé d’API privée.

Si la connexion expire, cela signifie que vous n'avez pas correctement configuré les règles pour vos groupes de sécurité Amazon VPC.

La ressource demandeuse doit disposer d'une règle de groupe de sécurité 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 de VPC. En outre, le point de terminaison de VPC doit disposer d'une règle de groupe de sécurité qui autorise le trafic entrant sur le port TCP 443 en provenance de la plage d'adresses IP ou du groupe de sécurité de la ressource demandeuse.

Pour plus d'informations, consultez la section Comment restreindre le trafic en provenance et à destination des ressources Amazon VPC ?

« Could not resolve host:https://www.example.com/resource »

Pour résoudre ce problème, procédez comme suit :

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

Remarque : assurez-vous que le client se trouve dans le VPC où le point de terminaison de VPC execute-api existe.

Procédez comme suit :

  1. Exécutez la commande nslookup suivante depuis le client qui envoie des requêtes au point de terminaison d'API privée :
    nslookup restapi-id.execute-api.region.amazonaws.com
    Remarque : remplacez restapi-id par l'ID de votre API privée et region par la région dans laquelle se trouve votre point de terminaison d'API privée.
  2. Exécutez la commande nslookup suivante depuis le client qui adresse des requêtes au nom de domaine personnalisé de l'API privée :
    nslookup custom-domain-name
    Remarque : remplacez custom-domain-name par le nom de domaine personnalisé de votre API privée. Une sortie réussie affiche les adresses IP privées du point de terminaison de VPC.
  3. Exécutez la commande nslookup suivante :
    nslookup public-dns-hostname.execute-api.region.vpce.amazonaws.com
    Remarque : remplacez public-dns-hostname par les noms d'hôte DNS publics qui contiennent l'ID de point de terminaison de VPC pour votre API. Remplacez region par la région dans laquelle se trouve votre point de terminaison de VPC d'interface. Une sortie réussie affiche les adresses IP privées du point de terminaison de VPC.
  4. 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.

Pour activer le DNS privé pour votre point de terminaison de VPC, procédez comme suit.

  1. Ouvrez la console Amazon VPC.
  2. Dans le volet Points de terminaison, sélectionnez votre point de terminaison de VPC d'interface.
  3. Sélectionnez Actions.
  4. Sélectionnez Modifier les noms DNS privés.
  5. Sélectionnez Activer le nom de DNS privé, puis cliquez sur Enregistrer les modifications.

La requête d'API ne produit aucun journal CloudWatch une fois que vous avez activé CloudWatch Logs

Pour résoudre ce problème, procédez comme suit :

  • Configurez correctement la politique de ressources API Gateway du point de terminaison d'API privée.
  • Formatez correctement l'URL d'invocation de votre API privée pour accéder au point de terminaison d'API privée.<br id=hardline_break/> Remarque : si vous avez activé un DNS privé, vous devez utiliser des noms d'hôtes DNS publics spécifiques au point de terminaison. Si vous n'avez pas activé de DNS privé, utilisez des noms DNS privés.
  • Associez le nom de domaine personnalisé de l'API privée à l’étape d'API appropriée.

Informations connexes

Comment puis-je utiliser le point de terminaison de VPC d'interface pour accéder à une API REST privée d'API Gateway sur un autre compte ?

Pourquoi une erreur HTTP 403 Forbidden s’affiche-t-elle lorsque je me connecte à mes API API Gateway depuis un VPC ?

Comment puis-je surveiller le trafic dans mon VPC à l’aide de journaux de flux ?

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