Illustration de Kubernetes
Raccourcis

Meilleures pratiques en matière de sécurité avec Kubernetes

Copier l'URL

Les meilleures pratiques en matière de sécurité avec Kubernetes impliquent d'éliminer les vulnérabilités de sécurité connues pendant la phase de création, de corriger les erreurs de configuration pendant la phase de création/déploiement, de traiter les menaces lors de l'exécution et de sécuriser l'ensemble de l'infrastructure Kubernetes. 

Il s'agit de répondre aux principaux problèmes de sécurité consignés dans le dernier rapport sur l'état de la sécurité de Kubernetes, où plus de 50 % des personnes interrogées s'inquiètent des erreurs de configuration et des vulnérabilités causées par la nature hautement personnalisable de Kubernetes et la complexité liée à la sécurité des conteneurs. Pour surmonter les défis en matière de sécurité et éviter les ralentissements lors du déploiement d'applications, les entreprises doivent accorder la priorité à la sécurisation de Kubernetes pendant tout le cycle de vie du développement.

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 Kubernetes. 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.

En savoir plus sur la manière dont Red Hat peut sécuriser la communication entre les conteneurs

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éé.

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.
  • Utilisez des sources de confiance. Choisissez uniquement des images de base issues de sources de confiance et hébergées dans un référentiel fiable.
  • 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 versions 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 impossibles à corriger, 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.

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 et les plug-ins qui contrôlent le trafic entrant et sortant depuis l'application 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, rôles et 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 chaque déploiement avec les coordonnées de l'équipe responsable de l'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.

L'adoption de meilleures pratiques pour sécuriser Kubernetes lors des phases de création et de déploiement réduit la probabilité d'incidents de sécurité. 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. Exploitez 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 et de détecter ainsi 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 redémarrer les instances.

La sécurité de Kubernetes 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 vos distributions Kubernetes permet d'appliquer des correctifs de sécurité et d'installer de nouveaux outils de sécurité.
  • Sécurisez le serveur de l'API Kubernetes. Il sert de passerelle vers le plan de contrôle de 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. Activez la journalisation des audits pour bénéficier d'une visibilité sur les appels d'API atypiques.
  • Sécurisez etcd. etcd est un magasin de clés/valeurs qu'utilise Kubernetes pour accéder aux données. Sécurisez le kubelet pour réduire la surface d'attaque. 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, qui doit sécuriser la charge de travail Kubernetes, y compris les éléments suivants.

  • 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 Kubernetes, é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

L'utilisation de conteneurs et de Kubernetes ne change en rien l'objectif de réduction des vulnérabilités et des risques en matière de sécurité.

  • Intégrez les meilleures pratiques de sécurité dès le début du cycle de vie des conteneurs. La sécurité de Kubernetes doit permettre aux équipes de développement et 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.

La sécurisation des applications cloud-native et de l'infrastructure sous-jacente nécessite des changements importants dans l'approche de la sécurité d'une entreprise. Celle-ci doit effectuer des contrôles plus tôt dans le cycle de développement des applications, utiliser des contrôles intégrés pour appliquer les politiques qui préviennent les problèmes opérationnels et d'évolutivité, et rester en phase avec les calendriers de lancement toujours plus serrés.

Plateforme de sécurisation native pour Kubernetes, Red Hat® Advanced Cluster Security for Kubernetes permet aux entreprises de créer, de déployer et d'exécuter des applications cloud-native de manière plus sécurisée dans tous les environnements. Elle contribue à l'amélioration de la sécurité pendant la phase de création des applications, à la protection de la plateforme et des configurations d'applications, et à la détection des problèmes d'exécution ainsi qu'à leur résolution. 

Pour aller plus loin

ARTICLE

Conteneurs et machines virtuelles

Les conteneurs Linux et les machines virtuelles sont des environnements informatiques en paquets qui associent divers composants et les isolent du reste du système.

ARTICLE

L'orchestration des conteneurs, qu'est-ce que c'est ?

L'orchestration des conteneurs permet d'automatiser le déploiement, la gestion, la mise à l'échelle et la mise en réseau des conteneurs.

ARTICLE

Un conteneur Linux, qu'est-ce que c'est ?

Un conteneur Linux est un ensemble de processus isolés du système. Un conteneur s'exécute à partir d'une image distincte qui fournit tous les fichiers nécessaires à la prise en charge des processus qu'il contient.

En savoir plus sur les conteneurs

Produits

Une plateforme d'applications d'entreprise comprenant un ensemble unifié de services testés conçus pour distribuer des applications sur votre choix d'infrastructure.

Ressources

Formations

Cours gratuit

Présentation technique de l'exécution de conteneurs avec Red Hat

Cours gratuit

Présentation technique du déploiement d'applications conteneurisées

Cours gratuit

Développement d'applications cloud-native avec des architectures de microservices