13 bonnes pratiques pour sécuriser les microservices

L’architecture des microservices offre flexibilité, évolutivité et possibilité de modifier, d’ajouter ou de supprimer des composants logiciels sans affecter les autres parties de l’application.

Outre des cycles de développement logiciel plus courts, des équipes plus petites et des options de langage de programmation flexibles, il vous permet de mettre à l’échelle ou de dépanner certaines fonctions ou services sans interférer avec les autres composants.

Généralement, les microservices permettent de décomposer de grandes applications monogames en services distincts déployables indépendamment. Cependant, ces petits services indépendants augmentent le nombre de composants d’où la complexité et la difficulté à les sécuriser.

Architecture monolithique vs microservices Image Chapeau rouge

Habituellement, un déploiement de microservices typique comprendra les couches matérielles, de service ou d’application, de communication, de cloud, de virtualisation et d’orchestration. Chacun d’entre eux a des exigences de sécurité, des contrôles et des défis spécifiques.

Défis de sécurité associés aux microservices

Les microservices sont généralement des systèmes largement distribués avec des règles d’accès complexes, plus de trafic à surveiller et une plus grande surface d’attaque. De plus, la plupart des microservices cloud s’exécutent sur des environnements cloud, qui ont également des configurations et des contrôles de sécurité variables.

En raison du grand nombre d’API, de ports et de composants exposés, les pare-feu traditionnels peuvent ne pas fournir une sécurité adéquate. Ces problèmes rendent les déploiements de microservices plus vulnérables à diverses cybermenaces telles que l’homme du milieu, les attaques par injection, les scripts intersites, les attaques DDoS, etc.

La sécurité du réseau est un autre défi avec les microservices. En particulier, le contrôle d’identité et d’accès prend un nouveau niveau de complexité. Parmi les autres vulnérabilités, citons le code non sécurisé et les failles des systèmes de découverte de services.

Bien que la sécurisation des microservices soit plus difficile que les applications monolithiques, vous pouvez les protéger efficacement en établissant une bonne stratégie et en suivant les meilleures pratiques.

Idéalement, l’architecture nécessite une approche distribuée qui devrait couvrir tous les différents composants.

Les domaines typiques à traiter comprennent

  • Protéger les applications, les microservices et les utilisateurs
  • Sécurisation de la gestion des identités et des accès
  • Protection des données
  • Améliorer la sécurité des communications de service à service
  • Surveillance des microservices et des systèmes de sécurité

Bonnes pratiques pour sécuriser les microservices

L’une des meilleures stratégies consiste à utiliser une combinaison de meilleures pratiques, d’outils et de contrôles pour protéger l’ensemble de l’écosystème. L’approche réelle peut différer selon le type de services, les applications, les utilisateurs, les facteurs environnementaux et autres.

Si vous décidez d’utiliser des microservices, vous devez vous assurer que vous répondez à toutes les exigences de sécurité pour les services, les connexions et les données.

Voyons maintenant quelques pratiques efficaces de sécurité des microservices.

#1. Construisez la sécurité dès le départ 👮

Intégrez la sécurité au cycle de développement. Idéalement, intégrez la sécurité dans le développement et le déploiement des microservices dès le début. Aborder la sécurité de cette manière est une approche simple, efficace et moins chère que d’attendre de l’ajouter lorsque le développement du logiciel est presque terminé.

#2. Utiliser le mécanisme de défense en profondeur

La Défense en Profondeur (DiP) est une technique où vous appliquez plusieurs couches de sécurité sur vos services et vos données. Cette pratique rend plus difficile pour les attaquants de pénétrer à travers les multiples couches, offrant ainsi une sécurité renforcée pour vos services et vos données.

Contrairement aux solutions de sécurité périmétrique telles que les pare-feu, le concept de défense en profondeur est différent. Il s’appuie sur une combinaison d’outils tels qu’un antivirus, un pare-feu, la gestion des correctifs, un logiciel anti-spam et autres pour fournir plusieurs couches de sécurité réparties dans tout le système.

Image de sécurité multicouche de défense en profondeur : Imperva

Avec cette approche, vous devez d’abord identifier les services sensibles, après quoi vous appliquez les couches de sécurité appropriées autour d’eux.

#3. Déployer la sécurité au niveau du conteneur 📦

Le plus souvent, les microservices reposent sur la technologie des conteneurs. Ainsi, sécuriser les conteneurs, tant à l’intérieur qu’à l’extérieur, est un moyen de réduire la surface d’attaque et les risques. Idéalement, viser le principe de sécurité du moindre privilège est une bonne pratique et nécessite une combinaison de stratégies comprenant, mais sans s’y limiter ;

  • Limiter l’autorisation au minimum requis
  • Évitez d’exécuter des services et toute autre chose en utilisant les comptes sudo ou privilégiés.
  • Limitez ou contrôlez l’accès et la consommation des ressources disponibles. Par exemple, limiter l’accès aux ressources du système d’exploitation par les conteneurs permet d’éviter le vol ou la compromission des données.
  • Ne stockez pas de secrets sur le disque du conteneur.
  • Utilisez des règles appropriées pour isoler l’accès aux ressources.

