Security musings

Catégories

Tags

🔍 Licence d'Utilisation 🔍

Sauf mention contraire, le contenu de ce blog est sous licence CC BY-NC-ND 4.0.

© 2025 à 2042 Sébastien Gioria. Tous droits réservés.

Kubernetes est le fruit d’années d’expérience sur l’orchestration à grande échelle au sein de Google. Les systèmes internes comme Borg et Omega ont servi de laboratoires pour résoudre des problèmes de disponibilité, de scalabilité et d’automatisation. En 2014, Kubernetes a été open‑sourcé et confié à la Cloud Native Computing Foundation (CNCF), ce qui a permis la constitution d’un écosystème riche (outils, opérateurs, projets complémentaires).

Pourquoi la genèse importe pour la sécurité ? Parce que Kubernetes repose sur des principes de desired‑state et de reconciliation : des controllers veillent à ce que l’état réel converge vers l’état désiré décrit par l’utilisateur. Cette boucle de contrôle est puissante, mais elle peut aussi masquer des effets de bord : un objet mal configuré peut être recréé automatiquement, des controllers peuvent ouvrir des surfaces d’intégration, et les interactions entre abstractions multipliées complexifient l’analyse de menaces.

De Borg à Kubernetes : Leçons de sécurité

Le système Borg (2003-2013)

Borg fut développé pour gérer les millions de jobs Google sur des dizaines de milliers de machines. Ses principes fondamentaux influencent encore Kubernetes :

  • Isolation par conteneurs : Borg utilisait déjà des conteneurs Linux (cgroups, namespaces) bien avant Docker
  • Scheduling déclaratif : les jobs étaient décrits par leurs besoins (CPU, RAM, réseau)
  • Auto-réparation : redémarrage automatique des jobs en échec

Implications sécuritaires héritées :

  • Le modèle de permissions peut être complexe à auditer
  • L’auto-réparation peut relancer des workloads compromis
  • L’abstraction cache parfois les dépendances réelles

Omega : Vers une orchestration plus flexible (2011-2014)

Omega introduisit un modèle de scheduling plus flexible avec des transactions optimistes, permettant à plusieurs schedulers de proposer des modifications simultanément. Cela permit une meilleure scalabilité et adaptabilité. Leçons de sécurité :

  • La concurrence accrue nécessite des mécanismes robustes de gestion des conflits
  • La complexité du modèle transactionnel peut introduire des vulnérabilités inattendues
  • La transparence des décisions de scheduling est cruciale pour la traçabilité

Naissance de Kubernetes (2014)

Kubernetes combina les meilleures idées de Borg et Omega, tout en adoptant une approche open source. Il introduisit des concepts clés comme les Pods, les Services, et les Controllers, qui sont devenus des piliers de l’orchestration moderne.

Philosophie de sécurité de Kubernetes

  1. Déclaration de l’état désiré : Les utilisateurs décrivent ce qu’ils veulent, pas comment l’obtenir.
  2. Reconciliation continue : Les controllers surveillent et corrigent l’état du cluster.
  3. Extensibilité via CRD et Operators : Kubernetes peut être étendu avec des ressources personnalisées.
  4. Isolation et multi-tenancy : Utilisation de namespaces, RBAC, et network policies pour compartimenter les workloads.
  5. Automatisation et self-healing : Réduction des interventions manuelles pour minimiser les erreurs humaines.
  6. Écosystème ouvert : Large adoption et contributions de la communauté pour renforcer la sécurité et les fonctionnalités.
  7. Observabilité intégrée : Outils natifs pour le monitoring, le logging et le tracing des applications et du cluster.
  8. Sécurité par défaut : Adoption progressive de meilleures pratiques de sécurité dans les configurations par défaut (ex : Pod Security Standards).
  9. Gestion des secrets : Mécanismes intégrés pour stocker et gérer les informations sensibles.
  10. Mise à jour continue : Processus de mise à jour réguliers pour intégrer les correctifs de sécurité et les nouvelles fonctionnalités.
  11. Communauté et gouvernance : La CNCF supervise le développement de Kubernetes, assurant une gouvernance transparente et une collaboration entre les acteurs de l’industrie.
  12. Focus sur la sécurité des supply chains : Adoption de pratiques comme la signature des images (ex : Notary, Sigstore) et l’analyse des vulnérabilités pour sécuriser les pipelines CI/CD.
  13. Adoption de standards de sécurité : Intégration de standards comme CIS Benchmarks pour Kubernetes, fournissant des recommandations claires pour sécuriser les clusters.
  14. Support pour les environnements hybrides et multi-cloud : Kubernetes facilite la gestion sécurisée des workloads à travers différents environnements cloud et on-premises, permettant une flexibilité accrue tout en maintenant des politiques de sécurité cohérentes.
  15. Intégration avec des outils de sécurité tiers : Kubernetes s’intègre facilement avec des solutions de sécurité tierces (ex : scanners de vulnérabilités, outils de gestion des identités) pour renforcer la posture de sécurité globale des environnements cloud natifs.
  16. Adoption de Zero Trust : Kubernetes encourage les architectures Zero Trust en mettant l’accent sur la vérification continue des identités, le chiffrement des communications et la segmentation des réseaux au sein des clusters.
  17. Mise en œuvre de politiques de sécurité dynamiques : Grâce à des outils comme OPA (Open Policy Agent) et Kyverno, Kubernetes permet la définition et l’application de politiques de sécurité dynamiques qui s’adaptent aux changements dans l’environnement du cluster.
  18. Focus sur la résilience aux attaques : Kubernetes intègre des mécanismes pour détecter et atténuer les attaques courantes (ex : DDoS, escalade de privilèges) grâce à des fonctionnalités comme les quotas de ressources, les limites de pods et les contrôles d’accès granulaires.
  19. Support pour les workloads sans état et avec état : Kubernetes gère efficacement les workloads sans état (stateless) et avec état (stateful), en assurant la sécurité des données persistantes via des solutions de stockage sécurisées et des mécanismes de sauvegarde/restauration.
  20. Support pour les workloads sensibles : Kubernetes propose des fonctionnalités avancées pour gérer les workloads sensibles, telles que les Trusted Execution Environments (TEE) et les solutions de chiffrement au repos et en transit, garantissant la confidentialité et l’intégrité des données critiques.

