Comment puis-je utiliser une stratégie de ressources pour autoriser certaines adresses IP à accéder à mon API API Gateway ?

Dernière mise à jour : 07/08/2020

Je veux autoriser certaines adresses IP à accéder à mon API Amazon API Gateway et limiter l'accès pour toutes les autres. Comment dois-je procéder ?

Brève description

Créez une stratégie de ressources pour votre API qui refuse l'accès à toute adresse IP qui n'est pas explicitement autorisée. Les utilisateurs qui appellent l'API à partir d'adresses IP spécifiées (utilisateurs autorisés) peuvent accéder à l'API. Les appels à partir de toute autre adresse IP se voient refuser l'accès et obtiennent une erreur HTTP 403 : accès refusé.

Solution

Pour ces instructions, utilisez votre API API Gateway ou créez un exemple d'API pour les tests. Si vous utilisez l'exemple d'API (PetStore) pour cette configuration, passez directement à Create and attach a resource policy (Créer et attacher une stratégie de ressources) ci-dessous.

Configurer une méthode d'API

1.    Ouvrez la console API Gateway, puis choisissez votre API.

2.    Dans le volet Resources (Ressources), choisissez Actions (Actions), puis Create Method (Créer une méthode).

3.    Dans la liste déroulante sous le nœud de ressource /, choisissez ANY (TOUT), puis sélectionnez l'icône de coche.

4.    Dans le volet /- ANY - Setup (/- TOUT - Configuration), pour Integration type (Type d'intégration), choisissez Mock (Fictif), puis choisissez Save (Enregistrer).

Remarque : une intégration fictive répond à n'importe quelle requête qui l'atteint, ce qui permettra plus tard d'effectuer les tests.

Créer et attacher une stratégie de ressources

1.    Dans le volet de navigation de gauche de la console API Gateway, choisissez Resource Policy (Stratégie de ressources).

2.    Copiez cet exemple de stratégie de ressources et collez-le dans la zone de texte Resource Policy (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"]
        }
      }
    }
  ]
}

Remarque : si vous souhaitez plutôt bloquer l'accès pour certaines adresses IP et autoriser l'accès pour toutes les autres, consultez la stratégie de ressources dans Exemple : refuser le trafic API en fonction de l'adresse IP source ou de la plage.

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

["10.0.0.0/8", "192.168.0.0/16", "172.16.0.1/32"]

Remarque: aws:SourceIp fonctionne uniquement pour les plages d'adresses IP publiques. Pour autoriser l'accès à des plages d'adresses IP privées, utilisez aws:VpcSourceIp. Cette condition est valide pour les API privées. Pour plus d'informations, consultez aws:VpcSourceIp.

4.    Sélectionnez Enregistrer.

Déployer votre API

1.    Dans le volet Resources (Ressources) de la console API Gateway, choisissez Actions (Actions), puis Deploy API (Déployer l'API).

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

3.    Saisissez un nom dans le champ Stage name (Nom de l’étape). Par exemple, v1 ou démo.

4.    Choisissez Deploy (Déployer).

Remarque : si vous modifiez la stratégie de ressources après cela, veillez à redéployer votre API.

Tester la stratégie de ressources

1.    Dans le volet Stages (Étapes) de la console API Gateway, copiez Invoke URL (URL d'appel).

2.    Depuis un environnement avec une adresse IP autorisée ou sans adresse IP autorisée, effectuez un test de réponse HTTP 200. Utilisez curl à partir d'une interface de ligne de commande ou l'application Postman. Pour plus d'informations sur curl, consultez le site Web du projet curl.

Remarque : si vous n'avez pas encore accès à plusieurs environnements de test, vous pouvez configurer des instances Amazon Elastic Compute Cloud (Amazon EC2). Assurez-vous de spécifier l'adresse IP de toutes les instances auxquelles vous voulez autoriser l'accès dans votre stratégie de ressources de l'API. Ensuite, redéployez l'API.

Pour utiliser curl, exécutez l'une de ces commandes en remplaçant https://yourInvokeUrl/ par l'URL d'appel de votre API :

Dans un environnement Linux/Unix/macOS :

curl -IX GET https://yourInvokeUrl/

Dans Windows PowerShell :

curl https://yourInvokeUrl/

L'environnement autorisé reçoit une réponse HTTP 200 et celui refusé une erreur HTTP 403 Forbidden (HTTP 403 : accès refusé).