Il est également essentiel de s’assurer que les images de conteneurs ne présentent aucune vulnérabilité ou problème de sécurité. Une analyse régulière de la sécurité et des vulnérabilités des conteneurs aidera à identifier les risques.

Les outils de numérisation d’image typiques incluent Claire, Ancreet plus.

#4. Déployez une authentification multi-facteurs 🔒

L’activation de l’authentification multifacteur améliore la sécurité du front-end.

Les utilisateurs accédant devront fournir leur nom d’utilisateur et leur mot de passe en plus d’une autre forme de vérification, comme un code envoyé sur leur téléphone ou une adresse e-mail spécifiée. Cette technique rend plus difficile pour les attaquants, qui peuvent utiliser des informations d’identification volées ou piratées, d’accéder aux microservices, car ils n’auront aucun moyen de fournir la deuxième authentification.

#5. Utiliser les jetons d’identité et d’accès de l’utilisateur

Dans le déploiement de microservices, un grand nombre d’applications et de services nécessiteront une autorisation sécurisée et un contrôle d’accès. Un cadre d’autorisation tel que OAuth 2.0 et OpenID vous permet de traiter les jetons en toute sécurité, protégeant ainsi vos microservices. Par conséquent, cela permet à des applications tierces d’accéder à d’autres services ou données des utilisateurs.

Dans un déploiement typique, l’application principale invite l’utilisateur à autoriser le service tiers. Après acceptation, l’application génère un jeton d’accès pour la session.

En particulier, OAuth est l’une des stratégies les plus efficaces pour l’identité des utilisateurs et le contrôle d’accès. Bien qu’il existe plusieurs autres protocoles d’autorisation et que vous puissiez également créer le vôtre, il est recommandé d’utiliser le OAuth car est plus standard, stable et largement accepté.

#6. Créer une passerelle API

Généralement, les microservices sont constitués de plusieurs composants répartis sur différents réseaux et accessibles depuis un large éventail de systèmes et de clients. L’exposition des microservices augmente les vulnérabilités et les risques de sécurité. Une façon de les protéger consiste à créer un point d’entrée unique et sécurisé qui vous aide à centraliser tous les accès à partir de systèmes et de clients externes.

Pour ce faire, déployez une passerelle API pour filtrer toutes les demandes entrantes pour les problèmes de sécurité avant de les acheminer vers les microservices appropriés. La passerelle API se situe entre les applications clientes et les microservices. Il limite ensuite l’exposition des microservices tout en fournissant des fonctions supplémentaires de gestion des demandes telles que l’authentification, la terminaison SSL, la traduction de protocole, la surveillance, le routage des demandes, la mise en cache, etc.

Avec cette approche, la passerelle API achemine tous les services externes vers les microservices tout en prenant en charge le principe de sécurité de défense en profondeur.

Passerelle d’API de microservices Image Livebook

Les passerelles API typiques incluent NGINX, Kong, Tyk, Ambassadeur, Passerelle d’API AWSet plus.

Pour en savoir plus sur la sécurité des API, consultez notre guide Pourquoi et comment sécuriser le point de terminaison de l’API.

#sept. API de profil basées sur la zone de déploiement

Implémentez des restrictions basées sur les rôles en vous assurant que les utilisateurs n’ont accès qu’aux API et aux services dont ils ont besoin. Étant donné que la plupart des logiciels malveillants exposent souvent un service à un plus grand nombre de personnes, limiter l’accès aux seuls utilisateurs autorisés réduit les risques. Une technique pour réduire l’exposition consiste à étiqueter les API en fonction des utilisateurs qui devraient y avoir accès. Généralement, les API peuvent être ;

  • API Ethernet – Pour les services exposés au monde extérieur en dehors du centre de données.
  • API de la zone d’entreprise – elles sont destinées au trafic privé interne
  • API DMZ – pour gérer le trafic provenant d’Internet
  • API de zone hybride – pour les déploiements de centres de données

#8. Sécuriser les communications de service à service

Les pratiques efficaces impliquent l’authentification et l’autorisation des requêtes lorsque deux microservices communiquent.

Généralement, il existe trois techniques principales que vous pouvez utiliser pour sécuriser les communications interservices. Il s’agit de Trust the network, JSON Web Token (JWT) et Mutual Transport Layer Security (mTLS, ou Mutual TLS).

Sécuriser les communications inter-services avec JWT Image Livebook

Des trois, le plus populaire est le mTLS. Dans cette approche, chaque microservice doit transporter une paire de clés publique/privée. Le microservice client utilise ensuite la paire de clés pour s’authentifier auprès du microservice récepteur via mTLS.

Lors de l’authentification, chaque microservice génère un certificat. Ensuite, chaque microservice utilisera le certificat de l’autre pour s’authentifier.

Bien que TLS assure l’intégrité et la confidentialité des données en transit, il permet également au client d’identifier un microservice. Le microservice client connaît généralement l’autre microservice. Cependant, comme TLS est unidirectionnel, un microservice récepteur ne peut pas vérifier le microservice client, et les attaquants peuvent exploiter cette faille. D’autre part, le mTLS fournit un moyen dans lequel chacun des microservices peut identifier l’autre.

