Comment puis-je autoriser uniquement des adresses IP spécifiques à accéder à mon API REST API Gateway ?

Date de la dernière mise à jour : 20/09/2021

Je souhaite autoriser uniquement des adresses IP spécifiques à accéder à mon API REST Amazon API Gateway. Comment limiter l'accès à mon API REST API Gateway ?

Brève description

Créez, pour votre API REST, une stratégie de ressources qui refuse l'accès à toute adresse IP qui n'est pas explicitement autorisée.

Une fois la stratégie de ressources attachée à votre API REST, les utilisateurs qui appellent l'API à partir d'adresses IP spécifiques (utilisateurs autorisés) peuvent y accéder. Les appels à partir de toutes les autres adresses IP se voient refuser l'accès et reçoivent une erreur HTTP 403 : Accès refusé.

Remarque : pour bloquer des adresses IP spécifiques et autoriser l'accès à toutes les autres adresses, consultez Exemple : refuser le trafic API en fonction de l’adresse ou de la plage d’adresses IP sources.

Solution

Remarque : pour la procédure suivante, vous pouvez utiliser votre API REST API Gateway existante ou créer un exemple d'API REST à des fins de test. Si vous utilisez l'exemple d'API (PetStore), passez directement à la deuxième section :Créer et attacher une stratégie de ressources qui n’autorise l'accès à votre API REST API Gateway qu’à une adresse IP spécifique.

Configurer une méthode d'API

1.    Ouvrez la console API Gateway.

2.    Choisissez votre API REST.

3.    Dans le panneau Resources (Ressources), choisissez Actions. Sélectionnez Create Method (Créer une méthode).

4.    Dans la liste déroulante sous le nœud /resource, choisissez ANY. Ensuite, choisissez l'icône de coche.

5.    Dans le panneau / - ANY - Setup (/ - ANY - Configuration)), pour Integration type (Type d'intégration), choisissez Mock.

6.    Choisissez Save (Enregistrer).

Remarque : une intégration de type Mock répond à toute requête qui l’atteint, ce qui facilitera l’exécution des tests.

Créez et attachez une stratégie de ressources qui n'autorise que des adresses IP spécifiques à accéder à votre API REST API Gateway

1.    Ouvrez la console API Gateway.

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

3.    Sur la page Resource Policy (Stratégie de ressources), collez l'exemple de stratégie de ressources suivant dans la zone de texte :

Exemple de stratégie de ressources

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*"
    },
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": ["sourceIpOrCIDRBlock", "sourceIpOrCIDRBlock"]
        }
      }
    }
  ]
}

3.    Pour aws:SourceIp, remplacez la valeur sourceIpOrCIDRBlock par les adresses IP spécifiques à autoriser. Vous pouvez également spécifier une plage d'adresses IP en utilisant la notation CIDR.

Exemple de chaîne d'adresses IP publiques en notation CIDR

["52.95.36.0/22", "15.230.39.196/31", "52.93.178.219/32"]

Important : la valeur de condition aws:SourceIp ne fonctionne que pour les plages d'adresses IP publiques. Pour autoriser l'accès à des plages d'adresses IP privées, vous devez utiliser la valeur de condition aws:VpcSourceIp. Ensuite, pour la valeur aws:VpcSourceIp, entrez l'adresse IP privée de votre client HTTP qui appelle votre point de terminaison d'API privée via le point de terminaison du VPC. N'oubliez pas que vous pouvez appeler des points de terminaison d'API privés dans API Gateway que via un point de terminaison de VPC. Pour plus d'informations, consultez aws:VpcSourceIp.

4.    Choisissez Save (Enregistrer).

Remarque : la variable$context.identity.sourceIp de vos journaux Amazon CloudWatch répertorie toutes les adresses IP privées qui appellent votre API REST. Pour plus d'informations, consultez la section Variables $context pour les modèles de données, les autorisations, les modèles de mappage et la journalisation des accès CloudWatch.

Déployer votre API

1.    Dans le panneau Resources (Ressources) de votre API REST, choisissez Actions.

2.    Choisissez Deploy API (Déployer l’API).

3.    Dans Deployment stage (Étape de déploiement), choisissez [New Stage] (Nouvelle étape).

4.    Saisissez un nom dans le champ Stage name (Nom de l'environnement). Par exemple : v1 ou démo.

5.    Choisissez Deploy (Déployer).

Important : vous devez redéployer votre API REST chaque fois que vous en modifiez la stratégie de ressources.

Tester la stratégie de ressources

Vérifiez que votre API REST renvoie une réponse HTTP 200 OK aux adresses IP autorisées en testant l'URL d'appel de votre API à l'aide de curl ou de l'application Postman. Exécutez ensuite un autre test à partir d'un environnement sans adresse IP autorisée pour vérifier que votre API REST renvoie une erreur HTTP 403 Forbidden (Accès refusé).

Remarque : si vous n'avez pas accès à plusieurs environnements pour le test, vous pouvez configurer une instance Amazon Elastic Compute Cloud (Amazon EC2). Si vous utilisez une instance Amazon EC2 à des fins de test, veillez à commencer par ajouter l'adresse IP de l'instance à la stratégie de ressources de votre API. Ensuite, redéployez votre API.

Pour obtenir une réponse HTTP 200 OK ou une erreur HTTP 403 en testant votre API REST à l'aide de curl

En fonction de votre système d'exploitation, exécutez l’une des commandes suivantes.

Important : remplacezhttps://yourInvokeUrl/ par l'URL d'appel de votre API REST.

Pour les environnements Linux, Unix et macOS, exécutez la commande suivante :

curl -IX GET https://yourInvokeUrl/

Pour Windows PowerShell, exécutez la commande suivante :

curl https://yourInvokeUrl/

Si la stratégie de ressources est correctement configurée, l'environnement autorisé reçoit une réponse HTTP 200 OK. L'environnement refusé reçoit une erreur HTTP 403 Accès refusé.