Geekflare est soutenu par son public. Nous pouvons percevoir des commissions d'affiliation sur les liens d'achat présents sur ce site.
En Développement et Sécurité Dernière mise à jour : 16 septembre 2023
Partager sur :
Invicti Web Application Security Scanner - la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

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

Outre des cycles de développement de logiciels plus courts, des équipes plus réduites et des options de langages de programmation flexibles, il vous permet de faire évoluer ou de dépanner certaines fonctions ou certains services sans interférer avec les autres composants.

En général, les microservices permettent de diviser de grandes applications monogames en services distincts pouvant être déployés de manière indépendante. Toutefois, ces services indépendants plus petits augmentent le nombre de composants, d'où la complexité et la difficulté de les sécuriser.

Architecture monolithique et microservices
Architecture monolithique ou microservices Image Redhat

En général, un déploiement typique de microservices comporte des couches de matériel, de service ou d'application, de communication, d'informatique en nuage, de virtualisation et d'orchestration. Chacune de ces couches présente des exigences, des contrôles et des défis spécifiques en matière de sécurité.

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, un trafic plus important à surveiller et une surface d'attaque plus grande. En outre, la plupart des microservices s'exécutent dans des environnements en nuage, dont les configurations et les contrôles de sécurité varient également.

En raison du grand nombre d'API, de ports et de composants qui sont exposéeEn conséquence, les pare-feux traditionnels peuvent ne pas offrir 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, DDoSet d'autres.

La sécurité du réseau est un autre défi posé par les microservices. En particulier, le contrôle de l'identité et de l'accès atteint un nouveau niveau de complexité. Parmi les autres vulnérabilités, citons les codes non sécurisés et les failles dans les systèmes de découverte des services.

Bien que la sécurisation des microservices soit plus difficile que celle des 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 à aborder sont les suivants

  • Protéger les applications, les microservices et les utilisateurs
  • Sécuriser la gestion des identités et des accès
  • Protéger les données
  • Renforcer la sécurité des communications entre services
  • Surveillance des microservices et des systèmes de sécurité

Meilleures pratiques pour sécuriser les microservices

L'une des meilleures stratégies consiste à utiliser une combinaison de bonnes pratiques, d'outils et de contrôles pour protéger l'ensemble de l'écosystème. L'approche réelle peut varier en fonction du type de services, d'applications, d'utilisateurs, de l'environnement et d'autres facteurs.

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.

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

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

Intégrer la sécurité dans le cycle de développement. Idéalement, intégrer la sécurité dans le développement et le déploiement des microservices dès le départ. Aborder la sécurité de cette manière est une approche facile, efficace et moins coûteuse que d'attendre que le développement du logiciel soit presque terminé pour l'ajouter.

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

Les Défense en profondeur (DiP) est une technique qui consiste à appliquer plusieurs couches de sécurité à vos services et à vos données. Cette pratique rend plus difficile la pénétration des attaquants à travers les multiples couches, assurant ainsi une sécurité solide pour vos services et vos données.

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

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

Avec cette approche, vous devez d'abord identifier les services sensibles, puis appliquer les couches de sécurité appropriées autour d'eux.

#3. Déployer la sécurité au niveau des conteneurs

Le plus souvent, les microservices s'appuient sur conteneur technologie. En tant que tel, la sécurisation des conteneurs, tant à l'intérieur qu'à l'extérieur, est un moyen de réduire la surface d'attaque et les risques. Idéalement, le principe de sécurité du moindre privilège est une bonne pratique et nécessite une combinaison de stratégies incluant, mais sans s'y limiter, les éléments suivants ;

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

Il est également essentiel de s'assurer que les images des conteneurs ne présentent pas de vulnérabilités ou de problèmes de sécurité. Une analyse régulière de la sécurité et de la vulnérabilité des conteneurs permettra d'identifier les risques.

Les outils de numérisation d'images les plus courants sont les suivants Clair, Ancreet bien d'autres choses encore.

#4. Déployer une authentification multifactorielle 🔒

L'activation de l'authentification multifactorielle renforce la sécurité de l'interface utilisateur.

Les utilisateurs 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 électronique spécifiée. Cette technique rend l'accès aux microservices plus difficile pour les attaquants, qui peuvent utiliser des informations d'identification volées ou piratées, puisqu'ils n'auront aucun moyen de fournir la deuxième authentification.

#5. Utiliser les jetons d'identité et d'accès des utilisateurs

Dans le cadre du déploiement de microservices, un grand nombre d'applications et de services nécessitent une autorisation et un contrôle d'accès sécurisé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 aux applications tierces d'accéder à d'autres services ou données des utilisateurs.

Dans un déploiement typique, l'application principale demandera à l'utilisateur d'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, la meilleure pratique consiste à utiliser le protocole OAuth. OAuth car elle est plus standard, plus stable et plus largement acceptée.

#6. Créer une passerelle API

En général, les microservices sont constitués de plusieurs composants répartis sur différents réseaux et accessibles à partir d'un large éventail de systèmes et de clients. L'exposition des microservices augmente les vulnérabilités et les risques de sécurité. L'un des moyens 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 examiner toutes les demandes entrantes afin de détecter 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. Elle limite alors 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, l'acheminement 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 la défense en profondeur.

Passerelle API microservices Image Livebook

Les passerelles API typiques sont les suivantes NGINX, Kong, Tyk, Ambassadeur, Passerelle API AWSet bien d'autres choses encore.

