Comment dépanner des problèmes de connexion à un point de terminaison d'une API privée d'API Gateway ?

Dernière mise à jour : 28-10-2020

Je reçois une erreur « Forbidden » (Interdit) ou j'ai d'autres problèmes de connexion à un point de terminaison d’une API privée Amazon API Gateway dans Amazon Virtual Private Cloud (VPC Amazon). Quelle est la marche à suivre pour résoudre ces problèmes ?

Brève description

Dans votre VPC Amazon, il peut y avoir des ressources AWS telles que des instances Amazon Elastic Compute Cloud (Amazon EC2) ou des fonctions AWS Lambda. Si ces ressources ne peuvent pas se connecter à un point de terminaison d'API privée, cela peut être dû au fait que :

Si vous ne parvenez pas à vous connecter à un point de terminaison d’API privée à partir d'un client externe (tel qu'un VPC Amazon dans un autre compte AWS ou un réseau local), il peut y avoir un problème avec la stratégie de ressources ou le nom DNS utilisé.

Résolution

Si ce n'est pas déjà fait, configurez la journalisation de l'exécution de l'API. Lorsque vous configurez les paramètres de journalisation, pour Log level (Niveau journal), choisissez INFO. Sélectionnez également Log full requests/responses data, (Consigner les données complètes des requêtes/réponses). Les journaux générés à l'aide de ces paramètres peuvent vous aider à mieux résoudre la cause du problème.

Remarque : si les journaux ne sont pas remplis après une tentative d'accès au point de terminaison de l'API privée, cela peut indiquer que la demande n'a pas atteint le point de terminaison. Assurez-vous que l'URL d'appel de l'API privée est correctement formatée.

Stratégie de ressources

Le message d'erreur «Forbidden» (Interdit) peut s’afficher si la stratégie de ressources API Gateway attachée n'est pas correctement configurée et que vous essayez d'accéder au point de terminaison d’API privée.

Le message d'erreur « User: anonymous is not authorized to perform: execute-api:Invoke on resource:... » s’affiche si la stratégie de ressources n'est pas correctement configurée pour autoriser le trafic à partir du point de terminaison d’un VPC de l'interface vers le point de terminaison d’API privée.

Pour résoudre ces erreurs, veillez à créer et attacher une stratégie de ressources correctement configurée pour l'accès. Utilisez ces exemples de stratégies de ressources comme référence.

Après avoir changé la stratégie de ressources, redéployez votre API pour que les modifications prennent effet.

Stratégie de point de terminaison de VPC

Le message d'erreur « User: anonymous is not authorized to perform: execute-api:Invoke on resource:... » peut également s’afficher si vous utilisez une stratégie de point de terminaison de VPC avec le point de terminaison de VPC de votre interface et que la stratégie limite l'accès.

Assurez-vous que votre stratégie de point de terminaison de VPC autorise le client qui fait des demandes d’accès à l'API privée. Pour plus d'informations, consultez les exemples de stratégies de point de terminaison de VPC.

Groupes de sécurité de VPC

L'erreur « Connection timed out » (délai de connexion expiré) peut indiquer que les règles pour les groupes de sécurité de votre VPC Amazon ne sont pas correctement configurées.

À titre de test, exécutez cette commande à partir du client qui fait des demandes d'accès à l'API privée :

Remarque : remplacez vpce-id par votre ID de point de terminaison de VPC. Remplacez region par la région AWS du point de terminaison de VPC de votre interface.

$ telnet vpce-id.execute-api.region.vpce.amazonaws.com 443

Si la connexion expire, vérifiez la configuration de votre VPC pour vous assurer que :

  • Le groupe de sécurité de la ressource AWS qui effectue des demandes est correctement configuré. Il doit avoir 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 de l'interface.
  • Le groupe de sécurité du point de terminaison de VPC d'interface est correctement configuré. Il doit avoir une règle qui autorise le trafic entrant du port TCP 443 à partir de la plage d'adresses IP ou du groupe de sécurité de la ressource AWS qui fait des demandes.

Pour plus d'informations, consultez la section Utilisation des groupes de sécurité.

Mise en forme d'URL d’appel / DNS privé

Pour appeler votre API privée, l'URL d'appel doit être correctement mise en forme. Le bon format dépend de si vous avez activé ou non le DNS privé pour le point de terminaison de VPC de l'interface.

Pour les DNS privés désactivés, utilisez des noms d'hôtes DNS publics spécifiques au point de terminaison pour accéder à l'API privée.

Remarque : vous pouvez activer le DNS privé pour le point de terminaison de VPC de votre interface à tout moment dans la console de VPC Amazon. Dans le volet Endpoints (Points de terminaison), sélectionnez le point de terminaison de VPC de votre interface. Choisissez Actions, puis Modify Private DNS names (Modifier les noms DNS privés). Cochez la case Enable Private DNS Name (Activer le nom DNS privé), puis choisissez Modify Private DNS names.

Pour les DNS privés activés, utilisez des noms DNS privés pour accéder à l'API privée.

Testez pour confirmer que le domaine de point de terminaison d’API privée est correctement résolu en l'adresse IP du point de terminaison de VPC d'interface. Exécutez cette commande à partir du client qui fait des demandes d'accès à l'API privée :

Remarque : remplacez restapi-id par l'ID de votre API privée. Remplacez region par la région AWS de votre API privée.

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

La sortie doit correspondre aux adresses IP privées du point de terminaison de VPC de l'interface.

Ensuite, exécutez cette commande :

Remarque : remplacez vpce-id par votre ID de point de terminaison de VPC. Remplacez region par la région AWS du point de terminaison de VPC de votre interface.

$ nslookup vpce-id.execute-api.region.vpce.amazonaws.com

Comparez les adresses IP dans les sorties de chaque commande. Si elles sont identiques, le point de terminaison de VPC de l'interface est alors utilisé pour accéder au point de terminaison de l'API privée comme prévu.

Accès externe

Pour accéder à votre API privée à partir d'un VPC Amazon dans un autre compte AWS, procédez comme suit :

  1. Créez un point de terminaison de VPC d'interface dans l'autre compte.
  2. Créez et attachez une stratégie de ressources à votre API privée. La stratégie doit autoriser le trafic entrant venant de l'ID de point de terminaison de VPC ou de l'ID de VPC de l'autre compte.

Les ressources du VPC Amazon de l'autre compte (ou qui utilisent son point de terminaison de VPC d'interface) peuvent utiliser des noms d'hôte DNS publics spécifiques au point de terminaison pour accéder à l'API privée.

Remarque : l'API privée et le point de terminaison de VPC de l'interface dans l'autre compte doivent se trouver dans la même région AWS. L'accès à une API privée à partir d'une autre région nécessite une connexion d'appairage de VPC.

Depuis un réseau local, connectez-vous au VPC à l’aide d'AWS Direct Connect. Vous pouvez ensuite utiliser des noms d'hôtes DNS publics spécifiques au point de terminaison pour accéder à l'API privée.