Création d'une API privée - Amazon API Gateway

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Création d'une API privée

Avant de créer une API privée, vous devez d'abord créer un point de terminaison VPC pour API Gateway. Ensuite, vous créez votre API privée et vous y associez une politique de ressources. Vous pouvez éventuellement associer votre point de terminaison VPC à votre API privée pour simplifier la façon dont vous appelez votre API. Enfin, vous déployez votre API.

Les procédures suivantes décrivent comment procéder. Vous pouvez créer une API REST privée à l'aide du AWS Management Console AWS CLI ou d'un AWS SDK.

Prérequis

Pour suivre ces étapes, vous devez disposer d'un VPC entièrement configuré. Pour savoir comment créer un VPC, consultez la section Créer un VPC uniquement dans le guide de l'utilisateur Amazon VPC. Pour suivre toutes les étapes recommandées lors de la création de votre VPC, activez le DNS privé. De cette façon, vous pouvez appeler votre API au sein d'un VPC sans avoir à transmettre l'hôte ou x-apigw-api-id l'en-tête.

Pour activer le DNS privé, les enableDnsHostnames attributs enableDnsSupport et de votre VPC doivent être définis sur. true Pour plus d'informations, consultez Support DNS dans votre VPC et Mise à jour du support DNS pour votre VPC.

Étape 1 : créer un point de terminaison VPC pour API Gateway dans votre VPC

La procédure suivante montre comment créer un point de terminaison VPC pour API Gateway. Pour créer un point de terminaison VPC pour API Gateway, vous devez spécifier le execute-api domaine dans Région AWS lequel vous créez votre API privée. Le execute-api domaine est le service du composant API Gateway pour l'exécution de l'API.

Lorsque vous créez votre point de terminaison VPC pour API Gateway, vous spécifiez les paramètres DNS. Si vous désactivez le DNS privé, vous ne pouvez accéder à votre API que via le DNS public. Pour plus d’informations, consultez Problème : je ne parviens pas à me connecter à mon API publique depuis un point de terminaison VPC API Gateway.

AWS Management Console
Pour créer un point de terminaison VPC d'interface pour API Gateway
  1. Connectez-vous à la console Amazon VPC AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/vpc/.

  2. Dans le panneau de navigation, sous Cloud privé virtuel, choisissez Points de terminaison.

  3. Choisissez Créer un point de terminaison.

  4. (Facultatif) Dans le champ Name tag, entrez un nom pour identifier le point de terminaison de votre VPC.

  5. Pour Service category (Catégorie de service), choisissez Services AWS .

  6. Sous Services, dans la barre de recherche, entrezexecute-api. Choisissez ensuite le point de terminaison du service API Gateway dans Région AWS lequel vous allez créer votre API. Le nom du service doit ressembler à Interface com.amazonaws.us-east-1.execute-api et le type doit être Interface.

  7. Pour VPC, choisissez le VPC dans lequel vous souhaitez créer le point de terminaison.

  8. (Facultatif) Pour désactiver l'option Activer le nom DNS privé, sélectionnez Paramètres supplémentaires, puis désactivez Activer le nom DNS privé.

  9. Pour les sous-réseaux, choisissez les zones de disponibilité dans lesquelles vous avez créé les interfaces réseau des terminaux. Pour améliorer la disponibilité de votre API, choisissez plusieurs sous-réseaux.

  10. Pour Security group (Groupe de sécurité), sélectionnez le groupe de sécurité à associer aux interfaces réseau du point de terminaison d'un VPC.

    Le groupe de sécurité que vous choisissez doit être configuré pour autoriser le trafic HTTPS entrant du port TCP 443 à partir d'une plage IP de votre VPC ou d'un autre groupe de sécurité de votre VPC.

  11. Pour Policy, effectuez l'une des opérations suivantes :

    • Si vous n'avez pas créé votre API privée ou si vous ne souhaitez pas configurer de politique de point de terminaison VPC personnalisée, choisissez Accès complet.

    • Si vous avez déjà créé une API privée et que vous souhaitez configurer une politique de point de terminaison VPC personnalisée, vous pouvez entrer une politique de point de terminaison VPC personnalisée. Pour plus d’informations, consultez Utilisation de stratégies de point de terminaison de VPC pour des API privées dans API Gateway.

    Vous pouvez mettre à jour la politique de point de terminaison du VPC après avoir créé le point de terminaison du VPC. Pour plus d'informations, consultez Mettre à jour une politique de point de terminaison VPC.

  12. Choisissez Créer un point de terminaison.

  13. Copiez l'ID de point de terminaison VPC obtenu, tel que vous pourriez l'utiliser dans les étapes futures.