#9. Limite de débit 🚏 trafic client

La limitation du trafic externe évite des problèmes tels que les attaques par déni de service (DoS) ainsi que les cas où certains clients consomment la majeure partie de la bande passante de l’application. Une approche consiste à appliquer diverses règles qui peuvent surveiller et contrôler le taux de trafic envoyé ou reçu d’un client en fonction de l’adresse IP, de l’heure, etc.

Configurez vos services pour qu’ils ralentissent s’ils détectent plusieurs tentatives de connexion infructueuses à vos API ou toute autre activité suspecte.

Un système lent découragerait les attaquants et renoncerait probablement à leur tentative d’accès aux services. Vous pouvez limiter le taux à l’aide de la passerelle API, via le code ou toute autre technique. Habituellement, la plupart des environnements SaaS ont une limitation de débit API pour minimiser les abus des utilisateurs ainsi que les attaques.

#dix. Utiliser les gestionnaires d’orchestration

Les gestionnaires d’orchestration vous permettent d’automatiser la configuration, la coordination et d’autres tâches de gestion des microservices en plus d’améliorer la sécurité. Généralement, les outils vous permettent de gérer plusieurs conteneurs, de limiter l’accès aux métadonnées, de séparer les charges de travail, de collecter des journaux, etc.

Certains outils d’orchestration ont des fonctionnalités supplémentaires qui permettent aux développeurs de stocker et de partager des informations sensibles telles que les certificats SSL, les clés de chiffrement, les mots de passe et les jetons d’identité.

Les deux méthodes couramment utilisées pour une orchestration efficace des microservices sont ;

  • Codage de l’orchestration en tant que microservice
  • Utilisation des passerelles API pour fournir une couche d’orchestration

L’orchestration via la passerelle API n’est pas recommandée en raison des difficultés rencontrées lorsqu’il est nécessaire de mettre à l’échelle les services.

Couche d’orchestration des microservices – Image Globallogic

Les outils de gestion d’orchestration typiques incluent Kubernetes, Istio, Service Azure Kubernetes (AKS)etc.

Pour en savoir plus, explorez l’orchestration de conteneurs pour DeOps.

#11. Surveillez tous vos systèmes et services

Étant donné que les microservices reposent sur des systèmes distribués, vous devez disposer d’une stratégie de surveillance fiable et efficace pour tous les composants individuels.

Le déploiement d’une surveillance continue vous permet de détecter et de traiter à temps les risques de sécurité. Pour cela, il existe une large gamme de solutions de surveillance des microservices, y compris Prométhée, Statistiques, InfluxDB, Logstashetc.

Surveillance à l’intérieur de l’architecture des microservices

Utiliser les outils appropriés pour surveiller les systèmes et services internes. Certaines meilleures pratiques incluent;

  • Activez la journalisation au niveau de la couche d’application. Tu peux Splunk, Graphana, Pile ELKet d’autres outils qui collectent des journaux au niveau de l’application, du conteneur, du réseau et de l’infrastructure.
  • Surveiller les métriques d’utilisation
  • Utilisez les tendances des métriques telles que le processeur, la mémoire, les temps de réponse, les erreurs, les notifications et autres pour détecter les activités inhabituelles indiquant une attaque existante ou potentielle.
  • Auditez les journaux dans des domaines tels que les demandes entrantes des clients, les enregistrements de base de données, les conteneurs et autres pour identifier les incohérences ou les activités inhabituelles.

#12. Automatisez les activités de sécurité

Automatisez les processus de sécurité tels que le déploiement des mises à jour, l’analyse des vulnérabilités, la surveillance, l’application des politiques et d’autres activités. De plus, vérifiez les mises à jour pour vous assurer qu’elles sont sécurisées et qu’elles n’introduisent pas de nouvelles vulnérabilités.

Après les mises à jour, le logiciel de sécurité devrait idéalement effectuer des tests sur tous les conteneurs et microservices pour voir s’il pourrait y avoir eu des vulnérabilités ou des problèmes de sécurité qui se sont produits auparavant.

#13. Protégez les données 🛡️ à tout moment

Protégez les données en transit et au repos. Idéalement, imposez l’utilisation de HTTPS pour toutes les communications, pour sécuriser les données en transit, et le chiffrement pour toutes les données sensibles au repos. Évitez de transmettre et de stocker des mots de passe, des clés, des informations d’identification et des données sensibles en texte brut qui résident en dehors du code.

La meilleure stratégie consiste à utiliser des technologies standard pour chiffrer toutes les données sensibles le plus tôt possible. Décryptez également les données le plus tard possible pour réduire l’exposition.

Conclusion

Les microservices s’appuient sur des composants distribués pour offrir des avantages tels qu’une plus grande flexibilité et des options de déploiement. Cependant, lors de l’utilisation des microservices, les organisations doivent ajuster les politiques et stratégies de sécurité internes vers une approche plus distribuée et native du cloud.

Idéalement, visez à réduire la surface d’attaque, en protégeant l’environnement des microservices, les API, les applications et les données.