Skip to main content

Bonnes pratiques pour sécuriser une passerelle API

Écrit par

Kuria Macharia

feature api

7 septembre 2022

0 minutes de lecture

Les API sont un élément essentiel du paysage du développement actuel, en raison de leur importance dans les architectures de microservices. Comme les logiciels modernes se composent souvent de plusieurs microservices, certaines fonctionnalités peuvent dépasser le périmètre d’une API individuelle. Une passerelle API permet d’agréger ces services pour qu’ils se comportent comme une seule API et de renvoyer des réponses complexes issues de différents microservices au moyen d’un seul appel à la passerelle. Par exemple, avec une passerelle API et GraphQL, il est possible d’utiliser un schéma défini unique pour interroger des champs de données spécifiques dans différents microservices et obtenir une réponse unifiée.

Qu’est-ce qu’une passerelle API ?

Une passerelle API est une couche d’abstraction qui constitue généralement l’unique interface publique entre les microservices et les clients qui les utilisent. Elle agit comme un proxy pour les microservices back-end : elle fait le lien avec les points de terminaison de l’API accessibles aux clients, achemine leurs requêtes vers les microservices appropriés et agrège les données de réponse avant de les transmettre au client demandeur. Elle fournit une interface de programmation d’application cohérente qui simplifie le travail des développeurs front-end.

Les passerelles API présentent d’autres avantages, notamment :

Effectuer l’équilibrage de charge — Nous pouvons configurer une passerelle API pour répartir les requêtes entrantes des clients entre les instances de service disponibles.

Éliminer les allers-retours de requêtes — Une passerelle élimine les requêtes inutiles des clients, qui peuvent augmenter la latence et dégrader les performances. Ceux-ci peuvent envoyer une seule requête à la passerelle, qui la transmet à plusieurs services et agrège les réponses.

Centraliser le suivi de l’utilisation et l’analyse — Une passerelle API permet d’intégrer des outils de suivi et d’analyse pour collecter et étudier des données précieuses sur le trafic utilisateur, le temps d’exécution et les erreurs. Ces informations sont essentielles pour prendre des décisions concernant la mise à l’échelle et le débogage d’une application.

L’accès des API aux services back-end en fait une cible de choix pour les pirates malveillants qui cherchent à accéder à ces services ou à intercepter les données en transit. Une passerelle API constitue une barrière de sécurité entre les points de terminaison des microservices back-end et ceux des clients.

Dans cet article, nous examinons les avantages des passerelles API en matière de sécurité et les bonnes pratiques à suivre, ainsi que les mesures supplémentaires à prendre pour sécuriser nos passerelles API.

Comment une passerelle API renforce la sécurité

La sécurité est une préoccupation majeure pour les entreprises qui proposent leurs services sous forme d’API. Une passerelle API peut renforcer de plusieurs façons la sécurité des systèmes qui utilisent des points de terminaison d’API accessibles au public. Voici comment :

Application des politiques

Les politiques sont des règles à respecter pour accéder aux services sous-jacents et gérer le comportement de l’API. Une politique comprend deux éléments : une ou plusieurs règles à vérifier et l’action qui en découle. Les politiques sont appliquées au niveau de la passerelle API. Nous pouvons les personnaliser selon les besoins de différentes tâches, comme l’authentification et l’autorisation ou la gestion du trafic. La sérialisation JSON et d’autres formes de sérialisation des données en sont un bon exemple : nous pouvons les standardiser en un point d’entrée unique.

Protection contre la surcharge du trafic

Une passerelle API peut limiter le nombre d’appels à une API pendant une période donnée. Cela évite de dépasser la capacité de traitement des requêtes du back-end. Elle protège le système contre les attaques par déni de service (DoS), qui consistent à submerger les microservices back-end de trafic. Elle protège également l’API contre les attaques par force brute et les tentatives successives, qui reposent sur l’envoi de nombreuses requêtes avec différents identifiants.

Disjoncteurs

Un disjoncteur renforce la sécurité en sécurisant la connexion aux services back-end. Il interrompt les connexions au back-end pendant une période définie lorsqu’un nombre prédéfini d’échecs de connexion consécutifs est atteint. Cela évite de surcharger le back-end de requêtes vouées à l’échec. Cette mesure de protection automatique empêche les attaquants de provoquer des défaillances en cascade des API.

Découplage des services back-end et des applications front-end

Une passerelle API renforce la sécurité des services back-end sensibles en empêchant tout contact direct entre ceux-ci et les applications front-end. Elle limite également les informations dont le front-end dispose sur les microservices qui traitent ses requêtes. Le système est ainsi protégé contre les attaques par injection SQL, qui consistent à envoyer du code malveillant aux bases de données back-end. Limiter les informations accessibles sur le back-end complique les attaques par injection SQL, car les attaquants ne savent pas de quelle base de données proviennent les informations.

Bonnes pratiques pour sécuriser une passerelle API

Une passerelle API peut atténuer le risque d’attaques par injection en effectuant une validation élémentaire des entrées pour toutes les requêtes. Ainsi, les requêtes contenant des données suspectes sont rejetées avant d’atteindre les services back-end.

