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

Date de la dernière mise à jour : 08/12/2020

Je souhaite autoriser l'accès à mon API REST Amazon API Gateway pour certaines adresses IP, 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 REST qui refuse l'accès à toute adresse IP qui n'est pas explicitement autorisée. Les utilisateurs qui appellent l'API REST à partir d'adresses IP spécifiées (utilisateurs autorisés) peuvent accéder à l'API REST. Les appels à partir de toute autre adresse IP se voient refuser l'accès et obtiennent une erreur HTTP 403 : Accès refusé.

Résolution

Remarque : Pour les instructions suivantes, utilisez votre API REST API Gateway ou créez un exemple d'API REST pour les tests. Si vous utilisez l'exemple d'API (PetStore) pour cette configuration, passez à Créer et attacher une stratégie de ressources.

Configurer une méthode d'API

  1. Ouvrez la console API Gateway, puis choisissez votre API REST.
  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 / resource (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 aidera plus tard à 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 l'exemple de stratégie de ressource suivant et collez-le dans la zone de texte Resource Policy (Stratégie de ressources).

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"]
        }
      }
    }
  ]
}

Remarque : pour 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 REST :

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. L'environnement refusé reçoit une erreur HTTP 403 Interdit.