Cybersecurity 101:
Sécurité Kubernetes
Kubernetes Security est un système open source permettant d'automatiser le déploiement, la mise à l'échelle et la gestion des applications conteneurisées. Il est plus facile de gérer, de sécuriser et de découvrir les conteneurs lorsqu'ils sont regroupés en unités logiques, et Kubernetes est aujourd'hui le principal système de gestion de conteneurs du marché. Pour sécuriser vos systèmes avec Kubernetes, vous devez comprendre comment le système fonctionne, quand et comment des vulnérabilités de différents types peuvent pénétrer dans votre système lors de la création, du déploiement ou de l'exécution d'applications à l'aide de Kubernetes.
D'une manière générale, la sécurité de Kubernetes concerne la sécurité native dans le cloud, dans vos clusters d'applications, dans les conteneurs et dans votre code. Cela implique de nombreux systèmes et processus imbriqués et qui se chevauchent, tels que le respect des meilleures pratiques de sécurité physique, la garantie d'un cluster et sécurité des applications, en gérant la sécurité des microservices, en respectant les normes de conception de conteneurs intelligents et en gérant le contrôle d'accès. Cela implique également l'analyse des vulnérabilités au moment de la construction, le cryptage du code, les poignées de contact TLS si nécessaire, la sécurisation des ports inutilisés et l'analyse régulière de l'ensemble du système pour vulnérabilités qui peuvent survenir dans un environnement de production.
Risques et défis
Les applications s'exécutent selon des cycles de création, de déploiement et d'exécution, et Kubernetes offre des avantages de sécurité intrinsèques à chaque étape du cycle de vie des applications. Cependant, cela peut encore poser de nombreux défis.
Surface d'attaque accrue
Votre système utilisera ou créera probablement d'innombrables conteneurs, et les conteneurs sont partout. Bien que l'utilisation de conteneurs vous permette de tirer parti des architectures de microservices et de fonctionner avec une vitesse et une portabilité accrues, leur utilisation peut également créer des angles morts en matière de sécurité qui exposent votre système à des vulnérabilités.
Il devient de plus en plus difficile de conserver une visibilité sur les opérations et la sécurité du système alors que vous déployez de plus en plus de conteneurs. En outre, il est également nécessaire d'enquêter sur des problèmes individuels, d'y répondre ou de reconfigurer des conteneurs mal configurés.
Registres et images mal utilisés
Dans quelle mesure les images que vous créez et les registres dans lesquels vous les stockez sont-ils sécurisés ? Les scannez-vous régulièrement ? Ne pas le faire peut nuire à la sécurité de vos applications et de vos systèmes sur l'ensemble de vos réseaux, et pas seulement dans l'environnement Kubernetes.
Effets de réseau
Étant donné que les conteneurs communiquent avec d'autres conteneurs et d'autres points de terminaison du réseau, une brèche dans sécurité des conteneurs peut se propager sur l'ensemble de votre réseau, en fonction du niveau d'accès du conteneur piraté au reste du réseau.
Pour relever ces défis et d'autres auxquels vous pourriez être confrontés, vous devrez intégrer la sécurité à vos cycles de création, de déploiement et d'exécution. À un niveau très élevé, vos images doivent être exemptes de vulnérabilités dangereuses, les déploiements doivent respecter les meilleures pratiques de sécurité et vos charges de travail de conteneurs doivent être protégées contre les menaces d'exécution.
Meilleures pratiques en matière de conteneurs
Dans les sections ci-dessous, nous décrivons plus en détail certaines des meilleures pratiques de Kubernetes à suivre pour les trois étapes du cycle de vie des conteneurs.
Phase de construction
Tout d'abord, vous devez sécuriser les images de vos conteneurs. Cela implique d'abord de créer des images sécurisées, puis de rechercher des vulnérabilités.
Les meilleures pratiques consistent à utiliser un minimum d'images de base et à éviter d'utiliser des images avec des shells ou des gestionnaires de packages de systèmes d'exploitation, car cela peut introduire des vulnérabilités inconnues dans votre système. Évitez également d'ajouter des composants inutiles et n'utilisez que des images à jour. Vous devez vous assurer que tous les outils, applications et images sont à jour.
L'analyse régulière est un élément important de la sécurité de Kubernetes. Veillez donc à utiliser un scanner capable d'identifier les vulnérabilités des images, ainsi que les vulnérabilités des packages du système d'exploitation et des environnements d'exécution tiers. Ces analyses et contrôles de sécurité doivent être intégrés et automatisés dans le cadre de votre pipeline d'intégration et de déploiement continus (CI/CD). Par exemple, le Validating Admission Controller de Kubernetes vous permet de refuser la création d'un déploiement si les images ne sont pas numérisées avant le déploiement ou si elles datent de plus de 90 jours.
Gardez à l'esprit que la meilleure politique de sécurité est la défense en profondeur. Ainsi, une vulnérabilité dans un domaine, tel qu'un conteneur, un cluster, le cloud ou dans votre code, peut être corrigée avant qu'elle n'ait un impact sur la production et avant qu'elle n'atteigne d'autres parties de votre réseau.
Phase de déploiement
Vous devez configurer votre infrastructure Kubernetes en toute sécurité avant de déployer des charges de travail. Vous devez savoir ce que vous déployez et comment. À partir de là, vous pouvez identifier les menaces ou violations de sécurité potentielles et y répondre.
Pour savoir exactement ce que vous déployez, vous devez comprendre :
- Composantes
- Vulnérabilités connues
- Pods qui seront déployés
- Tous les clusters, espaces de noms et nœuds concernés
- S'il fonctionnera de manière privilégiée
- Avec quels déploiements il communiquera
Vous devez également savoir à quoi il peut accéder et si le déploiement est déjà conforme à des exigences de sécurité ou de politique, ou s'il les enfreint.
À partir de là, vous pouvez mettre en œuvre les recommandations relatives à la phase de déploiement. Il s'agit notamment d'utiliser des espaces de noms pour isoler les charges de travail sensibles afin de contenir les attaques potentielles, de limiter l'impact des erreurs ou des actions malveillantes entreprises par des utilisateurs autorisés et de contrôler le trafic entre les pods et les clusters via segmentation du réseau pour empêcher tout mouvement latéral non autorisé entre les conteneurs.
En règle générale, vous devez toujours évaluer les privilèges d'accès de n'importe qui et de n'importe quel élément de votre système, y compris les autorisations d'accès de vos conteneurs. Ne donnez à vos conteneurs que les privilèges et les fonctionnalités dont ils ont besoin pour exécuter les fonctions requises.
De même, ne déployez jamais de code provenant d'une source inconnue, ce qui, dans Kubernetes, signifie utiliser uniquement des images provenant de registres connus ou dont l'accès est autorisé. Les ressources commerciales pertinentes, telles que les développeurs et les programmeurs, doivent savoir comment étiqueter les déploiements avec le nom ou l'alias correct afin que les équipes concernées puissent résoudre les problèmes de sécurité dont elles sont responsables, le cas échéant.
Phase d'exécution
Vous pouvez gérer les défis de sécurité de Kubernetes en améliorant la visibilité de l'environnement d'exécution, en détectant les menaces d'exécution et en y répondant au fur et à mesure qu'elles surviennent.
Cela implique la surveillance de l'activité des processus, des communications réseau entre différents conteneurs et services conteneurisés, ainsi que des communications entre les conteneurs, les services conteneurisés et des tiers, des clients ou des serveurs externes.
En comparant l'activité observée à l'activité attendue, vous pouvez identifier puis stopper les activités suspectes. L'extension de l'analyse des vulnérabilités aux déploiements en cours d'exécution vous aidera à détecter les vulnérabilités d'exécution qui n'apparaissaient pas auparavant. De nombreux contrôles intégrés à Kubernetes, tels que les systèmes de fichiers racine en lecture seule, peuvent empêcher les attaques nécessitant l'installation de logiciels, et vous devez surveiller le trafic réseau pour limiter les communications inutiles ou non sécurisées.
Fonctionnalités intégrées
Bien que la sécurité de Kubernetes soit importante pendant les phases de création, de déploiement et d'exécution, les problèmes de sécurité doivent être abordés de manière globale. Cela signifie que vous devez commencer par la sécurité de l'infrastructure, puis faire évoluer votre réseau vers le haut ou vers le bas en adoptant d'abord une vision plus large, puis une vue plus granulaire, en cluster/conteneur/code de vos systèmes.
Mettez toujours à jour votre Kubernetes vers la dernière version si possible, et sécurisez etcd, qui est un magasin de valeurs clés utilisé par Kubernetes pour l'accès aux données. Assurez-vous que toutes les connexions des clients sont assurées uniquement via TLS et intégrez activement la sécurité le plus tôt possible dans le cycle de vie des conteneurs. Familiarisez-vous également avec les contrôles natifs de Kubernetes.
Voici des exemples de fonctionnalités intégrées de Kubernetes qui peuvent dynamiser l'orchestration de vos conteneurs :
- Open Policy Agent (OPA): L'OPA unifie l'application des politiques via un langage déclaratif de haut niveau grâce auquel vous pouvez spécifier la politique sous forme de code. Cela permet d'alléger la charge que représente la prise de décisions politiques pour votre logiciel. Utilisez OPA pour appliquer les politiques personnalisées que vous souhaitez aux objets Kubernetes sans avoir à recompiler ou à reconfigurer votre serveur d'API Kubernetes.
- Politique de sécurité des pods (PSP) : Utilisez PSP pour définir les conditions que des pods spécifiques doivent respecter pour être acceptés dans le système. Les paramètres de sécurité PSP, appliqués à l'aide de contextes de sécurité, vous permettent également de définir des privilèges et des contrôles d'accès pour des pods spécifiques.
- Contrôle d'accès basé sur les rôles (RBAC): Le RBAC gère les décisions d'autorisation. Cela permet aux administrateurs de configurer dynamiquement les politiques d'accès via des liaisons de rôles et des autorisations pour des utilisateurs ou des groupes d'utilisateurs spécifiques.
- Politique du réseau: politiques de communication qui régissent la manière dont les groupes de pods peuvent communiquer entre eux et avec d'autres points de terminaison du réseau.
Savoir quand, où et comment utiliser ces outils et d'autres outils intégrés pour tirer le meilleur parti de Kubernetes peut prendre du temps. Il en va de même pour mettre en place une défense approfondie, identifier et corriger les failles de sécurité lorsqu'elles apparaissent, sécuriser vos clusters, garantir la sécurité des pods, réduire surface d'attaque, et la gestion du trafic réseau. Il est toutefois essentiel de garantir la sécurité de Kubernetes si vous souhaitez bénéficier de l'évolutivité, de la réplicabilité, de la gestion simplifiée et du déploiement rapide des conteneurs pour lesquels Kubernetes a été conçu.
Conclusion
Si vous débutez dans Kubernetes, un spécialiste Kubernetes tiers peut vous aider à mettre rapidement en place l'orchestration des clusters en fonction des types d'applications que votre organisation développe et des types de déploiements dont vous avez besoin.
En savoir plus
Découvrez comment Segmentation Zero Trust sécurise les déploiements de conteneurs, y compris les plateformes Kubernetes et RedHat OpenShift.