• Assurez la sécurité des applications de la bonne manière! Détectez, protégez, surveillez, accélérez et plus encore…
  • 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.

    En général, les microservices permettent de diviser 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é de les sécuriser.

    Architecture monolithique vs microservices
    Image d'architecture monolithique vs microservices Redhat

    En règle générale, un déploiement de microservices typique comprendra les couches matériel, service ou application, communication, cloud, virtualisation et orchestration. Chacun d'entre eux a des exigences, des contrôles et des défis de sécurité 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 fonctionnent 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é, les pare-feu 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 autres.

    La sécurité du réseau est un autre défi avec les microservices. En particulier, l'identité et le contrôle d'accès prennent un nouveau niveau de complexité. D'autres vulnérabilités incluent le code non sécurisé et les failles dans les 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
    • Protéger les données
    • Améliorez la sécurité des communications de service à service
    • 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 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, l'environnement et d'autres facteurs.

    Si vous décidez d'utiliser des microservices, vous devez vous assurer que vous répondez à toutes les demandes 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é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 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étriques telles que pare-feu, le concept de défense en profondeur est différent. Il s'appuie sur une combinaison d'outils tels que l'antivirus, le pare-feu, la gestion des correctifs, les logiciels anti-spam et autres pour fournir plusieurs couches de sécurité réparties dans tout le système.

    sécurité multicouche de défense en profondeur
    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éployez la sécurité au niveau du conteneur

    Le plus souvent, les microservices reposent sur récipient La technologie. A ce titre, la sécurisation des conteneurs, à la fois interne et externe, 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;

    • Limitation de l'autorisation au minimum requis
    • Évitez d'exécuter des services et quoi que ce soit d'autre en utilisant sudo ou comptes 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 de 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 de la vulnérabilité des conteneurs aidera à identifier les risques.

    Les outils de numérisation d'image typiques incluent Clair, Ancre, Et plus encore.

    # 4. Déployer une authentification multifacteur 🔒

    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, tel un code envoyé à leur téléphone ou une adresse e-mail spécifiée. La 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 pas le moyen de fournir la deuxième authentification.

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

    Dans le déploiement de microservices, un grand nombre d'applications et de services nécessiteront 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 à des applications tierces d'accéder à d'autres services ou données d'utilisateurs.

    Dans un déploiement typique, l'application principale invitera l'utilisateur à autoriser le service tiers. En acceptant cela, 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 depuis 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 à 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é. 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 depuis des systèmes externes et des clients.

    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 de gestion des demandes supplémentaires 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 également en charge le principe de sécurité de défense en profondeur.

    Image de la passerelle API Microservices Livebook

    Les passerelles API typiques incluent Nginx, Kong, Tyk, Ambassadeur, Passerelle d'API AWS, Et plus encore.

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

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

    Mettez en œuvre 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 à plus de personnes, limiter l'accès aux seuls utilisateurs autorisés réduit les risques. Une technique de réduction de 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 externe 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écurisez les communications de service à service

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

    En règle générale, il existe trois techniques principales que vous pouvez utiliser pour sécuriser les communications interservices. Voici les Faites confiance au réseau, Jeton Web JSON (JWT), et Sécurité de la couche de transport mutuel (mTLSor TLS mutuel). 

    Sécurisation de la communication interservices avec JWT
    Sécurisation des communications interservices avec JWT Image Livebook

    Sur les 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 de réception via le 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 à sens unique, un microservice de réception 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 les 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 débit du 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éder 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 par les 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 en plus d'améliorer la sécurité. Habituellement, 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:

    • Coder 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 lors de la mise à l'échelle des services.

    Couche d'orchestration des microservices
    Couche d'orchestration de microservice - Image Logique globale

    Les outils de gestion de l'orchestration typiques incluent Kubernetes, Istio, Service Azure Kubernetes (AKS), Etc.

    Pour en savoir plus, explorez le 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 les risques de sécurité en temps utile. Pour cela, il existe une large gamme de solutions de surveillance de microservices, y compris Prométhée, Statistiques, InfluxDB, Logstash, Etc.

    Visualisation Grafana prometheus

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

    Utilisez les outils appropriés pour surveiller les systèmes et services internes. Certaines meilleures pratiques comprennent:

    • Activez la journalisation au niveau de la couche application. Vous pouvez Splunk, Graphane, Pile ELKet d'autres outils qui collectent des journaux aux niveaux 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 clients entrantes, 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 de mises à jour, l'analyse de vulnérabilité, surveillance, appliquer les politiques et 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 aurait pu y avoir 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 cryptage pour toutes les données sensibles au repos. Évitez de transmettre et de stocker des mots de passe en texte brut, des clés, des informations d'identification et des données sensibles 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 plus, décryptez 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é interne vers une approche plus native et distribuée dans le cloud.

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