Comment puis-je appeler une API privée API Gateway à l'aide d'un équilibreur de charge d'application ou de réseau ?

Dernière mise à jour : 03/11/2022

Je souhaite configurer mon API privée API Gateway en tant que cible derrière un équilibreur de charge. Ensuite, je souhaite accéder à mon API privée à partir d'un équilibreur de charge d'application ou de réseau en utilisant mon compte ou un autre compte AWS. Comment procéder ?

Brève description

Pour accéder à votre API privée à l'aide d'AWS Direct Connect ou d'Amazon Route 53, consultez Comment invoquer une API privée. Vous pouvez également accéder à une API REST privée API Gateway dans un autre compte AWS en utilisant une interface de point de terminaison d'un VPC.

Dans la configuration suivante, l'API privée est ajoutée en tant que cible à l'équilibreur de charge. Cela se fait à l'aide de l'adresse IP de l'interface réseau élastique du point de terminaison Amazon Virtual Private Cloud (Amazon VPC).

Important : les noms de domaine personnalisés ne sont pas pris en charge pour les API privées. Pour contourner ce problème, vous pouvez appeler le domaine et l'associer à un équilibreur de charge. Ensuite, appelez l'API privée à l'aide de la configuration décrite dans le présent article.

Solution

Créer un point de terminaison Amazon VPC

1.    Ouvrez la console Amazon VPC, choisissez Endpoints (Points de terminaison), puis Create Endpoint (Créer un point de terminaison).
Remarque : si des points de terminaison Amazon VPC sont déjà configurés dans votre VPC à l'aide de l'API execute-api, assurez-vous que le DNS privé est désactivé.

2.    Pour les Services, choisissez com.amazonaws.com.your-region.execute-api.

3.    Pour un VPC, choisissez votre Amazon VPC.

4.    Pour les sous-réseaux, choisissez deux sous-réseaux dans des zones de disponibilité (AZ ID) différentes, puis choisissez Créer un point de terminaison.

5.    Choisissez votre point de terminaison, choisissez les sous-réseaux et copiez l'Adresse IP. Vous utilisez cette adresse IP dans une autre étape.

Pour plus d'informations, consultez la section Créer un point de terminaison d’un VPC d’interface pour API Gateway execute-api.

Créez une API REST privée et accordez l’autorisation au point de terminaison Amazon VPC.

1.    Ouvrez la console API Gateway, puis cliquez sur Create API (Créer une API).

2.    Pour REST API (API REST), sélectionnez Build (Création).

3.    Dans Paramètres, entrez les informations suivantes :
Dans API name (Nom de l'API), saisissez un nom pour l’API.
Au moment de définir le paramètre Type de point de terminaison, sélectionnez Privé.
Pour les ID de point de terminaison, entrez et l'ID de terminal que vous avez créé précédemment.

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

5.    Dans le panneau de navigation, choisissezResource Policy (Stratégie de ressource).

6.    Dans l'éditeur de stratégie de ressources, collez la stratégie suivante :
Remarque :
remplacez vpce-<id> par l'ID du point de terminaison du VPC.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:<region>:<account :<api-id>/*/*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:sourceVpce": "vpce-081234d1ad408e"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:<region>:<account-id>:<api-id>/*/*/*"
    }
  ]
}

7.    Choisissez Enregistrer.

Pour plus d'informations, consultez la section Créer une API privée à l'aide de la console API Gateway.

Création ou importation d'un certificat public AWS Certificate Manager

Si ce n'est pas déjà fait, effectuez l'une des opérations suivantes :

Demande d’un certificat public.

-ou-

Importer un certificat

Créer un Application Load Balancer ou un Network Load Balancer

Si ce n'est pas déjà fait, effectuez l'une des opérations suivantes :

Créer un Application Load Balancer

-ou-

Créer un Network Load Balancer

Créer le groupe cible

1.    Ouvrez la console Amazon Elastic Compute Cloud (Amazon EC2).

