Comment puis-je accéder à une API REST privée d'API Gateway située dans un autre compte AWS à l'aide d'un point de terminaison d'un VPC d'interface ?
Dernière mise à jour : 16/09/2022
Je souhaite utiliser un point de terminaison d'un VPC d'interface pour accéder à une API REST privée d'Amazon API Gateway qui se trouve dans un autre compte AWS. Comment puis-je procéder ?
Brève description
Pour utiliser un point de terminaison d'un VPC d'interface pour accéder à une API REST privée d'Amazon API Gateway qui se trouve dans un autre compte AWS, veuillez suivre les étapes suivantes :
- Créer un point de terminaison d'interface dans un Amazon Virtual Private Cloud (Amazon VPC) au sein d'un compte (compte A).
- Créer une API REST privée d'API Gateway dans un deuxième compte (compte B).
- Configurer une stratégie de ressources pour l'API REST privée qui permet au point de terminaison d'interface d'appeler l'API.
- Configurer une méthode pour votre API REST privée.
- Déployer l'API REST privée.
- Tester la configuration en appelant l'API REST privée depuis le compte A.
Résolution
Créer un point de terminaison d'interface dans un Amazon VPC au sein d'un compte (compte A)
Créer un point de terminaison de VPC d'interface
À partir du compte A, suivez les instructions de la section Créer un point de terminaison VPC d'interface pour execute-api d'API Gateway.
Important : dans Policy (Stratégie), choisissez Full Access (Accès complet). Il est recommandé d'utiliser une stratégie de point de terminaison VPC pour restreindre l'accès aux points de terminaison par ID d'API. Il est également recommandé d'utiliser la stratégie de ressource API Gateway pour restreindre l'accès aux points de terminaison par principal. Pour plus d'informations sur les conseils de sécurité concernant l'octroi du moindre privilège, consultez la section Accorder le moindre privilège dans le Guide de l'utilisateur IAM.
Lorsque vous créez le point de terminaison d'interface, tenez compte des éléments suivants :
- Il est recommandé de sélectionner plusieurs sous-réseaux dans différentes zones de disponibilité. La configuration de sous-réseaux sur plusieurs zones de disponibilité rend votre point de terminaison d'interface résilient aux éventuelles défaillances de la zone de disponibilité.
- Lorsque le DNS privé est activé, vous pouvez vous connecter à votre API REST privée à l'aide d'un DNS public ou privé.
Remarque : en activant le DNS privé pour un point de terminaison d'un VPC d'interface, vous ne pouvez plus accéder aux API publiques API Gateway depuis votre Amazon VPC. Pour plus d'informations, consultez la section Pourquoi l'erreur HTTP 403 Forbidden (HTTP 403 Interdit) est-elle générée lorsque je me connecte à mes API d'API Gateway à partir d'un VPC ? - Les groupes de sécurité que vous choisissez doivent avoir une règle qui autorise le trafic HTTPS entrant du port TCP 443 à partir de l'un des éléments suivants :
Une plage d'adresses IP dans votre Amazon VPC
-ou-
Un autre groupe de sécurité dans votre Amazon VPC
Remarque : Si aucun de vos groupes de sécurité ne remplit ces exigences, choisissez l'option Create a new security group (Créer un nouveau groupe de sécurité). Ensuite, créez un nouveau groupe de sécurité qui répond à l'une des exigences. Si vous ne spécifiez pas de groupe de sécurité, un groupe de sécurité par défaut sera associé aux interfaces réseau du point de terminaison.
Récupérez l’ID du point de terminaison du VPC du point de terminaison d'interface
Une fois que vous avez choisi Create endpoint (Créer un point de terminaison) et que vous avez créé le point de terminaison d'interface, l'ID du point de terminaison du VPC apparaît. Copiez l'ID du point de terminaison du VPC de votre nouveau point de terminaison d'interface (par exemple : vpce-1a2b3c456d7e89012). Ensuite, choisissez Close (Fermer).
Remarque : vous utiliserez cet ID est nécessaire lors de la création et de la configuration de votre API REST privée.
Récupérez le nom DNS public du point de terminaison d'interface
Une fois que vous avez choisi Close (Fermer), la page Endpoints (Points de terminaison) s'ouvre dans la console Amazon VPC. Dans l'onglet Details (Détails) de la page Endpoints (Points de terminaison), dans la colonne DNS names (Noms DNS), recherchez et copiez le nom DNS public de votre point de terminaison d'interface. Par exemple : vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com.
Créez une API REST privée API Gateway dans un deuxième compte (compte B)
1. Depuis le compte B, ouvrez la console API Gateway.
2. Sélectionnez Create API (Créer une API).
3. Pour l'option Choisir un type d'API, sous API REST, choisissez Build (Créer).
4. Sur la page Create (Créer), l'option Choose the protocol (Choisir le protocole) doit être définie sur REST.
5. Sous Create new API (Créer une nouvelle API), choisissez New API (Nouvelle API).
6. Sous Settings (Paramètres), procédez comme suit :
Dans API name (Nom de l'API), saisissez un nom pour votre API.
(Facultatif) Dans le champ Description, saisissez la description de votre API.
L'option Endpoint Type (Type de point de terminaison) doit être définie sur Private (Privé).
Pour les ID de point de terminaison du VPC, collez l'ID de votre point de terminaison d'interface. Choisissez Add (Ajouter).
Remarque : lorsque vous associez votre point de terminaison d'interface à votre API REST privée, API Gateway génère un nouvel enregistrement d'alias Amazon Route 53. Vous pouvez utiliser l'alias Route 53 pour accéder à votre API privée.
7. Sélectionnez Create API (Créer une API).
Pour plus d'informations, consultez la section Création d'une API privée dans Amazon API Gateway.
Configurer une stratégie de ressources pour l'API REST privée qui permet au point de terminaison d'interface d'appeler l'API
1. Dans le volet de navigation de gauche de la console API Gateway, choisissez Stratégie de ressources.
2. Sur la page Resource Policy (Stratégie de ressources) collez l'exemple de stratégie de ressources suivant dans la zone de texte :
Remarque : remplacez vpce-1a2b3c456d7e89012 par l'ID du point de terminaison d'interface précédemment copié.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "execute-api:/*/*/*",
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-1a2b3c456d7e89012"
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "execute-api:/*/*/*"
}
]
}
Pour plus d'informations, consultez la section Configurer une stratégie de ressources pour une API privée.
Configurer une méthode pour votre API REST privée
1. Dans le volet de navigation de gauche de la console API Gateway, choisissez Resources (Ressources).
2. Dans le volet Resources (Ressources), choisissez Actions (Actions). Ensuite, choisissez Create Method (Créer une méthode).
3. Dans la liste déroulante sous le nœud / resource, choisissez ANY. Ensuite, choisissez l'icône de coche.
4. Dans le volet / - ANY - Setup (/ - ANY - Configuration), pour Integration type (Type d'intégration), choisissez Mock (Fictif).
Remarque : une intégration fictive répond à toutes les requêtes qui l’atteignent. Cela nous permettra d’effectuer des tests.
5. Sélectionnez Save (Enregistrer).
Pour plus d'informations, consultez la section Configurer des méthodes de l'API REST dans API Gateway.
Déployer l'API REST privée
1. Dans le volet Resources (Ressources) de la console API Gateway, choisissez Actions, puis Deploy API (Déployer l'API).
2. Dans la boîte de dialogue Deploy API (Déployer l'API), procédez comme suit :
Dans Deployment stage (Étape de déploiement), choisissez [New Stage] (Nouvelle étape).
Saisissez un nom dans le champ Stage name (Nom de l’étape). Par exemple, dev ou test.
Choisissez Deploy (Déployer).
3. Dans le volet Stage Editor (Éditeur d'étape), trouvez le message (« If Private DNS is enabled, use this URL: » – « Si le DNS privé est activé, utilisez cette URL : ») qui contient l'URL d'appel de votre API privée. Ensuite, copiez l'URL.
Remarque : vous utiliserez l'URL d'appel de l'API REST privée pour tester la configuration.
Pour plus d'informations, consultez la section Déployer une API privée à l'aide de la console API Gateway.
Tester la configuration en appelant l'API REST privée depuis le compte A
1. Dans le compte A, lancez une instance Amazon Elastic Compute Cloud (Amazon EC2) dans le même Amazon VPC que votre point de terminaison d'interface.
Important : lors de la configuration, choisissez le groupe de sécurité que vous avez associé à votre point de terminaison d'interface.
2. Connectez-vous à l'instance Amazon EC2.
Remarque : l'utilisation d'une instance Amazon EC2 peut entraîner des frais sur votre compte AWS. Si vous créez une instance uniquement pour tester cette configuration, résiliez-la une fois la procédure terminée, afin d'éviter des frais récurrents.
3. Depuis la ligne de commande de votre instance Amazon EC2, utilisez l'une des commandes curl suivantes pour appeler l'API REST privée dans le compte B.
Remarque : 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. Pour plus d'informations sur curl, consultez le site Web du projet curl.
Pour appeler votre API à l'aide d'un nom DNS privé
curl -i https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name
Remarque : remplacez https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name par l'URL d'appel de votre API privée, précédemment copiée à partir de la console API Gateway. Cette commande fonctionne uniquement si vous avez activé le DNS privé pour votre point de terminaison d'interface. Pour plus d'informations, consultez la section Appel de votre API privée à l'aide de noms DNS privés.
Pour appeler votre API à l'aide d'un alias Route 53
curl -i https://a1bc234d5e-vpce-1a2b3c456d7e89012.execute-api.region.amazonaws.com/stage-name
Remarque : remplacez a1bc234d5e par l'ID de votre API.
Remplacez vpce-1a2b3c456d7e89012 par l'ID du point de terminaison d'interface.
Remplacez region par la région de votre API. (Par exemple, us-east-1.)
Remplacez stage-name par le nom de l'étape où vous avez déployé votre API privée. Pour plus d'informations, consultez la section Accès à votre API privée à l'aide d'un alias Route 53.
Pour appeler votre API à l'aide d'un nom DNS public avec un en-tête d'hôte
curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "Host: a1bc234d5e.execute-api.region.amazonaws.com"
Remarque : remplacez vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com par le nom DNS public que vous avez noté dans la console Amazon VPC.
Remplacez stage-name par le nom de l'étape où vous avez déployé votre API privée.
Remplacez a1bc234d5e.execute-api.region.amazonaws.com par l'URL d'appel de votre API récupérée dans la console API Gateway.
Pour appeler votre API à l'aide d'un nom DNS public avec l'en-tête x-apigw-api-id
curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "x-apigw-api-id:a1bc234d5e"
Remarque : remplacez vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com par le nom DNS public que vous avez noté dans la console Amazon VPC.
Remplacez stage-name par le nom de l'étape où vous avez déployé votre API privée.
Remplacez a1bc234d5e par l'ID de votre API.
4. Vérifiez la sortie de la commande. API Gateway renvoie une réponse 200 OK si la connexion est réussie.
Informations connexes
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?