L’héritage de Kubernetes et les défis sécuritaires

Kubernetes a révolutionné l’orchestration des conteneurs, mais son architecture complexe et ses nombreuses abstractions introduisent des défis sécuritaires uniques. La nature déclarative et automatisée de Kubernetes peut masquer des comportements inattendus, rendant la compréhension des flux de données et des interactions entre composants cruciale pour une sécurité efficace.

Les équipes doivent adopter une approche proactive de la sécurité, en comprenant non seulement les fonctionnalités de Kubernetes, mais aussi son histoire et sa philosophie sous-jacente. Cela inclut la gestion rigoureuse des configurations, la surveillance continue des comportements anormaux, et l’intégration de pratiques de sécurité dans chaque étape du cycle de vie des applications déployées sur Kubernetes.


L’écosystème CNCF et ses implications

Projets CNCF complémentaires

La CNCF héberge plus de 100 projets qui étendent Kubernetes. Voici ceux ayant un impact sécuritaire direct :

Runtime Security :

  • Falco : détection d’anomalies runtime
  • gVisor : sandbox sécurisé pour conteneurs
  • Kata Containers : isolation par VM légère

Network Security :

  • Cilium : networking avec policies eBPF
  • Istio : service mesh avec mTLS automatique
  • Linkerd : alternative service mesh légère

Policy & Governance :

  • OPA (Open Policy Agent) : moteur de policies
  • Gatekeeper : validation d’admission via OPA
  • Kyverno : policies Kubernetes natives

Certification et compliance

La CNCF maintient plusieurs programmes de certification impactant la sécurité :

  • Kubernetes Conformance : garantit la compatibilité API
  • CNCF Security Audit : audits sécurité des projets majeurs
  • CKS (Certified Kubernetes Security Specialist) : certification sécurité

Impact sur la sécurité opérationnelle

Kubernetes 101

Le Controller Manager et ses risques

Les controllers sont au cœur de Kubernetes. Ils observent l’état du cluster et effectuent des actions pour aligner l’état réel avec l’état désiré. Cependant, cette automatisation peut introduire des risques spécifiques :

Risques associés :

  1. Persistence d’objets malveillants : un controller peut recréer un objet supprimé manuellement
  2. Escalade via controllers : un controller compromis peut modifier d’autres objets
  3. Denial of service : boucles de reconciliation infinies

L’API server : Point d’entrée critique

L’API Server est la porte d’entrée de Kubernetes. C’est par lui que toutes les commandes passent, qu’elles viennent de kubectl, des controllers, ou des intégrations externes.

Risques associés :

  1. Surface d’attaque étendue : exposition via kubectl, dashboards, API externes
  2. Compromission des credentials : tokens, certificats mal gérés
  3. Abus des permissions : RBAC mal configuré

Sécurisation de l’API Server

Sa sécurisation est cruciale :

  • Authentification forte : utiliser OIDC, certificats client
  • RBAC granulaire : principes du moindre privilège
  • Audit logging : traçabilité des actions
  • Network policies : restreindre l’accès réseau à l’API Server
  • TLS obligatoire : chiffrer toutes les communications
  • Limitation des ressources : prévenir les attaques par déni de service
  • Mise à jour régulière : appliquer les correctifs de sécurité rapidement
  • Utilisation de bastions : accéder à l’API Server via des points d’entrée sécurisés
  • Surveillance continue : intégrer des outils de monitoring pour détecter les comportements anormaux
  • Segmentation des clusters : isoler les environnements de production, staging et développement