Les passerelles offrent d’excellentes capacités de sécurité, mais nous devons aussi agir de manière proactive pour sécuriser nos points de terminaison d’API et nos microservices. Voyons quelques bonnes pratiques pour créer une passerelle API sécurisée.

HTTPS et chiffrement des requêtes

Pour renforcer la sécurité d’une passerelle API, nous devons d’abord nous assurer que les communications avec les clients passent par HTTPS. HTTPS est un protocole sécurisé qui chiffre toutes les données en transit et renforce ainsi leur sécurité. C’est aujourd’hui la norme du secteur pour les sites web accessibles au public. Le protocole TLS est particulièrement important lors de la transmission de données sensibles, par exemple lors de la connexion à un service de messagerie, à un compte bancaire ou à un système d’entreprise à distance. Il permet également de confier la gestion du TLS au fournisseur de services cloud plutôt qu’au client.

Valider les requêtes API

Nous devons configurer une passerelle API pour valider les requêtes reçues des clients avant de les transmettre aux microservices back-end. Par exemple, nous pouvons lui faire vérifier qu’un paramètre ou un en-tête de requête n’est pas vide, ou que la charge utile respecte le schéma JSON autorisé.

Si la validation échoue, la passerelle API rejette la requête et renvoie une réponse d’erreur au client. Cela réduit le nombre de requêtes inutiles transmises au serveur et atténue le risque d’attaques par injection.

Configurer la journalisation

Nous devons activer la journalisation sur une passerelle API pour résoudre les problèmes d’accès des clients et d’exécution des requêtes. Une passerelle API effectue deux types de journalisation : celle des exécutions et celle des accès.

Les journaux d’exécution détaillent chaque étape suivie par une passerelle API lors du traitement d’une requête. Ils comprennent les traces d’exécution, les étapes de validation et les erreurs. Les journaux d’accès consignent chaque entrée dans la passerelle API. Chaque requête génère une entrée qui indique qui accède à la passerelle et de quelle manière.

Mettre en place une limitation du débit

Dans une passerelle API, nous devons mettre en place une limitation du débit pour :

  • Prévenir les attaques par déni de service (DoS)

  • Limiter les effets des défaillances en cascade

  • Limiter l’utilisation des ressources.

La limitation du débit sur la passerelle API protège nos microservices contre le trafic malveillant et les pics de trafic légitimes susceptibles de provoquer une défaillance du système. Une politique de régulation du trafic atténue les inconvénients d’une limitation stricte du débit en mettant en file d’attente les requêtes qui dépassent la limite, afin de les traiter dans le quota suivant. Nous pouvons appliquer des politiques de limitation du débit et de régulation à une ressource spécifique ou à toutes les requêtes.

Activer un pare-feu applicatif (WAF)

Nous pouvons protéger notre passerelle API à l’aide d’un pare-feu applicatif (WAF), qui limite l’accès à l’API selon un ensemble de conditions et de règles définies. Il contribue à protéger la passerelle API contre les menaces courantes, comme les attaques de script intersite et les attaques par injection.

Par exemple, nous pouvons utiliser un WAF pour autoriser ou refuser les requêtes provenant de blocs CIDR, de plages d’adresses IP ou de pays spécifiés. Il peut également détecter et rejeter les requêtes contenant des scripts ou du code SQL malveillants. La mise en place d’un WAF rapproche la barrière de sécurité du côté client et évite à la passerelle API des charges de travail inutiles.

Le WAF est un outil efficace de filtrage du contenu au niveau HTTP. L’agence américaine CISA l’a même recommandé parmi les solutions pour prévenir les attaques liées à la vulnérabilité Log4j. C’est aussi l’une des bonnes pratiques de Snyk pour remédier à Log4Shell.

Dédier des passerelles API

Nous devons créer des passerelles API distinctes en fonction de leurs cas d’utilisation afin de réduire la surface d’attaque potentielle et d’éviter toute exposition inutile des points de terminaison d’API. Le fait de dédier des passerelles API contribue également à limiter la propagation des problèmes en cas de défaillance ou de régulation d’une passerelle.

Par exemple, si une passerelle est attaquée, les services de l’ensemble du système ne seront pas tous mis hors service. Le débogage du système s’en trouve facilité, car la surface d’attaque est bien plus réduite.

Tirer le meilleur parti de votre passerelle API

La mesure la plus importante que nous puissions prendre pour protéger notre API consiste à mettre en place une passerelle API.

Elle découple les architectures de microservices de l’API accessible au public et nous permet d’interposer différentes barrières de sécurité. Ces barrières — notamment la limitation du débit, le WAF, HTTPS et la validation des requêtes — atténuent le risque d’attaques courantes contre les API, comme les injections SQL, les attaques de script intersite et les attaques par déni de service.

En respectant les bonnes pratiques — communications HTTPS, validation des requêtes, journalisation, limitation du débit, WAF et passerelles API dédiées —, nous réduisons le risque que des attaques contre les points de terminaison et les données en transit aboutissent. Pour en savoir plus, consultez notre page sur la sécurité des API.

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.