Amélioration de la sécurité dans Kubernetes avec les contrôleurs d'admission

Gui Alvarenga - mai 10, 2024

Les contrôleurs d’admission agissent comme des gardiens pour les environnements Kubernetes (K8s). Ils renforcent la sécurité en analysant les demandes envoyées au serveur API. Ces contrôleurs appliquent une conformité stricte et protègent contre les cybermenaces potentielles. Ils servent de gardiens pour votre cluster Kubernetes, ce qui est essentiel face à l’évolution des nouvelles cybermenaces qui visent les applications conteneurisées.

Dans cet article, nous explorons le monde des contrôleurs d’admission Kubernetes. Nous discuterons de leur importance, examinerons leurs mécanismes internes, analyserons leurs fonctionnalités d’analyse des images et évaluerons leur rôle dans la stratégie de sécurité des clusters Kubernetes.

Qu’est-ce qu’un contrôleur d’admission Kubernetes ?

Les contrôleurs d’admission de Kubernetes surveillent et réglementent les demandes à destination du serveur d’API de Kubernetes. Une fois l’authentification et l’autorisation terminées, mais avant le stockage persistant d’un objet, ces plug-ins servent d’intermédiaires et interceptent les demandes, comme indiqué ci-dessous :

Kubernetes admission controllers

Figure 1 : Contrôleurs d’admission (source : Blog Kubernetes)

Les contrôleurs d’admission peuvent admettre, rejeter ou modifier les demandes en fonction de certaines conditions ou politiques prédéfinies. Il existe deux types principaux de contrôleurs d’admission :

  • Contrôleurs d’admission validants : les contrôleurs d’admission, responsables de la validation des objets contenus dans les demandes, examinent chaque demande pour vérifier leur conformité avec les exigences et règles spécifiques définies dans le contrôleur.
  • Contrôleurs d’admission mutants : les contrôleurs d’admission mutants modifient des objets dans une requête et changent leurs fonctionnalités avant de les stocker. Ils offrent une gestion automatique en vous permettant d’injecter des paramètres système selon des règles et des politiques prédéfinies.

Principales fonctionnalités des contrôleurs d’admission

Les contrôleurs d’admission, éléments clés de l’architecture Kubernetes, opèrent en arrière-plan. Ils protègent les systèmes en appliquant les règles et politiques définies par votre entreprise. Lors de la gestion d’environnements Kubernetes à grande échelle, assurer la sécurité et faire respecter la conformité peut devenir complexe. Heureusement, les contrôleurs d’admission Kubernetes peuvent vous aider de la manière suivante :

1. Renforcer la sécurité dans les clusters Kubernetes

Les contrôleurs peuvent mettre en œuvre des politiques qui restreignent les opérations réalisables dans un cluster. Cette mesure diminue les vecteurs d’attaque potentiels. Par exemple, ils peuvent empêcher les utilisateurs d’exécuter des conteneurs privilégiés ou d’utiliser le réseau et les systèmes de fichiers de l’hôte, qui sont des vecteurs courants de cyberattaques.

2. Faire respecter la conformité

Les contrôleurs d’admission sont un moyen essentiel d’appliquer des politiques à l’échelle de l’entreprise : ils peuvent faire respecter les conventions de dénomination, les limites de ressources et les politiques réseau. Ils peuvent également empêcher le déploiement de pods qui ne respectent pas ces règles, garantissant ainsi la cohérence et le respect des bonnes pratiques.

3. Assurer la gestion des ressources et l’optimisation de l’allocation

La gestion des ressources est une partie cruciale de la gestion d’un cluster Kubernetes. Les contrôleurs d’admission appliquent des quotas et des limites sur le processeur, la mémoire et le stockage. Cette mesure prévient les situations où des conteneurs individuels consomment plus de ressources du cluster que celles allouées. Cette technique permet de maintenir la stabilité et la fiabilité du système et favorise une utilisation efficace des ressources, ce qui permet également d’optimiser les coûts.

4. Prévenir les exploits potentiels d’évasion des conteneurs Kubernetes

Un exploit d’évasion de conteneur est un problème de sécurité important dans les clusters Kubernetes qui se produit lorsqu’un cyberattaquant s’échappe d’un conteneur et obtient un accès non autorisé au système hôte. Les contrôleurs d’admission peuvent contribuer à prévenir ces exploits en appliquant des contextes de sécurité stricts et en limitant les privilèges des conteneurs.

Les mécanismes des contrôleurs d’admission

Pour exploiter pleinement le potentiel des contrôleurs d’admission, vous devez comprendre leur fonctionnement interne. Examinons comment les contrôleurs d’admission interagissent avec les autres composants Kubernetes :

Requêtes et réponses