Pour en savoir plus sur la sécurité des API, consultez notre guide sur la sécurité des API. Pourquoi et comment sécuriser les points de terminaison des API.

#7. Profil des API en fonction de la zone de déploiement

Mettez en œuvre des restrictions basées sur les rôles en veillant à ce que les utilisateurs n'aient 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, le fait de limiter l'accès aux seuls utilisateurs autorisés réduit les risques. L'une des techniques permettant de réduire l'exposition consiste à étiqueter les API en fonction des utilisateurs qui devraient y avoir accès. En général, 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
  • Hybrid Zone APIs - pour les déploiements de centres de données

#8. Sécuriser les communications entre services

Les pratiques efficaces impliquent l'authentification et l'autorisation des demandes lorsque deux microservices communiquent.

En règle générale, trois techniques principales peuvent être utilisées pour sécuriser les communications interservices. Il s'agit des techniques suivantes Faire confiance au réseau, Jeton Web JSON (JWT), et Sécurité mutuelle de la couche transport (mTLSou TLS mutuel). 

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

Parmi les trois, le plus populaire est le mTLS. Dans cette approche, chaque microservice doit porter 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 destinataire via le mTLS.

Lors de l'authentification, chaque microservice génère un certificat. Par la suite, chaque microservice utilisera le certificat de l'autre pour s'authentifier.

TLS assure l'intégrité et la confidentialité des données en transit, mais 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. En revanche, le mTLS permet à chaque microservice d'identifier l'autre.

#9. Limitation du débit 🚏 du trafic des clients

La limitation du trafic externe permet d'éviter 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 permettant de surveiller et de 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 les inciterait probablement à renoncer à leur tentative d'accès aux services. Vous pouvez limiter le débit à l'aide de la passerelle API, du code ou de toute autre technique. En général, la plupart des environnements SaaS disposent d'une limitation du débit de l'API afin de minimiser les abus des utilisateurs ainsi que les attaques.

#10. Utiliser des gestionnaires d'orchestration

Les gestionnaires d'orchestrations vous permettent d'automatiser la configuration, la coordination et d'autres tâches de gestion des microservices, tout en renforçant la sécurité. En général, ces 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 disposent de fonctions 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 ;

  • Coder l'orchestration comme un microservice
  • Utiliser les 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 faire évoluer les services.

Couche d'orchestration des microservices
Couche d'orchestration des microservices - Image Globallogic

Les outils typiques de gestion de l'orchestration sont les suivants Kubernetes, Istio, Service Azure Kubernetes (AKS), etc.

Pour en savoir plus, explorez le site Orchestration de conteneurs pour DeOps.

#11. Surveillez tous vos systèmes et services

Comme 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 les risques de sécurité à temps. Pour ce faire, il existe un large éventail de solutions de surveillance des microservices, notamment Prométhée, Statsd, InfluxDB, Logstash, etc.

Visualisation Grafana prometheus

Surveillance au sein de l'architecture microservices

Utiliser les outils appropriés pour contrôler les systèmes et services internes. Voici quelques bonnes pratiques ;

  • Activer la journalisation au niveau de la couche d'application. Vous pouvez 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.
  • Contrôler les paramètres d'utilisation
  • Utiliser les tendances des mesures telles que l'unité centrale, la mémoire, les temps de réponse, les erreurs, les notifications et autres pour détecter des activités inhabituelles indiquant une attaque existante ou potentielle.
  • Vérifier les journaux dans des domaines tels que les demandes des clients entrants, les enregistrements de base de données, les conteneurs et autres, afin d'identifier les incohérences ou les activités inhabituelles.

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

Automatiser les processus de sécurité tels que le déploiement des mises à jour, l'analyse des vulnérabilités, contrôleIl s'agit de vérifier les mises à jour, d'appliquer les politiques et de mener d'autres activités. En outre, vérifiez les mises à jour pour vous assurer qu'elles sont sûres 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 aurait pu y avoir des vulnérabilités ou des problèmes de sécurité qui se sont produits auparavant.

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

Protéger les données en transit et au repos. Idéalement, imposer l'utilisation de HTTPS pour toutes les communications, afin de sécuriser les données en transit, et le cryptage 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 clair qui résident en dehors du code.

La meilleure stratégie consiste à utiliser des technologies standard pour crypter toutes les données sensibles le plus tôt possible. De même, décrypter les données le plus tard possible afin de 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 adapter leurs politiques et stratégies de sécurité internes à une approche plus nuageuse et distribuée.

Idéalement, il s'agit de réduire la surface d'attaqueLa protection de l'environnement des microservices, des API, des applications et des données.

  • Amos Kingatua
    Auteur
Merci à nos sponsors
D'autres lectures intéressantes sur le développement
Alimentez votre entreprise
Quelques outils et services pour aider votre entreprise à se développer.
  • Invicti utilise le Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, search engine crawler, et tout ce dont vous avez besoin pour collecter des données web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation tout-en-un qui vous aide à gérer vos projets, vos tâches, votre travail, vos ventes, votre CRM, vos opérations, vos flux de travail et bien plus encore.
    Essayez le lundi
  • Intruder est un scanner de vulnérabilité en ligne qui détecte les faiblesses de votre infrastructure en matière de cybersécurité, afin d'éviter des violations de données coûteuses.
    Essayer l'intrus