AWS CLI

La create-vpc-endpointcommande suivante peut être utilisée pour créer un point de terminaison VPC :

aws ec2 create-vpc-endpoint \ --vpc-id vpc-1a2b3c4d \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.us-east-1.execute-api \ --subnet-ids subnet-7b16de0c \ --security-group-id sg-1a2b3c4d

Copiez l'ID de point de terminaison VPC obtenu, tel que vous pourriez l'utiliser dans les étapes futures.

Étape 2 : Créer une API privée

Après avoir créé votre point de terminaison VPC, vous créez une API REST privée. La procédure suivante montre comment créer une API privée.

AWS Management Console
Pour créer une API privée
  1. Connectez-vous à la console API Gateway à l'adresse : https://console.aws.amazon.com/apigateway.

  2. Sélectionnez Create API (Créer une API).

  3. Sous REST API (API REST), choisissez Build (Création).

  4. Pour Nom, entrez un nom.

  5. (Facultatif) Sous Description, entrez une description.

  6. Pour Type de point de terminaison d'API, sélectionnez Privé.

  7. (Facultatif) Pour les ID de point de terminaison VPC, entrez un ID de point de terminaison VPC.

    Si vous associez un ID de point de terminaison VPC à votre API privée, vous pouvez appeler votre API depuis votre VPC sans remplacer un Host en-tête ni transmettre un. x-apigw-api-id header Pour plus d'informations, consultez. (Facultatif) Associer ou dissocier un point de terminaison VPC à une API privée

  8. Sélectionnez Create API (Créer une API).

Après avoir effectué les étapes précédentes, vous pouvez suivre les instructions Commencez à utiliser la console de l'API REST pour configurer les méthodes et les intégrations pour cette API, mais vous ne pouvez pas déployer votre API. Pour déployer votre API, suivez l'étape 3 et associez une politique de ressources à votre API.

AWS CLI

La update-rest-apicommande suivante montre comment créer une API privée :

aws apigateway create-rest-api \ --name 'Simple PetStore (AWS CLI, Private)' \ --description 'Simple private PetStore API' \ --region us-west-2 \ --endpoint-configuration '{ "types": ["PRIVATE"] }'

Un appel fructueux renvoie une sortie similaire à ce qui suit :

{ "createdDate": "2017-10-13T18:41:39Z", "description": "Simple private PetStore API", "endpointConfiguration": { "types": "PRIVATE" }, "id": "0qzs2sy7bh", "name": "Simple PetStore (AWS CLI, Private)" }

Après avoir effectué les étapes précédentes, vous pouvez suivre les instructions Tutoriel : Création d'une API REST à l'aide de AWS SDK ou AWS CLI pour configurer les méthodes et les intégrations pour cette API, mais vous ne pouvez pas déployer votre API. Pour déployer votre API, suivez l'étape 3 et associez une politique de ressources à votre API.

SDK JavaScript v3

L'exemple suivant montre comment créer une API privée à l'aide du AWS SDK pour la JavaScript version 3 :

