Présentation
Pour gérer la sécurité de Kubernetes, il faut corriger les vulnérabilités de sécurité connues pendant la phase de création, reconfigurer les erreurs de configuration pendant la phase de création/déploiement et traiter les menaces lors de l'exécution. Ces actions correspondent aux données recueillies dans le cadre du dernier rapport sur l'état de la sécurité de Kubernetes et des conteneurs, qui a révélé que 24 % des problèmes graves de sécurité des conteneurs étaient des vulnérabilités qu'il était possible de corriger, que près de 70 % étaient des erreurs de configuration et que 27 % étaient des incidents de sécurité lors de l'exécution.
Les risques de sécurité de Kubernetes
Utilisation massive des conteneurs
Kubernetes est une plateforme Open Source d'orchestration de conteneurs qui s'utilise pour gérer des centaines (parfois des milliers) de conteneurs Linux® regroupés en clusters. Elle repose en grande partie sur des interfaces de programmation d'applications (API) qui font le lien entre des microservices conteneurisés. Parce qu'elle est donc de nature distribuée, il est plus difficile d'analyser rapidement les conteneurs qui pourraient présenter des vulnérabilités, des erreurs de configuration ou des risques bien plus importants pour l'entreprise.
La solution consiste à développer une vue complète des déploiements de conteneurs qui capture les événements critiques au niveau du système dans chaque conteneur.
Rapport KuppingerCole – Leadership Compass : Container Security
Obtenez un aperçu complet du marché de la sécurité des conteneurs et de Kubernetes pour vous aider à évaluer et à choisir la solution de sécurité des conteneurs qui vous convient.
Mauvaise utilisation des images et registres
Les images de conteneurs (également appelées images de base) sont des modèles immuables utilisés pour créer des conteneurs. Les images de conteneurs nouvellement copiées peuvent ensuite être modifiées à d'autres fins.
La solution consiste à mettre en place des politiques qui déterminent les méthodes de création et de stockage des images dans les registres d'images. Les images de base doivent être régulièrement testées, approuvées et analysées. Et seules les images des registres d'images autorisés doivent être utilisées pour lancer des conteneurs dans un environnement Kubernetes.
Communication sans restriction des conteneurs
Les conteneurs et les pods doivent communiquer entre eux au sein des déploiements, ainsi qu'avec d'autres points de terminaison internes et externes pour fonctionner correctement. En cas de violation d'un conteneur, la capacité d'un pirate à se déplacer dans l'environnement est directement liée à la capacité de communication de ce conteneur avec les autres conteneurs et pods. Dans un environnement de conteneurs tentaculaire, la mise en œuvre de la segmentation du réseau peut s'avérer extrêmement difficile en raison de la complexité de la configuration manuelle de ces politiques.
La solution consiste à suivre le trafic entre les espaces de noms, les déploiements et les pods, puis déterminer quelle part de ce trafic est réellement autorisée.
Politiques réseau par défaut des conteneurs
Par défaut, les déploiements Kubernetes n'appliquent pas de politique réseau à un pod, c'est-à-dire la plus petite unité d'une application Kubernetes. Ces politiques réseau se comportent comme des règles de pare-feu. Elles contrôlent la façon dont les pods communiquent. Sans politiques réseau, un pod peut alors communiquer avec tout autre pod.
La solution consiste à définir des politiques réseau qui limitent la communication des pods aux seules ressources définies, et à monter les secrets dans des volumes en lecture seule au sein des conteneurs au lieu de les transmettre en tant que variables d'environnement.
Conformité des conteneurs et de Kubernetes
Les environnements cloud-native qui reposent sur Kubernetes doivent (comme tous les autres environnements informatiques) être conformes aux meilleures pratiques de sécurité, aux normes sectorielles, aux critères de référence et aux politiques organisationnelles internes, ainsi que prouver qu'ils sont bien conformes. Il faut donc parfois adapter les stratégies de conformité pour que les environnements Kubernetes respectent les contrôles initialement prévus pour les architectures d'applications traditionnelles.
La solution consiste à surveiller le respect de la conformité et à automatiser les audits.
Exécution
Kubernetes est une infrastructure immuable. Aucun correctif ne peut être appliqué pendant l'exécution des conteneurs. Les conteneurs en cours d'exécution doivent donc être détruits puis recréés. Les conteneurs compromis peuvent exécuter des processus malveillants, comme le minage de cryptomonnaies et le balayage de ports.
La solution consiste à détruire tout conteneur présentant une faille de sécurité ou en cours d'exécution, à recréer une image de conteneur non compromis, puis à lancer le conteneur recréé.
Sécurité dans la phase de création
La sécurité de Kubernetes commence dès la phase de création, avec la génération d'images de base solides et l'adoption de processus d'analyse des vulnérabilités.
Utilisez des images de base minimales. Évitez d'utiliser des images avec des gestionnaires de paquets du système d'exploitation ou des shells (qui pourraient contenir des vulnérabilités inconnues) ou supprimez le gestionnaire de paquets ultérieurement.
N'ajoutez pas de composants inutiles. En règle générale, les outils courants peuvent représenter un risque pour la sécurité lorsqu'ils sont inclus dans des images.
Utilisez uniquement des images à jour. Mettez à jour les versions des composants.
Utilisez un outil d'analyse des images. Identifiez les vulnérabilités au sein des images, décomposées en couches.
Intégrez la sécurité aux pipelines d'intégration et de distribution continues (CI/CD). Automatisez un aspect reproductible de la sécurité qui fera échouer les différentes créations lors du processus d'intégration continue et générera des alertes en cas de vulnérabilité grave et corrigible.
Étiquetez les vulnérabilités permanentes. Créez une liste d'autorisation qui répertorie les vulnérabilités connues ne pouvant pas être corrigées, non critiques ou n'ayant pas besoin d'être corrigées immédiatement.
Mettez en œuvre une stratégie de défense en profondeur. Standardisez les contrôles des politiques et les workflows de correction pour détecter et mettre à jour les images vulnérables.
Sécurité dans la phase de déploiement
Configurez la sécurité de l'infrastructure Kubernetes avant de déployer des charges de travail. Il faut d'abord en savoir le plus possible sur le processus de déploiement : les ressources qui sont déployées (image, composants, pods), l'emplacement (clusters, espaces de noms et nœuds), la méthode utilisée (privilèges, politiques de communication, mesures de sécurité appliquées), les éléments accessibles (secrets, volumes) et les normes de conformité.
Utilisez des espaces de noms. La division des charges de travail en espaces de noms permet de contenir les attaques et de limiter les conséquences des erreurs ou des actions destructives initiées par des utilisateurs autorisés.
Utilisez des politiques réseau. Par défaut, Kubernetes permet à chaque pod de contacter tous les autres pods, mais les politiques de segmentation du réseau peuvent remplacer ce paramètre par défaut.
Limitez les autorisations liées aux secrets. Montez uniquement les secrets indispensables aux déploiements.
Évaluez les privilèges des conteneurs. Fournissez uniquement les capacités, les rôles et les privilèges qui permettent au conteneur de remplir sa fonction.
Évaluez la provenance des images. Utilisez des images qui proviennent de registres connus.
Analysez les déploiements. Appliquez les politiques en fonction des résultats des analyses.
Utilisez des étiquettes et des annotations. Étiquetez ou annotez les déploiements en incluant les coordonnées de l'équipe responsable d'une application conteneurisée afin de simplifier la répartition.
Activez le contrôle d'accès basé sur les rôles (RBAC). Le RBAC contrôle l'autorisation des comptes d'utilisateurs et de services pour accéder au serveur de l'API Kubernetes d'un cluster.
Sécurité dans la phase d'exécution
Il est possible de réduire la probabilité d'incidents de sécurité au moment de l'exécution en adoptant des approches de sécurité proactives lors des phases de création et de déploiement. Pour identifier et traiter les menaces lors de l'exécution, il convient cependant de surveiller en continu l'activité des processus et les communications réseau.
Utilisez les informations contextuelles. Utilisez les informations collectées pendant les phases de création et de déploiement dans Kubernetes afin d'évaluer l'activité observée par rapport à l'activité attendue pendant l'exécution afin de détecter toute activité suspecte.
Analysez les déploiements en cours. Surveillez les déploiements en cours pour détecter les mêmes vulnérabilités récemment découvertes dans les images de conteneurs.
Utilisez des contrôles intégrés. Configurez le contexte de sécurité pour les pods afin de limiter leurs capacités.
Surveillez le trafic réseau. Observez et comparez le trafic réseau en direct à ce que les politiques réseau de Kubernetes autorisent pour identifier les communications imprévues.
Utilisez des listes d'autorisation. Identifiez les processus exécutés lors de l'exécution normale de l'application pour créer une liste d'autorisation.
Comparez l'activité d'exécution dans des pods déployés de manière similaire. Les réplicas qui présentent des écarts importants doivent faire l'objet d'une analyse.
Réduisez l'échelle des pods suspects à zéro. Utilisez les contrôles natifs de Kubernetes pour contenir les violations en ordonnant automatiquement à Kubernetes de réduire l'échelle des pods suspects à zéro, ou de détruire et de redémarrer les instances.
Sécurité de l'infrastructure Kubernetes
La sécurité va au-delà des images et des charges de travail. Elle englobe l'ensemble de l'infrastructure Kubernetes : les clusters, les nœuds, le moteur de conteneurs et même les environnements cloud.
Mettez à jour Kubernetes. La mise à jour de votre distribution Kubernetes permet d'appliquer des correctifs de sécurité et d'installer de nouveaux outils de sécurité.
Configurez le serveur de l'API Kubernetes. Désactivez l'accès non authentifié/anonyme et utilisez le chiffrement TLS pour les connexions entre les kubelets et le serveur de l'API.
Sécurisez etcd. etcd est un magasin de clés/valeurs qu'utilise Kubernetes pour accéder aux données. Sécurisez le kubelet. Désactivez l'accès anonyme au kubelet en démarrant le kubelet avec l'indicateur --anonymous-auth=false, et utilisez le contrôleur d'admission NodeRestriction pour limiter les éléments auxquels le kubelet peut accéder.
Sécurité dans le cloud
Quel que soit le type de cloud (cloud public, cloud privé, cloud hybride ou multicloud) qui héberge les conteneurs ou exécute Kubernetes, c'est toujours l'utilisateur du cloud, et non le fournisseur de cloud, qui doit sécuriser la charge de travail Kubernetes, notamment :
Images de conteneur : sources, contenus et vulnérabilités
Déploiements : services réseau, stockage et privilèges
Gestion de la configuration : rôles, groupes, liaisons de rôles et comptes de service
Application : gestion des secrets, étiquettes et annotations
Segmentation du réseau : politiques réseau dans le cluster Kubernetes
Exécution : détection des menaces et résolution des incidents
Mise en œuvre de la sécurité de Kubernetes
L'utilisation de conteneurs et de Kubernetes ne change en rien l'objectif de réduction des vulnérabilités.
Intégrez la sécurité dès le début du cycle de vie des conteneurs. La sécurité doit permettre aux développeurs et aux équipes DevOps de créer et déployer en toute confiance des applications prêtes pour la production.
Utilisez les contrôles de sécurité natifs pour Kubernetes. Les contrôles natifs empêchent les contrôles de sécurité d'entrer en conflit avec l'outil d'orchestration.
Laissez Kubernetes accorder la priorité à la correction.