2.    Dans le volet de navigation, dansLoad Balancing (Équilibrage de charge), choisissez Load Balancers (Équilibreurs de charge, Target Groups (Groupes cibles), puis Create target group (Créer un groupe cible).

3.    Pour Target type (Type de cible), choisissez les Adresses IP.

4.    Pour Nom du groupe cible, saisissez un nom.

Application Load Balancer

Pour Protocole, choisissez HTTPS.
Pour Port, choisissez 443.
Pour VPC, choisissez votre VPC.
Pour le chemin de Surveillance de l’état, entrez 200 403. (Cela permet de s'assurer que le point de terminaison du VPC apparaît comme Healthy (En bon état) dans le groupe cible)

Network Load Balancer

Pour Protocole, choisissez TLS.
Pour Port, choisissez 443.
Pour VPC, choisissez votre VPC.

5.    Choisissez Next (Suivant).

6.    DansSpecify IPs (Spécifier les adresses IP), entrez l'adresse IP que vous avez copiée dans la section Créer un point de terminaison Amazon VPC d'interface, puis choisissez Ajouter une adresse IPv4.

7.    Sélectionnez Create target group (Créer un groupe cible).

Configurer l'équilibreur de charge

1.    Ouvrez la console EC2.

2.    Dans le panneau de navigation, choisissez Équilibreurs de charge, puis Créer un équilibreur de charge.

Application Load Balancer

Pour Scheme, choisissez une Internet-facing (Sur internet) ou Internal (Interne) en fonction de votre configuration.
Pour Protocole, choisissez HTTPS.
Pour le VPC et les sous-réseaux, choisissez votre VPC et vos sous-réseaux.

Network Load Balancer pour Scheme, choisissez entre accès Internet ou Interne en fonction de votre configuration.
Pour Protocole, choisissez TLS.
Pour le VPC et les sous-réseaux, choisissez votre VPC et vos sous-réseaux.
Pour Stratégie de sécurité, choisissez la stratégie par défaut ELBSecurityPolicy-TLS (recommandée).
Pour le certificat SSL/TLS par défaut, choisissez From ACM (À partir d’ACM).
Choisissez le menu déroulant Sélectionnez un certificat, puis choisissez votre certificat.

3.    Sélectionnez Create a load balancer (Créer un équilibreur de charge).

Remarque : Les cibles de l'équilibreur de charge doivent être les adresses IP de l'interface réseau élastique créée par le point de terminaison du VPC. Elles ont été effectuées à l'étape 1. Vous pouvez trouver ces interfaces réseau élastiques en sélectionnant le point de terminaison de votre VPC et en ouvrant l'onglet Sous-réseaux.

Création d'un enregistrement dans une zone hébergée publique ou privée Amazon Route 53

Si ce n'est pas déjà fait, effectuez l'une des opérations suivantes :

Création d'une zone hébergée publique

-ou-

Créer une zone hébergée privée

Créez ensuite un enregistrement CNAME et associez-le à votre application ou à votre équilibreur de charge réseau.

Test

Pour les équilibreurs de charge publics, vous pouvez effectuer une requête curl depuis votre machine locale.

Pour les équilibreurs de charge privés, lancez une nouvelle instance EC2 dans l'un des sous-réseaux de votre équilibreur de charge. Ensuite, faites une requête curl similaire à la suivante :

curl -v https://{custom-domain-name}/<stage-name>/<resource-path> -H 'Host: <api-id>.execute-api.<region>.amazonaws.com'

-ou-

curl -v https://{custom-domain-name}/<stage-name>/<resource-path> -H 'x-apigw-api-id:{api-id}'

Une demande réussie renvoie un code de réponse 200 OK. Une demande infructueuse renvoie un code de réponse 403 Forbidden ou une erreur de résolution DNS. Si vous rencontrez des problèmes, consultez Résoudre les problèmes liés à vos équilibreurs de charge.