import {APIGatewayClient, CreateRestApiCommand} from "@aws-sdk/client-api-gateway"; const apig = new APIGatewayClient({region:"us-east-1"}); const input = { // CreateRestApiRequest name: "Simple PetStore (JavaScript v3 SDK, private)", // required description: "Demo private API created using the AWS SDK for JavaScript v3", version: "0.00.001", endpointConfiguration: { // EndpointConfiguration types: [ "PRIVATE"], }, }; export const handler = async (event) => { const command = new CreateRestApiCommand(input); try { const result = await apig.send(command); console.log(result); } catch (err){ console.error(err) } };

Un appel fructueux renvoie une sortie similaire à ce qui suit :

{ apiKeySource: 'HEADER', createdDate: 2024-04-03T17:56:36.000Z, description: 'Demo private API created using the AWS SDK for JavaScript v3', disableExecuteApiEndpoint: false, endpointConfiguration: { types: [ 'PRIVATE' ] }, id: 'abcd1234', name: 'Simple PetStore (JavaScript v3 SDK, private)', rootResourceId: 'efg567', version: '0.00.001' }

Après avoir effectué les étapes précédentes, vous pouvez suivre les instructions Tutoriel : Création d'une API REST à l'aide de AWS SDK ou AWS CLI pour configurer les méthodes et les intégrations pour cette API, mais vous ne pouvez pas déployer votre API. Pour déployer votre API, suivez l'étape 3 et associez une politique de ressources à votre API.

Python SDK

L'exemple suivant montre comment créer une API privée à l'aide du AWS SDK pour Python :

import json import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') def lambda_handler(event, context): try: result = apig.create_rest_api( name='Simple PetStore (Python SDK, private)', description='Demo private API created using the AWS SDK for Python', version='0.00.001', endpointConfiguration={ 'types': [ 'PRIVATE', ], }, ) except botocore.exceptions.ClientError as error: logger.exception("Couldn't create private API %s.", error) raise attribute=["id", "name", "description", "createdDate", "version", "apiKeySource", "endpointConfiguration"] filtered_data ={key:result[key] for key in attribute} result = json.dumps(filtered_data, default=str, sort_keys='true') return result

Un appel fructueux renvoie une sortie similaire à ce qui suit :

"{\"apiKeySource\": \"HEADER\", \"createdDate\": \"2024-04-03 17:27:05+00:00\", \"description\": \"Demo private API created using the AWS SDK for \", \"endpointConfiguration\": {\"types\": [\"PRIVATE\"]}, \"id\": \"abcd1234\", \"name\": \"Simple PetStore (Python SDK, private)\", \"version\": \"0.00.001\"}"

Après avoir effectué les étapes précédentes, vous pouvez suivre les instructions Tutoriel : Création d'une API REST à l'aide de AWS SDK ou AWS CLI pour configurer les méthodes et les intégrations pour cette API, mais vous ne pouvez pas déployer votre API. Pour déployer votre API, suivez l'étape 3 et associez une politique de ressources à votre API.

Étape 3 : configurer une politique de ressources pour une API privée

Votre API privée actuelle est inaccessible à tous les VPC. Utilisez une politique de ressources pour accorder à vos VPC et points de terminaison VPC l'accès à vos API privées. Vous pouvez accorder l'accès à un point de terminaison VPC dans n'importe quel AWS compte.

Votre politique en matière de ressources doit contenir aws:SourceVpc des aws:SourceVpce conditions visant à restreindre l'accès. Nous vous recommandons d'identifier des VPC et des points de terminaison VPC spécifiques et de ne pas créer de politique de ressources autorisant l'accès à tous les VPC et points de terminaison VPC.

La procédure suivante montre comment associer une politique de ressources à votre API.

AWS Management Console
  1. Connectez-vous à la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway.

  2. Choisissez une API REST.

  3. Dans le panneau de navigation principal, choisissez Stratégie de ressources.

  4. Choisissez Créer une politique.

  5. Choisissez Sélectionnez un modèle, puis choisissez Source VPC.

  6. {{vpceID}}Remplacez-le (y compris les bretelles) par votre identifiant de point de terminaison VPC.

  7. Sélectionnez Enregistrer les modifications.

AWS CLI

La update-rest-apicommande suivante montre comment associer une politique de ressources à une API existante :

aws apigateway update-rest-api \ --rest-api-id a1b2c3 \ --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"'

Vous souhaiterez peut-être également contrôler les ressources qui ont accès à votre point de terminaison VPC. Pour contrôler quelles ressources ont accès à votre point de terminaison VPC, associez une politique de point de terminaison à votre point de terminaison VPC. Pour plus d’informations, consultez Utilisation de stratégies de point de terminaison de VPC pour des API privées dans API Gateway.

(Facultatif) Associer ou dissocier un point de terminaison VPC à une API privée

Lorsque vous associez un point de terminaison VPC à votre API privée, API Gateway génère un nouvel enregistrement DNS d'alias Route 53. Vous pouvez utiliser cet enregistrement pour appeler vos API privées comme vous le faites pour vos API publiques sans remplacer un Host en-tête ni en transmettre unx-apigw-api-id.

Format de l'URL de base générée :

https://{rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com/{stage}
Associate a VPC endpoint (AWS Management Console)

Vous pouvez associer un point de terminaison VPC à votre API privée lors de sa création ou après sa création. La procédure suivante montre comment associer un point de terminaison VPC à une API créée précédemment.

Pour associer un point de terminaison VPC à une API privée
  1. Connectez-vous à la console API Gateway à l'adresse : https://console.aws.amazon.com/apigateway.

  2. Choisissez votre API privée.

  3. Dans le panneau de navigation principal, choisissez Stratégie de ressources.

  4. Modifiez votre politique de ressources pour autoriser les appels depuis votre point de terminaison d’un VPC supplémentaire.

  5. Dans le panneau de navigation principal, choisissez Paramètres de l'API.

  6. Dans la section Détails de l'API, choisissez Modifier.

  7. Pour ID de points de terminaison d’un VPC sélectionnez les ID de point de terminaison d’un VPC supplémentaires.

  8. Choisissez Enregistrer.

  9. Redéployez l’API pour que les modifications prennent effet.

Dissociate a VPC endpoint (AWS Management Console)
Pour dissocier un point de terminaison VPC d'une API REST privée
  1. Connectez-vous à la console API Gateway à l'adresse : https://console.aws.amazon.com/apigateway.

  2. Choisissez votre API privée.

  3. Dans le panneau de navigation principal, choisissez Stratégie de ressources.

  4. Modifiez votre stratégie de ressources pour supprimer les mentions du point de terminaison d’un VPC que vous souhaitez dissocier de votre API privée.

  5. Dans le panneau de navigation principal, choisissez Paramètres de l'API.

  6. Dans la section Détails de l'API, choisissez Modifier.

  7. Pour les ID de points de terminaison d’un VPC, choisissez le X pour dissocier le point de terminaison d’un VPC.

  8. Choisissez Enregistrer.

  9. Redéployez l’API pour que les modifications prennent effet.

Associate a VPC endpoint (AWS CLI)

La create-rest-apicommande suivante montre comment associer des points de terminaison VPC au moment de la création de l'API :

aws apigateway create-rest-api \ --name Petstore \ --endpoint-configuration '{ "types": ["PRIVATE"], "vpcEndpointIds" : ["vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee"] }' \ --region us-west-2

Le résultat se présente comme suit :

{ "apiKeySource": "HEADER", "endpointConfiguration": { "types": [ "PRIVATE" ], "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee" ] }, "id": "u67n3ov968", "createdDate": 1565718256, "name": "Petstore" }