Les contrôleurs d’admission scrutent les demandes entrantes destinées au serveur API et analysent l’objet que ces demandes cherchent à enregistrer dans le système. Si le contrôleur est un contrôleur validant, il validera la demande en fonction d’un ensemble de règles. Si c’est un contrôleur mutant, il modifiera l’objet de la demande. Le contrôleur accepte ou refuse la requête et renvoie une réponse à l’utilisateur. Si la demande est refusée, l’utilisateur reçoit un message expliquant pourquoi la requête a été rejetée.

Chaîne de contrôleurs d’admission multiples

Les contrôleurs d’admission forment une chaîne et sont appelés dans l’ordre. L’ordre est essentiel, surtout lorsque des contrôleurs validants et mutants sont configurés dans le même cluster. En général, les contrôleurs mutants sont appelés avant les contrôleurs validants. De cette manière, une requête peut être modifiée pour répondre aux critères avant la validation. Si un contrôleur de cette séquence refuse la requête, la totalité de l’opération est interrompue et une erreur est envoyée à l’utilisateur. Ce mécanisme garantit que toutes les règles définies sont vérifiées avant qu’une requête ne soit acceptée.

Contrôleurs d’admission intégrés

Kubernetes est livré avec plusieurs contrôleurs d’admission intégrés. Par exemple, le contrôleur NamespaceLifecycle rejette toutes les requêtes envoyées aux objets d’un espace de noms en cours d’extinction. Comme son nom l’indique, le contrôleur ResourceQuota applique des quotas qui limitent l’utilisation des ressources par espace de noms ; et le contrôleur PodSecurityPolicy applique des restrictions de sécurité basées sur le contexte de sécurité demandé. Pour mieux comprendre les contrôleurs d’admission intégrés, examinez ceux déjà inclus et découvrez comment ils automatisent les opérations Kubernetes.

Analyse des images avec les contrôleurs d’admission

Les images de conteneurs servent de fondations à toute application conteneurisée. Cependant, elles peuvent renfermer des vulnérabilités dans le code de l’application ou dans leurs bibliothèques système sous-jacentes. Si elles ne sont pas corrigées, ces vulnérabilités peuvent être exploitées et entraîner des accès non autorisés, des fuites de données, voire la prise de contrôle du système. C’est pourquoi l’analyse des images de conteneurs pour y rechercher des vulnérabilités connues n’est pas seulement une bonne pratique, c’est une nécessité.

Les outils d’analyse des images comme Clair, Anchore et la plateforme CrowdStrike Falcon® peuvent s’intégrer aux contrôleurs d’admission Kubernetes pour appliquer les politiques d’analyse des images. Ces outils peuvent analyser les images des conteneurs par rapport à des bases de données de vulnérabilités afin d’identifier les failles connues. Un contrôleur d’admission peut être configuré pour s’intégrer à ces outils et empêcher le déploiement d’images qui présentent des vulnérabilités ou qui n’ont pas été analysées.

En d’autres termes, le contrôleur d’admission rejette la requête de déploiement si l’image n’est pas sûre et empêche le conteneur vulnérable de s’exécuter dans un cluster. Vous disposez ainsi d’un moyen automatisé et appliqué de garantir que toutes les images de conteneurs déployées dans le cluster sont sécurisées et conformes aux politiques de sécurité.

Développer des contrôleurs d’admission personnalisés

Kubernetes dispose de plusieurs contrôleurs d’admission intégrés. Cependant, dans certains cas, vous pourrez avoir besoin d’appliquer des règles spécifiques à votre entreprise. Ces règles peuvent inclure des conventions de nommage particulières, des politiques d’utilisation des ressources ou des politiques de sécurité pour les pods. Dans ces cas, Kubernetes vous permet de créer votre propre contrôleur et de l’intégrer dynamiquement dans les clusters en cours d’exécution.

Bonnes pratiques pour la création d’un contrôleur d’admission

La création d’un contrôleur d’admission implique l’écriture d’un serveur webhook qui répond aux requêtes du serveur API. Les serveurs webhook répondent spécifiquement aux requêtes d’admission provenant du serveur d’API Kubernetes. Le serveur webhook peut être chargé de la validation, de la mutation ou des deux. Lorsque vous écrivez le contrôleur d’admission, suivez ces bonnes pratiques :

1. Définissez des règles claires

Veillez à ce que les règles appliquées par le contrôleur soient claires, bien documentées et partagées avec tous les membres de l’équipe qui interagissent avec votre cluster Kubernetes.

2. Gérez les erreurs avec fluidité

Votre contrôleur d’admission doit gérer les erreurs de façon fluide et ne pas bloquer les opérations du serveur d’API Kubernetes. En outre, il doit renvoyer des messages d’erreur clairs et explicites. Les utilisateurs pourront ainsi comprendre pourquoi leur requête a été refusée.