Les Workload et les Pods

Les nœuds de travail exécutent les workloads. Ce sont eux qui hébergent les conteneurs et gèrent les ressources.

Risques associés :

  1. Compromission des nœuds : accès root aux nœuds peut compromettre tous les pods
  2. Escalade de privilèges : conteneurs mal configurés peuvent accéder au système hôte
  3. Fuites de données : données sensibles exposées sur les nœuds
  4. Attaques latérales : mouvements latéraux entre pods sur le même nœud
  5. Exploitation des vulnérabilités du système d’exploitation : les nœuds non patchés peuvent être ciblés par des attaquants
  6. Utilisation de ressources non autorisées : des conteneurs peuvent consommer plus de ressources que prévu, affectant la disponibilité des autres workloads
  7. Compromission des images de conteneurs : l’utilisation d’images non vérifiées ou vulnérables
  8. Mauvaise configuration des volumes de stockage : exposition involontaire de données sensibles via des volumes mal configurés
  9. Attaques par déni de service interne : des pods malveillants peuvent saturer les ressources du nœud, affectant les autres workloads
  10. Absence de surveillance des nœuds : manque de visibilité sur les activités suspectes au niveau des nœuds
  11. Utilisation de nœuds non sécurisés : déploiement de nœuds dans des environnements non sécurisés ou non conformes aux politiques de sécurité de l’organisation
  12. Manque de segmentation réseau entre les nœuds : absence de contrôles réseau adéquats pour isoler les nœuds et limiter la propagation des attaques
  13. Exposition des services de gestion des nœuds : accès non restreint aux services de gestion des nœuds (ex : kubelet, SSH) pouvant être exploité par des attaquants
  14. Absence de politiques de sécurité des pods (PSP) : manque de restrictions sur les capacités des pods, permettant potentiellement des actions malveillantes
  15. Utilisation de nœuds partagés entre plusieurs équipes ou applications : risque accru de compromission croisée entre différents workloads
  16. Mauvaise gestion des secrets au niveau des nœuds : stockage non sécurisé des secrets sur les nœuds, exposant potentiellement des informations sensibles

Sécurisation des Workloads et des Nœuds

  • Hardening OS : appliquer les meilleures pratiques de sécurité
  • Isolation des conteneurs : utiliser des runtimes sécurisés (gVisor, Kata)
  • Network segmentation : appliquer des network policies strictes
  • Surveillance des nœuds : détecter les comportements suspects
  • Gestion des mises à jour : maintenir le système d’exploitation et les composants Kubernetes à jour
  • Limitation des privilèges : exécuter les processus avec le moins de privilèges possible
  • Chiffrement des données au repos : protéger les données sensibles stockées sur les nœuds
  • Utilisation de nœuds dédiés : séparer les workloads critiques des autres
  • Surveillance des ressources : détecter les anomalies dans l’utilisation des ressources

Conclusion

Kubernetes, avec son héritage de Borg et son écosystème CNCF, offre une plateforme puissante pour l’orchestration de conteneurs. Cependant, sa complexité et ses abstractions introduisent des défis sécuritaires uniques. En comprenant l’histoire et la philosophie derrière Kubernetes, les équipes peuvent mieux anticiper les risques et mettre en place des stratégies de sécurité adaptées pour protéger leurs environnements cloud natifs.


À retenir 📌

Points clés à retenir :

  • L’héritage de Google (Borg/Omega) influence profondément l’architecture Kubernetes : isolation par conteneurs, scheduling déclaratif, auto-réparation - mais aussi les défis de sécurité (complexité des permissions, relance automatique de workloads compromis)
  • Kubernetes = reconciliation continue : les controllers veillent à ce que l’état réel converge vers l’état désiré - puissant mais peut masquer des comportements malveillants ou recréer des objets supprimés
  • L’API Server est le point d’entrée critique : toutes les commandes passent par lui - sa sécurisation est vitale (authentification OIDC, RBAC granulaire, audit logging)
  • L’écosystème CNCF enrichit la sécurité : Falco (runtime), Cilium (network), OPA/Kyverno (policies), Istio (service mesh) - mais chaque composant ajoute de la complexité
  • Défis sécuritaires uniques :
    • Surface d’attaque étendue (API, controllers, workloads)
    • Abstractions multiples qui cachent les dépendances réelles
    • Multi-tenancy complexe nécessitant namespaces + RBAC + network policies
  • Sécurisation en profondeur requise : hardening OS, isolation runtime (gVisor/Kata), network segmentation, surveillance continue, gestion rigoureuse des secrets

Leçon clé : Comprendre l’histoire et la philosophie de Kubernetes n’est pas académique - c’est essentiel pour anticiper les risques architecturaux et sécuriser efficacement vos clusters en production.