Read in English · Leer en español · Auf Deutsch lesen
Section 8.5 sur 8.8 · Avancé · 22 min de lecture
Communication sécurisée et zero trust
Leçon vidéo
5 min · narré en anglais, avec sous-titresÉcouter seulement (audio)
Lire la transcription
Pendant des décennies, tout ce qui se trouvait dans le réseau de l’entreprise était considéré comme amical. Cette leçon explique pourquoi cela a cessé de fonctionner, et ce que le zero trust met à la place.
Imaginez un hôtel où la réception vérifie votre identité une seule fois, puis vous remet une clé qui ouvre toutes les chambres. Si un voleur passe la réception, toutes les chambres lui sont ouvertes. Un meilleur hôtel vous donne une carte-clé qui n’ouvre que votre chambre, uniquement pour les nuits que vous avez réservées. Et elle enregistre chaque porte qu’elle ouvre. Le zero trust applique cette seconde idée au logiciel. Chaque personne et chaque programme doit prouver qui il est, et être autorisé à faire cette action précise, à chaque fois.
L’ancien modèle, c’était un château entouré de douves. Un pare-feu tenait internet à distance, et les services à l’intérieur s’appelaient sans authentification, car le réseau lui-même tenait lieu d’identifiant. Mais un seul e-mail d’hameçonnage ou un seul mot de passe volé place un attaquant à l’intérieur des douves. De là, il se déplace de machine en machine. C’est ce qu’on appelle le mouvement latéral. L’intérieur s’est aussi dissous. Les charges de travail tournent désormais sur plusieurs comptes cloud, des services externes et des API de partenaires, si bien qu’il n’y a plus de mur unique à défendre. Et il est devenu dynamique. Des conteneurs apparaissent et disparaissent à chaque minute, et les adresses réseau sont réutilisées, si bien que des règles de pare-feu écrites en adresses ne décrivent rien de stable.
La définition de référence vient du NIST, et date de 2020. Aucune confiance implicite n’est accordée à un utilisateur ou à un actif sur la seule base de sa place sur le réseau, ou de son propriétaire. Toutes les communications sont sécurisées, même à l’intérieur du centre de données. L’accès est accordé par session, avec le moindre privilège, et décidé par une politique dynamique. Le slogan : ne jamais faire confiance, toujours vérifier.
Voici le mécanisme que décrit le NIST. Un sujet, qui peut être un utilisateur ou une charge de travail, n’atteint une ressource qu’en passant par un point d’application de politique. Rien n’est considéré comme fiable en raison de l’endroit du réseau d’où il vient. Le point d’application interroge le point de décision de politique. Son moteur de politique décide, accorder ou refuser, et son administrateur de politique ouvre ou ferme la session. La décision s’appuie sur le fournisseur d’identité, l’état de l’appareil, le renseignement sur les menaces, la politique d’accès et les journaux d’activité. Pour un architecte, les questions sont de savoir où placer les points d’application pour qu’aucun chemin ne les contourne, et comment garder des décisions rapides et disponibles. Si le point de décision est injoignable, la réponse normale est le refus.
Le zero trust entre services exige le chiffrement et une identité forte aux deux extrémités de chaque appel. Le HTTPS ordinaire ne prouve que l’identité du serveur. Avec le TLS mutuel, le service appelant présente lui aussi un certificat, et le serveur sait ainsi quelle charge de travail l’appelle. Les adresses réseau sont de piètres identités pour des conteneurs. Un standard ouvert donne à chaque charge de travail une identité nommée, à courte durée de vie et renouvelée automatiquement, si bien qu’une règle peut dire que les commandes peuvent appeler les paiements, au lieu de désigner des adresses. Un service mesh peut automatiser tout cela, pour un coût d’exploitation réel. Et chaque certificat doit être renouvelé automatiquement. Les certificats expirés sont l’une des causes les plus courantes de pannes évitables, et la durée de vie des certificats publics raccourcit fortement.
Avant, sur un réseau interne plat, n’importe quel hôte peut atteindre n’importe quel port, et tous les services partagent une seule base de données. Quand le service Carte est compromis, il peut atteindre directement les paiements. Après, chaque service a ses propres données, et seules des identités nommées peuvent faire des appels autorisés. Commandes appelle Paiements en TLS mutuel, avec une politique. Le service Carte compromis tente le même appel, et il est refusé. Le zero trust n’empêche pas un service d’être compromis. Il limite ce que ce service peut atteindre.
Voici comment la vingtaine de services de la plateforme sont passés au zero trust, par étapes qui peuvent chacune être annulées. D’abord, observer le trafic réel. Cela a révélé une surprise : le traitement d’analytique lisait directement la base de données des paiements. Ensuite, donner à chaque service sa propre identité, et remplacer le compte de base de données partagé par un identifiant par service. Troisièmement, activer le TLS mutuel strict une partie du système à la fois, en commençant par la moins risquée. Quatrièmement, rédiger des règles d’autorisation à partir des appels observés. Les faire tourner en mode audit pendant deux semaines, examiner ce qui serait refusé, puis les appliquer. Cinquièmement, placer les outils du personnel derrière un proxy tenant compte de l’identité, qui vérifie la personne et l’appareil, et couper le réseau privé virtuel. Sixièmement, maintenir le tout dans la durée : le build échoue si un nouveau service n’a pas de politique. Remarquez l’ordre : observer avant d’appliquer, l’identité avant la politique, l’audit avant le refus.
La section complète présente les sept principes du NIST, BeyondCorp de Google, et ce qu’une API gateway peut et ne peut pas faire. Ensuite, dans la section huit point six, nous verrons la sécurité de votre chaîne d’approvisionnement logicielle. À très vite.
Ce qu’il faut savoir
- Le modèle périmétrique fait confiance à tout ce qui se trouve dans le réseau : un seul identifiant volé ou une seule machine compromise permet donc un mouvement latéral ; le cloud, le mobile et le travail à distance ont en outre supprimé tout périmètre unique à défendre.
- NIST SP 800-207 (août 2020) définit le zero trust comme le fait de n’accorder aucune confiance implicite fondée sur l’emplacement réseau ou la propriété, avec sept principes, dont la sécurisation de toutes les communications, l’accès par session et une politique dynamique appliquée strictement.
- Un point d’application de politique placé devant chaque ressource interroge un point de décision de politique (moteur de politique et administrateur de politique), qui décide en fonction de l’identité, de la posture de l’appareil ou de la charge de travail, du renseignement sur les menaces et de la politique.
- BeyondCorp, chez Google (2014), a appliqué le zero trust à l’accès du personnel avec un inventaire des appareils, un proxy d’accès et des niveaux de confiance, et a supprimé le réseau de bureau privilégié et le VPN.
- Le TLS mutuel apporte à chaque appel de service le chiffrement et une identité vérifiée aux deux extrémités ; SPIFFE normalise des identités de charge de travail à courte durée de vie, et les service meshes automatisent le mTLS et la politique par appel, pour un coût d’exploitation réel.
- Les certificats doivent être émis et renouvelés automatiquement (ACME, RFC 8555), d’autant que la durée de vie des certificats TLS publics descend à 200 jours en 2026, 100 jours en 2027 et 47 jours en 2029.
- Les API gateways authentifient les jetons, limitent le débit et valident les entrées, mais l’autorisation au niveau des objets doit toujours avoir lieu dans le service qui possède les données.
Pourquoi le périmètre réseau a cessé de fonctionner
Pendant des décennies, la plupart des organisations ont protégé leurs systèmes comme un château entouré de douves. Un pare-feu séparait l’intérieur de confiance de l’internet non fiable, le personnel se connectait à l’intérieur par un réseau privé virtuel (VPN), et tout ce qui se trouvait déjà à l’intérieur était considéré comme amical. Les services du centre de données s’appelaient les uns les autres en HTTP simple, sans authentification, car le réseau lui-même tenait lieu d’identifiant. Le chapitre 6 rangeait le réseau est sécurisé
parmi les illusions de l’informatique distribuée ; le modèle périmétrique est cette illusion transformée en architecture.
Trois évolutions l’ont mis en échec. D’abord, l’intérieur est devenu trop vaste pour être défendu : les ordinateurs portables voyagent, le personnel travaille depuis chez lui, des partenaires se connectent, et un seul e-mail d’hameçonnage (phishing) ou un seul mot de passe VPN volé place un attaquant à l’intérieur des douves. Une fois là, l’attaquant se déplace de machine en machine, ce qu’on appelle le mouvement latéral. Lors de la violation de 2013 chez le distributeur américain Target, les attaquants ont d’abord utilisé des identifiants réseau volés à un sous-traitant en chauffage et ventilation, puis ont atteint de là les terminaux de paiement, emportant les données d’environ 40 millions de cartes. Ensuite, l’intérieur s’est dissous : les charges de travail tournent désormais sur plusieurs comptes cloud, des produits SaaS et des API tierces, si bien qu’il n’existe plus de mur unique sur lequel poser un pare-feu. Enfin, l’intérieur est devenu dynamique : des conteneurs apparaissent et disparaissent à chaque minute et les adresses IP sont réutilisées, si bien que des règles écrites sous la forme autoriser 10.0.4.0/24 à joindre 10.0.7.12 ne décrivent rien de stable.
L’idée qu’il faut abandonner le périmètre est plus ancienne que son nom. Le Jericho Forum, un groupe de responsables de la sécurité d’entreprises, plaidait pour la dépérimétrisation dès 2004 ; John Kindervag, alors analyste chez Forrester Research, a forgé l’expression zero trust vers 2010 ; et les articles de Google sur BeyondCorp, à partir de 2014, ont montré que l’approche fonctionnait à grande échelle. Le slogan est ne jamais faire confiance, toujours vérifier : aucune requête n’est considérée comme fiable en raison de sa provenance.
Le zero trust selon la définition du NIST
Le texte de référence est la publication spéciale 800-207 du NIST, Zero Trust Architecture, parue en août 2020 (Rose, Borchert, Mitchell et Connelly). Elle décrit le zero trust (confiance zéro) comme un ensemble de principes qui déplacent les défenses de périmètres statiques, fondés sur le réseau, vers les utilisateurs, les actifs et les ressources, et une architecture zero trust comme le plan d’une organisation pour les appliquer. Son affirmation centrale est qu’aucune confiance implicite n’est accordée à un actif ou à un compte utilisateur sur la seule base de son emplacement physique ou réseau, ni de son propriétaire. L’authentification et l’autorisation sont des fonctions distinctes, exécutées avant l’établissement d’une session vers une ressource.
La publication énonce sept principes. Ils méritent d’être connus dans leur formulation propre, car de nombreux produits se disent zero trust alors qu’ils n’en respectent qu’un ou deux.
Les sept principes de NIST SP 800-207, appliqués à la plateforme de livraison de repas
| Principe (reformulé) | Ce que cela signifie | Exemple de livraison de repas |
|---|---|---|
| 1. Toutes les sources de données et tous les services informatiques sont des ressources | Un ordinateur portable, un conteneur, un outil SaaS et une base de données sont tous à protéger, pas seulement les serveurs du centre de données. | Le backend de l’app du livreur, l’API des tablettes des restaurants et le bucket d’analytique sont chacun des ressources dotées de leur propre politique. |
| 2. Toutes les communications sont sécurisées, quel que soit l’emplacement réseau | Le trafic à l’intérieur du centre de données bénéficie du même chiffrement et de la même authentification que le trafic qui passe par internet. | Commandes appelle Paiements en TLS mutuel, alors même que les deux tournent dans le même cluster. |
| 3. L’accès est accordé par session | La confiance est évaluée pour chaque session avec le moindre privilège nécessaire, et l’accès à une ressource ne donne accès à rien d’autre. | La session d’un agent du support peut lire l’historique des commandes d’un client ; elle ne peut pas atteindre en plus l’API des remboursements. |
| 4. L’accès est décidé par une politique dynamique | La décision s’appuie sur l’identité, l’état de l’appareil ou de la charge de travail et d’autres attributs comme l’heure, le lieu et le comportement. | Un remboursement au-delà d’un certain montant depuis un ordinateur portable non géré est refusé ; la même demande depuis un appareil géré, avec une MFA récente, est acceptée. |
| 5. L’entreprise surveille l’intégrité et la posture de sécurité de tous les actifs | Aucun appareil ni aucune charge de travail n’est fiable par défaut ; son niveau de correctifs, sa configuration et son intégrité sont mesurés en continu. | Une image de conteneur sans signature valide, ou présentant une CVE critique non corrigée, n’est pas admise dans le cluster. |
| 6. L’authentification et l’autorisation sont dynamiques et strictement appliquées avant tout accès | L’identité est vérifiée avant chaque accès et revérifiée au cours des longues sessions ; les identifiants ont une courte durée de vie et font l’objet d’une rotation. | Les certificats des services vivent quelques heures et sont renouvelés automatiquement ; les sessions des utilisateurs sont réévaluées quand le risque change. |
| 7. L’entreprise recueille autant d’informations que possible sur l’état des actifs, du réseau et des communications | La télémétrie alimente en retour la politique, de sorte que les décisions s’améliorent avec le temps. | Les journaux d’accès de la passerelle, du service mesh et du fournisseur d’identité alimentent la plateforme de supervision de la sécurité. |
Points de décision et d’application de politique
SP 800-207 décrit ce mécanisme à l’aide d’un petit ensemble de composants logiques. Un point d’application de politique (PEP) se place devant une ressource et ne laisse passer le trafic que sur instruction : en pratique, un proxy tenant compte de l’identité (identity-aware proxy), une API gateway, un sidecar de service mesh ou un proxy de base de données. Le point de décision de politique (PDP) prend la décision. Le NIST le divise en un moteur de politique, qui évalue la requête au regard de la politique et des données d’entrée et décide, et un administrateur de politique, qui exécute la décision en ouvrant ou en fermant le chemin, par exemple en émettant un jeton de session à courte durée de vie ou en configurant le PEP. Les données d’entrée comprennent le fournisseur d’identité, la posture de l’appareil et de la charge de travail (niveau de correctifs, configuration, intégrité), le renseignement sur les menaces, les politiques d’accès elles-mêmes et les journaux d’activité.
Séparer la décision de l’application est le même geste que séparer la politique du mécanisme dans les systèmes d’exploitation, et il est payant pour la même raison : les politiques peuvent être écrites une seule fois, revues, testées et modifiées de manière centralisée, tandis que l’application est répartie partout où circule le trafic. Les moteurs de politique de la section 8.3, comme Open Policy Agent, sont souvent le moteur qui se trouve derrière un PDP. La question de conception pour un architecte est de savoir où placer les points d’application pour qu’aucun chemin ne les contourne, et comment garder la décision rapide et disponible, car un PDP sur le chemin critique de chaque requête devient une dépendance avec son propre budget de disponibilité et de latence. Les réponses courantes consistent à mettre les décisions en cache pendant quelques secondes, à pousser des politiques compilées vers le PEP pour qu’il puisse décider localement, et à décider à l’avance de ce qui se passe si le PDP est injoignable (normalement refuser, avec une courte liste d’autorisations pour les contrôles de santé).
Les composants logiques d’une architecture zero trust
BeyondCorp : le zero trust pour les personnes
Google a commencé à abandonner son réseau d’entreprise privilégié après l’intrusion de 2009 connue sous le nom d’Opération Aurora, et en a décrit le résultat dans BeyondCorp: A New Approach to Enterprise Security (Rory Ward et Betsy Beyer, ;login:, décembre 2014), suivi de plusieurs autres articles. La conception comporte trois parties principales. Chaque appareil est enregistré dans un inventaire des appareils et identifié par un certificat. Un proxy d’accès, joignable depuis internet, se place devant chaque application interne ; les employés atteignent les applications à travers lui depuis n’importe quel réseau, y compris le réseau du bureau, qui ne bénéficie d’aucun privilège particulier. Un composant d’inférence de confiance combine l’identité de l’utilisateur et l’état de l’appareil pour attribuer un niveau de confiance, et chaque application déclare le niveau minimal qu’elle exige.
La conséquence qui a surpris a été la suppression du VPN : un employé dans un café et un employé à son bureau passent par les mêmes contrôles. L’idée est aujourd’hui vendue sous forme de produits appelés identity-aware proxy (proxy tenant compte de l’identité) et accès réseau zero trust (ZTNA). Le Zero Trust Maturity Model de l’agence américaine de cybersécurité et de sécurité des infrastructures (CISA) (version 2.0, avril 2023) est un outil d’autoévaluation utile : il note cinq piliers (identité, appareils, réseaux, applications et charges de travail, et données) de « traditionnel » à « optimal », avec la visibilité, l’automatisation et la gouvernance en transversal.
TLS mutuel, certificats et identité de charge de travail
Le zero trust entre services exige deux choses à chaque appel : le chiffrement, et une identité forte pour les deux extrémités. Transport Layer Security assure les deux. TLS 1.3 (RFC 8446, août 2018) achève sa poignée de main en un seul aller-retour : le client envoie les algorithmes qu’il prend en charge et une part de clé, le serveur répond avec sa part de clé et son certificat, et tous deux dérivent des clés de session par Diffie-Hellman éphémère, de sorte que chaque session bénéficie de la confidentialité persistante (forward secrecy : une clé de serveur volée ne permet pas de déchiffrer un trafic passé enregistré). TLS 1.3 a supprimé les options faibles des versions antérieures, dont l’échange de clés RSA, les chiffrements en mode CBC, RC4, les signatures SHA-1, la compression et la renégociation ; TLS 1.0 et 1.1 ont été formellement dépréciés par la RFC 8996 en 2021. Un mode facultatif sans aller-retour (0-RTT) permet à un client qui revient d’envoyer des données immédiatement, mais ces données précoces peuvent être rejouées par un attaquant : il faut donc les limiter aux requêtes idempotentes. Les principaux navigateurs et fournisseurs cloud ont aussi commencé à utiliser un échange de clés hybride post-quantique qui combine X25519 et ML-KEM (normalisé par le NIST sous le nom FIPS 203 en 2024), ce qui protège le trafic enregistré aujourd’hui contre un futur ordinateur quantique.
Un certificat lie une clé publique à un nom et est signé par une autorité de certification (CA) ; le client vérifie la chaîne de signatures jusqu’à une racine en laquelle il a déjà confiance. Ce système de CA, de certificats, de magasins de confiance et de révocation est une infrastructure à clés publiques (PKI). Les certificats publics sont aussi inscrits dans des journaux Certificate Transparency, si bien qu’un certificat émis à tort pour votre domaine peut être repéré. Le HTTPS ordinaire n’authentifie que le serveur. Avec le TLS mutuel (mTLS), le client présente lui aussi un certificat, et le serveur apprend ainsi quelle charge de travail l’appelle. Les certificats internes proviennent d’une CA privée gérée par l’organisation, en général au sein de sa plateforme de secrets ou de service mesh, car les CA publiques n’émettent pas de certificats pour des noms internes.
Quel nom mettre dans le certificat ? Les noms d’hôte et les adresses IP sont de piètres identités pour des conteneurs. SPIFFE (Secure Production Identity Framework for Everyone, projet diplômé de la Cloud Native Computing Foundation) normalise l’identité de charge de travail : chaque charge de travail reçoit une URI comme spiffe://fooddelivery.example/ns/prod/sa/orders et un SPIFFE Verifiable Identity Document à courte durée de vie, soit un certificat X.509 pour le mTLS, soit un JWT. Son implémentation de référence, SPIRE, atteste une charge de travail (vérifie de quel compte de service Kubernetes ou de quelle instance cloud il s’agit réellement) avant d’émettre le document, et en assure la rotation automatiquement, en général toutes les heures environ. Les règles d’autorisation peuvent alors dire orders peut appeler payments au lieu de désigner des adresses.
Les service meshes
Implémenter le mTLS, la rotation des certificats, les nouvelles tentatives et l’autorisation par appel dans chaque service, dans chaque langage, coûte cher et donne des résultats incohérents. Un service mesh (maillage de services) déplace ce travail dans l’infrastructure. Dans la conception classique, chaque instance de service reçoit un proxy sidecar (Envoy dans Istio, un micro-proxy en Rust dans Linkerd) qui intercepte son trafic ; un plan de contrôle émet les identités, distribue les politiques et collecte la télémétrie. Des conceptions plus récentes sans sidecar, comme le mode ambient d’Istio, confient le mTLS à un proxy partagé par nœud et n’ajoutent un proxy distinct que là où une politique au niveau HTTP est nécessaire. NIST SP 800-207A (septembre 2023) décrit ce patron comme la manière d’appliquer le zero trust aux applications cloud native : une segmentation fondée sur l’identité, avec des politiques appliquées par le service mesh à chaque appel.
Un service mesh est une décision de plateforme importante. Il ajoute de la latence à chaque saut (généralement faible, mais mesurable au p99), de la mémoire par pod, un plan de contrôle qui doit lui-même être hautement disponible et sécurisé, et une courbe d’apprentissage pour chaque équipe. Il ne protège en outre que le trafic qui le traverse : un traitement qui se connecte directement à la base de données le contourne. Les petits systèmes de quelques services s’en sortent souvent mieux avec un mTLS fourni par une bibliothèque ou par les équilibreurs de charge de la plateforme. Les questions décisives sont le nombre de services et de langages que vous avez, et l’existence ou non d’une équipe plateforme pour l’exploiter (voir la section 10.7).
Automatiser les certificats
Les certificats expirent, et les certificats expirés sont l’une des causes les plus courantes de pannes évitables. Le 6 décembre 2018, un certificat expiré dans un logiciel Ericsson utilisé par l’opérateur mobile britannique O2 a privé environ 32 millions de clients de données mobiles pendant la majeure partie d’une journée. Le remède est l’automatisation. Le protocole ACME (Automatic Certificate Management Environment, RFC 8555, 2019), développé pour l’autorité de certification Let’s Encrypt, permet à un logiciel de prouver qu’il contrôle un domaine (en servant un jeton en HTTP, en ajoutant un enregistrement DNS ou en répondant à un défi TLS), d’obtenir un certificat et de le renouveler sans intervention humaine. Let’s Encrypt, une CA gratuite et à but non lucratif qui a commencé à émettre des certificats en 2015, a fait des certificats à courte durée de vie renouvelés automatiquement la norme ; des outils comme cert-manager font de même dans Kubernetes, et tous les grands équilibreurs de charge cloud peuvent gérer les certificats pour vous.
L’automatisation n’est plus facultative. En vertu du vote SC-081 du CA/Browser Forum, la durée de vie maximale des certificats TLS reconnus publiquement est passée à 200 jours pour les certificats émis à partir du 15 mars 2026, et passera à 100 jours à partir du 15 mars 2027 et à 47 jours à partir du 15 mars 2029. Des durées de vie courtes limitent les dégâts d’une clé volée et réduisent la dépendance à la révocation, qui a toujours mal fonctionné. Sur le plan de l’architecture, cela signifie que chaque certificat, public ou interne, a besoin d’un propriétaire, d’un renouvellement automatisé, d’une surveillance des dates d’expiration avec des alertes bien avant l’échéance, et d’une procédure manuelle de secours répétée.
Segmentation et microsegmentation
Le zero trust ne signifie pas que le réseau ne compte plus ; il signifie que le réseau n’est plus le seul contrôle. La segmentation du réseau divise l’infrastructure en zones reliées par des chemins contrôlés : sous-réseaux publics pour les équilibreurs de charge, sous-réseaux privés pour les services, sous-réseaux isolés pour les bases de données, et comptes cloud séparés pour la production, le staging et les outils de sécurité. La microsegmentation réduit les zones à des charges de travail individuelles, de sorte que chaque service ne peut recevoir du trafic que des appelants dont il a besoin et n’en envoyer qu’à ses dépendances déclarées.
Dans Kubernetes, tous les pods peuvent joindre tous les autres pods, sauf si des ressources NetworkPolicy les en empêchent ; la première étape est donc une politique de refus par défaut pour chaque namespace, suivie d’autorisations explicites. Le contrôle du trafic sortant (egress) compte autant que celui du trafic entrant (ingress) : un service compromis qui ne peut pas ouvrir de connexions vers internet ne peut pas facilement exfiltrer des données volées ni télécharger d’autres outils. Les groupes de sécurité cloud, les network policies Kubernetes et les politiques d’autorisation du service mesh agissent à des couches différentes (adresses et ports, pods et labels, identités de charge de travail et méthodes HTTP) et s’utilisent au mieux ensemble : les couches extérieures donnent une protection grossière qui survit à une erreur de configuration du service mesh, la couche intérieure exprime l’intention avec précision. C’est la défense en profondeur (section 8.1) appliquée au réseau.
D’un réseau plat à une segmentation fondée sur l’identité
Sécuriser l’API gateway
L’API gateway (passerelle d’API) est le principal point d’application entre internet et les services ; elle assume donc plusieurs fonctions. Authentification : terminer le TLS, puis valider chaque jeton d’accès (signature avec un algorithme imposé, émetteur, audience, expiration et date de début de validité), rejeter les requêtes qui n’en ont pas, et transmettre aux services une identité vérifiée, jamais les affirmations brutes du client. Limitation de débit : limiter les requêtes par client, par utilisateur et par route, généralement avec un token bucket (seau à jetons), en répondant HTTP 429 avec un en-tête Retry-After ; des limites distinctes, plus strictes, protègent la connexion, la réinitialisation du mot de passe et l’utilisation des bons de réduction contre le bourrage d’identifiants (credential stuffing) et l’énumération. Validation des entrées : imposer des tailles de requête et des nombres d’en-têtes maximaux, n’accepter que les types de contenu déclarés, et valider les corps de requête par rapport au schéma OpenAPI pour que les requêtes malformées n’atteignent jamais un service. Un pare-feu applicatif web (WAF) peut ajouter des signatures d’attaque génériques, mais c’est un complément, pas un substitut à un code correct.
Sachez ce qu’une passerelle ne peut pas faire. Elle voit la route et le jeton, mais pas si la commande 81723 appartient au client qui la demande. La faille d’autorisation au niveau des objets (broken object level authorisation), où un utilisateur modifie un identifiant dans l’URL et lit les données de quelqu’un d’autre, figure en première place de l’OWASP API Security Top 10 dans ses éditions 2019 et 2023, et seul le service qui possède les données peut l’empêcher. Les services doivent donc autoriser eux-mêmes chaque requête, à l’aide de l’identité vérifiée que transmet la passerelle. Quand un service en appelle un autre pour le compte d’un utilisateur, il doit transmettre un jeton qui nomme à la fois l’utilisateur et le service appelant, obtenu par exemple par l’échange de jetons OAuth 2.0 (RFC 8693), plutôt que son propre identifiant tout-puissant ; sinon, un bogue dans un service en fait un député confus (confused deputy) capable d’agir pour n’importe qui.
Exemple commenté
Exemple commenté : faire passer la plateforme de livraison de repas d’un réseau plat au zero trust
La plateforme fait tourner une vingtaine de services dans un seul cluster Kubernetes et un seul compte cloud. Les services s’appellent en HTTP simple, un même utilisateur de base de données est partagé par six services, le personnel accède à la console d’administration par un VPN, et le modèle de menaces de la section 8.2 a désigné le mouvement latéral après une compromission quelconque comme le principal risque. Un basculement en une seule fois casserait le trafic : la migration se fait donc par étapes, et chaque étape est réversible.
| 1. Inventorier et observer (semaines 1 à 3) | Recenser chaque service, son propriétaire et ses appelants. Installer le service mesh en mode permissif, qui accepte à la fois le trafic en clair et le trafic mTLS, et utiliser sa télémétrie pour construire le graphe d’appels réel. Surprise : le traitement d’analytique appelle directement la base de données de Paiements. |
|---|---|
| 2. Donner une identité à chaque charge de travail (semaines 3 à 5) | Un compte de service Kubernetes par service ; le service mesh émet des certificats SPIFFE valables 24 heures, renouvelés automatiquement. L’utilisateur de base de données partagé est remplacé par un identifiant par service, délivré par le gestionnaire de secrets pour une heure à la fois. |
| 3. Tout chiffrer (semaines 5 à 8) | Passer les namespaces un par un en mTLS strict, en commençant par les moins risqués. Des tableaux de bord affichent les appelants qui communiquent encore en clair ; chacun est corrigé avant la bascule de son namespace. Le retour arrière tient en une modification de configuration par namespace. |
| 4. Autoriser chaque appel (semaines 8 à 12) | Rédiger des politiques d’autorisation à partir du graphe d’appels observé : Commandes peut appeler Paiements sur POST /authorisations ; Carte ne peut rien appeler dans Paiements. Les faire tourner en mode audit pendant deux semaines, examiner les refus, puis les appliquer. Ajouter des NetworkPolicies Kubernetes de refus par défaut et des règles de trafic sortant comme couche extérieure. |
| 5. Remplacer le VPN du personnel (semaines 10 à 16) | Placer la console d’administration et les outils internes derrière un identity-aware proxy qui exige l’authentification unique (SSO), une MFA résistante à l’hameçonnage et un appareil géré et à jour de ses correctifs. Les remboursements au-delà d’un seuil exigent une nouvelle étape de MFA. Le VPN est coupé dès que plus rien ne l’utilise. |
| 6. Renforcer la périphérie (en parallèle) | La passerelle valide les jetons, applique des limites de débit par route et une validation par schéma, et transmet une identité vérifiée ; chaque service vérifie quand même que l’appelant a le droit de voir la commande ou le compte précis. |
| 7. Mesurer et maintenir dans la durée | Des fonctions d’aptitude font échouer le build si un nouveau service n’a pas de politique d’autorisation, et des alertes se déclenchent sur les appels refusés et sur les certificats à moins de sept jours de leur expiration. Chaque nouvelle dépendance est une modification de politique revue. |
L’ordre compte : observer avant d’appliquer, l’identité avant la politique, le mode audit avant le refus. Chaque étape peut être annulée séparément, ce qui maintient le risque de la migration en dessous du risque qu’elle élimine.
Le résultat n’est pas que plus rien ne peut être compromis. Un service Carte compromis peut encore faire mauvais usage de ses propres données et des appels qui lui sont permis, mais il ne peut plus atteindre les paiements ni les bases de données des autres services, et ses tentatives sont journalisées et déclenchent des alertes.
Questions fréquentes
Avons-nous encore besoin d’un VPN ?
Pour les personnes qui accèdent à des applications web, un identity-aware proxy le remplace généralement. Les VPN ou les liaisons privées restent raisonnables pour les connexions de site à site et pour les protocoles qu’un proxy ne sait pas gérer, mais ils ne doivent pas accorder une confiance large à tout ce qui se trouve de l’autre côté.
Un service mesh est-il indispensable au zero trust ?
Non. C’est un moyen pratique parmi d’autres d’obtenir partout le mTLS, l’identité de charge de travail et une politique par appel. Les équilibreurs de charge de la plateforme, des bibliothèques et les fonctions d’identité du cloud peuvent obtenir le même résultat pour un petit nombre de services.
Le zero trust ralentit-il le système ?
Chaque contrôle ajoute un peu de latence, généralement bien moins d’une milliseconde pour un proxy local de service mesh, et quelques millisecondes quand une décision à distance est nécessaire. Mettre les décisions en cache, pousser la politique vers le point d’application et réutiliser les connexions permettent de la limiter ; mesurez-la au p99 sur les chemins critiques.
Vérifiez votre compréhension
Pourquoi un TLS mutuel entre services, où chaque service peut appeler tous les autres, ne suffit-il pas au zero trust ?
Il apporte le chiffrement et l’identité, mais aucune autorisation. Un service compromis peut encore appeler n’importe quoi ; le zero trust exige une politique par appel qui n’autorise que les appels dont chaque identité a réellement besoin.
Quelle est la différence entre le moteur de politique et le point d’application de politique ?
Le moteur de politique décide si une requête doit être autorisée, à partir de la politique et de données d’entrée comme l’identité et la posture ; le point d’application se trouve sur le chemin du trafic et applique cette décision en autorisant ou en bloquant la requête.
Pourquoi les certificats à courte durée de vie sont-ils intéressants, et qu’exigent-ils ?
Une clé volée n’est utile que jusqu’à l’expiration du certificat, ce qui réduit la dépendance à la révocation. Ils exigent une émission et un renouvellement entièrement automatisés, ainsi qu’une surveillance des expirations.
Un client modifie le numéro de commande dans une URL et voit la commande d’un autre client. Quel composant aurait dû l’empêcher ?
Le service qui possède les commandes, en vérifiant que le client authentifié est bien propriétaire de cette commande précise. La passerelle a correctement authentifié l’utilisateur, mais ne peut pas savoir à qui appartient chaque objet.
Sources et lectures complémentaires
Une question sur cette section ? ArchitectBot, l’assistant d’étude IA du cours, répond d’abord à partir du cours.
Demander : « Comment introduire le TLS mutuel et une autorisation par service dans un système Kubernetes existant sans casser le trafic ? »