La update-rest-apicommande suivante montre comment associer des points de terminaison VPC à une API que vous avez déjà créée :

aws apigateway update-rest-api \ --rest-api-id u67n3ov968 \ --patch-operations "op='add',path='/endpointConfiguration/vpcEndpointIds',value='vpce-01d622316a7df47f9'" \ --region us-west-2

Le résultat se présente comme suit :

{ "name": "Petstore", "apiKeySource": "1565718256", "tags": {}, "createdDate": 1565718256, "endpointConfiguration": { "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee", "vpce-01d622316a7df47f9" ], "types": [ "PRIVATE" ] }, "id": "u67n3ov968" }

Redéployez l’API pour que les modifications prennent effet.

Disassociate a VPC endpoint (AWS CLI)

La update-rest-apicommande suivante montre comment dissocier un point de terminaison VPC d'une API privée :

aws apigateway update-rest-api \ --rest-api-id u67n3ov968 \ --patch-operations "op='remove',path='/endpointConfiguration/vpcEndpointIds',value='vpce-0393a628149c867ee'" \ --region us-west-2

Le résultat se présente comme suit :

{ "name": "Petstore", "apiKeySource": "1565718256", "tags": {}, "createdDate": 1565718256, "endpointConfiguration": { "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-01d622316a7df47f9" ], "types": [ "PRIVATE" ] }, "id": "u67n3ov968" }

