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 ?

Date de la dernière mise à jour : 11/10/2021

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 :

  1. Créer un point de terminaison d'interface dans un Amazon Virtual Private Cloud (Amazon VPC) au sein d'un compte (compte A).
  2. Créer une API REST privée d'API Gateway dans un deuxième compte (compte B).
  3. Configurer une stratégie de ressources pour l'API REST privée qui permet au point de terminaison d'interface d'appeler l'API.
  4. Configurer une méthode pour votre API REST privée.
  5. Déployer l'API REST privée.
  6. 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 :

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.    Sous API REST privée, choisissez Générer.

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 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.