Kubernetes est une plateforme pour exécuter et coordonner des applications conteneurisées sur un cluster de machines.
Il s’agit d’un système conçu pour gérer complètement le cycle de vie des applications et des services conteneurisés à l’aide des méthodes et composants qui fournissent la prévisibilité, l’évolutivité et la haute disponibilité.
Bien que l’installation et la mise en œuvre d’un cluster K8S devienne de plus en plus facile, certains aspects de configurations avancées restent, tout de même, critiques à aborder.
Parmi ces sujets, on trouve, bien évidemment, le sujet “Sécurité”. Pour y répondre convenablement, il est toujours conseillé d’avoir recours aux standards existants et aux solutions open source qui permettront de résoudre cette problématique d’une manière plus agile et efficace.
Merci le CIS !
Heureusement le CIS (Center of Internet Security) publie une série de documents de référence avec des instructions à suivre sur l’audit et la correction de la configuration si celle-ci ne passe pas avec succès le test d’audit.
CIS Benchmarks regroupe un ensemble de bonnes pratiques pour sécuriser les configurations des systèmes IT. Ces recommandations sont rédigées en collaboration par un groupe d’experts en sécurité.
Dans cet article nous vous présentons trois outils d’audit de sécurité pour Kubernetes
CHEF INSPEC
Chef InSpec est un Framework gratuit et open source pour tester et auditer les applications et l’infrastructure.
Chef InSpec fonctionne en comparant l’état réel du système avec l’état souhaité décrit sous la forme d’un code Chef InSpec facile à lire et à écrire.
Chef InSpec détecte les violations et affiche les constatations sous forme de rapport.
Nous allons utiliser les profils Chef InSpec pour exécuter une analyse de sécurité sur un cluster K8s.
Un profil chef InSpec est une structure autonome qui organise les contrôles pour prendre en charge la gestion des dépendances et la réutilisation du code.
Un profil doit avoir la structure suivante :
L’audit sera lancé par un profil InSpec, développé par Kristian Vlaardingerbroek
- Installation
#RedHat Ubuntu, and macOS
$ curl https://omnitruck.chef.io/install.sh | sudo bash -s — -P inspec
- Usage
Tout d’abord nous téléchargeons le profil à partir du github.
$ git clone https://github.com/dev-sec/cis-kubernetes-benchmark
Maintenant nous exécutons l’audit et générons un rapport en HTML
$ inspec exec cis-kubernetes-benchmark –reporter=html > result.html
Voilà, quand l’audit est terminé il suffit alors d’ouvrir le fichier HTML via un navigateur et de visualiser les résultats.
Kube-bench
Kube-bench est un outil open source créé par Aqua Security qui sert à exécuter les tests de Benchmark de Kubernetes.
C’est une sorte de « scanner » de configuration d’infrastructure qui automatise la vérification de la configuration Kubernetes par rapport à la référence CIS pour les K8s.
Il couvre l’authentification des utilisateurs, les autorisations et les données sécurisées, entre autres.
Il est écrit en tant qu’application Go (et distribué comme conteneur, bien sûr), mais chaque test individuel est défini dans un fichier YAML, ce qui facilite l’extension et la mise à jour de la suite de tests à mesure que le benchmark évolue avec Kubernetes lui-même.
Il prend également en charge la sortie au format JSON, pour faciliter l’intégration avec des outils automatisés.
Kube-ench doit être exécuté sur chacun des nœuds afin de déterminer dans quelle mesure un déploiement répond aux recommandations des meilleures pratiques de la communauté CIS.
Non seulement il permet d’avoir des informations concernant la réussite ou l’échec de chaque test, mais fournit également des conseils sur la façon de résoudre les problèmes détectés.
Cela peut, par exemple, inclure des recommandations pour modifier ou supprimer un paramètre de configuration non sécurisé sur l’un des exécutables Kubernetes, ou pour rendre les autorisations sur un fichier de configuration plus restrictives.
L’outil Kube-ench permet aussi de voir immédiatement si votre configuration est conforme aux meilleures pratiques fixées dans le document de référence, notamment :
- Authentification et autorisation appropriées des utilisateurs ;
- Sécurisation des données en transit ;
- Sécurisation des données elles-mêmes ;
- Utiliser le moins de privilèges
Kubeaudit
Repos : https://github.com/Shopify/kubeaudit/
Kubeaudit est un outil open source créé à l’origine par la société canadienne Shopify qui a développé plusieurs outils open source notamment autour de Kubernetes, par exemple kube-deploy et kubeaudit.
La première version de kubeaudit est sortie le 22 Sep 2017. Il est développé en Go et il est actuellement à la version 0.7.
Le but de kubeaudit est de détecter diverses anomalies sur Kubernetes, donc de garantir que le cluster est aussi sûr que possible.
Installation :
Kubeaudit se présente comme un outil en ligne de commande. Pour son installation il suffit de compiler un binaire en go, et il est tout de suite disponible dans la CLI.
Pour Go 1.12 et supérieur :
GO111MODULE = on go get -v github.com/Shopify/kubeaudit
git clone https://github.com/Shopify/kubeaudit.git cd kubeaudit make make install
En termes d’audit kubeaudit permet de faire :
Audit Pod security context (psp):
- Audit allowPrivilegeEscalation : Kubeaudit détecte les pods qui n’ont pas le champs allowPrivilegeEscalationen défini sur false.
Ce champ contrôle qu’aucun processus enfant d’un conteneur ne peut obtenir plus de privilèges que son parent
- Audit runAsNonRoot : Kubeaudit détecte si le conteneur est exécuté en tant que root.
Spécifier « runAsNonRoot : true » empêche les conteneurs de s’exécuter en tant que root (possibilité d’utiliser runAsuser a la place)
- Audit readOnlyRootFilesystem : Impose que les conteneurs s’exécutent avec un système de fichiers racine en lecture seule.
- Audit capabilités : Fournit une liste blanche des capacités qui peuvent être ajoutées à un conteneur.
- Audit privilèges : Kubeaudit détecte si le conteneur est exécuté avec privilèges.
Audit Service Accounts : Permet de détecter les comptes de services obsolètes et la détection de l’utilisation du compte de service par défaut par les pods en proposant de mettre le champ AutomountServiceAccountToken en false.
Audit network policies : Vérifie que chaque namespace a une « Network policy » installée par défaut.
Audit resources limits : Vérifie que chaque ressource a une limite de CPU et de mémoire.
Audit namespaces : kubeaudit détecter si hostNetwork, hostIPC ou hostPID est soit mis à true en podSpec pour les Pod.
En conclusion, un tableau de synthèse
Le tableau comparatif ci-dessous propose une synthèse simple et rapide des 3 outils étudiés, avec la référence à l’Audit Pod Security Context détaillé plus haut dans l’article.
Critère | Kube-bench | Kubeaudit | Chef inspec |
Audit cluster | 1 | 2 | 3 |
Conformité des objets k8s | 4 | ||
Security runtime | X | 1 | X |
CIS
Benchmark |
2 | X | 3 |
Génération recommandations | 4 | 5 | 6 |
Génération des rapports | Texte brut | Json | Html |
Lieu d’exécution | Master & nœud | Master | Master |