3. Sécurisez votre webhook

Les appels de webhooks ajoutent de la latence aux requêtes du serveur d’API. Avec un webhook sécurisé, le serveur d’API doit vérifier le certificat du webhook avant d’envoyer une requête.

4. Concevez pour la performance.

Les appels de webhooks ajoutent de la latence aux requêtes du serveur d’API. Concevez votre contrôleur d’admission pour qu’il soit très performant en réduisant au minimum le temps nécessaire à votre webhook pour traiter une requête.

5. Testez de manière approfondie

Testez le contrôleur d’admission avec différents types de requêtes pour vous assurer qu’il se comporte comme prévu. Le processus de test doit également inclure la vérification de la compatibilité avec les versions de Kubernetes que vous utilisez.

Surveillance et journalisation pour les contrôleurs d’admission

La surveillance et la journalisation dans Kubernetes fournissent une visibilité cruciale. Elles permettent de comprendre les décisions prises par vos contrôleurs d’admission, d’identifier les problèmes, d’améliorer la stratégie de sécurité d’un cluster et de vérifier l’application correcte et cohérente des politiques.

Bien que Kubernetes fournisse une journalisation intégrée des décisions du contrôleur d’admission via son serveur API, ces logs peuvent être longs et difficiles à analyser. Heureusement, les outils de gestion des logs peuvent rendre ces logs compréhensibles en les collectant, en les filtrant et en les analysant. Par exemple, des outils comme Fluentd ou Logstash peuvent collecter les logs des clusters Kubernetes et les transmettre à une solution centralisée, comme Elasticsearch ou un service de gestion des logs basé sur le cloud. Ensuite, Kibana ou un outil similaire peut analyser les données de journalisation et les visualiser.

Dans vos logs, recherchez les objets AdmissionReview qui contiennent des informations sur les décisions des contrôleurs d’admission. Gardez un œil sur les délais de réponse du serveur d’API pour comprendre leur impact sur les performances. Il est également utile de rechercher des modèles de rejet des requêtes, qui peuvent indiquer une mauvaise configuration du contrôleur d’admission ou une mauvaise compréhension des règles de la part de vos utilisateurs. Soyez attentif aux changements soudains dans le volume ou la nature des requêtes, car ils peuvent être le signe d’un incident de sécurité.

EN SAVOIR PLUS

Découvrez la série complète des guides de journalisation de Kubernetes :

Exploiter tout le potentiel des contrôleurs d’admission Kubernetes

La puissance des contrôleurs d’admission ne réside pas seulement dans la sécurité et la conformité qu’ils offrent d’emblée, mais aussi dans leur potentiel de personnalisation et d’extension. Nous recommandons à tous les propriétaires de clusters Kubernetes de se pencher sérieusement sur l’utilisation des contrôleurs d’admission et de réfléchir à la façon dont les optimiser dans leurs environnements respectifs.

Le contrôleur d’admission Kubernetes de CrowdStrike met à disposition des politiques prédéfinies et simplifie la gestion des conteneurs. Il évite aux utilisateurs d’avoir à écrire des règles brutes de rego et bloque le déploiement de conteneurs mal configurés.

Protégez le cycle de vie des conteneurs et gérez la sécurité de Kubernetes avec CrowdStrike

CrowdStrike Falcon® Cloud Security for Containers simplifie la sécurité de Kubernetes grâce à une interface unique et facile à utiliser. Il offre également l’unique contrôleur d’admission de Kubernetes qui identifie et élimine les conteneurs vulnérables, empêchant ainsi leur redéploiement.

Améliorez votre stratégie de sécurité et la résilience de vos clusters Kubernetes avec CrowdStrike Falcon® Cloud Security. La plateforme CrowdStrike Falcon est une plateforme de sécurité robuste qui offre plusieurs fonctionnalités. Elle permet la détection des vulnérabilités et des menaces, assure la réponse à incident, protège les identités, fournit l’observabilité et garantit la sécurité du cloud. Utilisez-la avec les contrôleurs d’admission pour sécuriser vos environnements Kubernetes.

Inscrivez-vous pour un essai gratuit dès aujourd’hui.

À PROPOS DE L'AUTEUR

Guilherme (Gui) Alvarenga est responsable du marketing produits pour le portefeuille de solutions de sécurité du cloud de CrowdStrike. Il possède plus de 15 ans d’expérience dans la promotion de solutions cloud, SaaS, réseau et de Machine Learning pour des entreprises telles que Check Point, NEC et Cisco Systems. Il est titulaire d’un diplôme de publicité et marketing de l’Universidade Paulista au Brésil, et a obtenu son MBA à la San Jose State University. Il a étudié l’informatique appliquée à l’Université de Stanford et s’est spécialisé dans la sécurité du cloud et le Threat Hunting.