Redéployez l’API pour que les modifications prennent effet.

Étape 4 : Déployer une API privée

Pour déployer votre API, vous devez créer un déploiement d'API et l'associer à une étape. La procédure suivante indique comment déployer votre API privée.

AWS Management Console
Pour déployer une API privée
  1. Choisissez votre API.

  2. Sélectionnez Deploy API (Déployer une API).

  3. Pour Étape, sélectionnez Nouvelle étape.

  4. Pour Nom de l'étape, entrez un nom d'étape.

  5. (Facultatif) Sous Description, entrez une description.

  6. Choisissez Deploy (Déployer).

AWS CLI

La commande create-deployment suivante montre comment déployer une API privée :

aws apigateway create-deployment --rest-api-id a1b2c3 \ --stage-name test \ --stage-description 'Private API test stage' \ --description 'First deployment'

Résoudre les problèmes liés à votre API privée

Vous trouverez ci-dessous des conseils de résolution des erreurs et des problèmes que vous pourriez rencontrer lors de la création d'une API privée.

Problème : je ne parviens pas à me connecter à mon API publique depuis un point de terminaison VPC API Gateway

Lorsque vous créez votre VPC, vous pouvez configurer les paramètres DNS. Nous vous recommandons d'activer le DNS privé pour votre VPC. Si vous choisissez de désactiver le DNS privé, vous ne pouvez accéder à votre API que via le DNS public.

Si vous activez le DNS privé, vous ne pouvez pas accéder au point de terminaison par défaut d'une API API Gateway publique depuis votre point de terminaison VPC. Vous pouvez accéder à une API avec un nom de domaine personnalisé.

Si vous créez un nom de domaine personnalisé régional, utilisez un enregistrement d'alias de type A, si vous créez un nom de domaine personnalisé optimisé pour les périphériques, votre type d'enregistrement n'est soumis à aucune restriction. Vous pouvez accéder à ces API publiques avec le DNS privé activé. Pour plus d'informations, consultez Problème : je me connecte à mon API publique depuis un point de terminaison VPC API Gateway.

Problème : Mon API renvoie {"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-east-1:********/****/****/"}

Dans votre politique de ressources, si vous attribuez au principal un AWS principal, tel que ce qui suit :

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", ""Principal": { "AWS": [ "arn:aws:iam::account-id:role/developer", "arn:aws:iam::account-id:role/Admin" ] }, "Action": "execute-api:Invoke", "Resource": [ "execute-api:/*" ] }, ... }

Vous devez utiliser AWS_IAM l'autorisation pour chaque méthode de votre API, sinon votre API renvoie le message d'erreur précédent. Pour plus d'instructions sur la façon d'activer AWS_IAM l'autorisation pour une méthode, consultezMéthodes pour les API REST dans API Gateway.

Problème : je ne peux pas dire si mon point de terminaison VPC est associé à mon API

Si vous associez ou dissociez un point de terminaison VPC à votre API privée, vous devez redéployer votre API. L'opération de mise à jour peut prendre quelques minutes en raison de la propagation du DNS. Pendant ce temps, votre API est disponible, mais la propagation DNS pour les URL DNS nouvellement générées peut encore être en cours. Si, au bout de quelques minutes, vos nouvelles URL ne sont pas résolues dans le DNS, nous vous recommandons de redéployer votre API.