kube-bench est un outil d'audit de sécurité développé par Aqua Security qui vérifie la configuration d'un cluster Kubernetes par rapport aux benchmarks CIS (Center for Internet Security). Il teste les composants du control plane (API server, etcd, controller manager, scheduler) et des nœuds workers (kubelet, fichiers de configuration) pour identifier les configurations non sécurisées, et produit un rapport détaillé avec des recommandations de remédiation. C'est l'outil de référence pour valider la posture sécurité d'un cluster avant mise en production ou lors d'audits de conformité.
Informations essentielles
Origine : Aqua Security · Licence : Apache 2.0 · Architectures : x86_64, ARM64
Liens : Documentation · GitHub · Releases
Support : Projet actif maintenu par Aqua Security. Benchmarks CIS mis à jour avec les nouvelles versions de Kubernetes.
Stack par défaut
| Composant | Valeur |
|---|---|
| Standard | CIS Kubernetes Benchmark (v1.8+ pour K8s 1.27+) |
| Sections auditées | master, node, etcd, policies, managedservices |
| Formats de sortie | Texte (terminal), JSON, JUnit XML, ASFF (AWS Security Hub) |
| Déploiement | Binaire direct (nœud), Job Kubernetes, container Docker |
| Support distributions | kubeadm, EKS, GKE, AKS, OpenShift, k3s, RKE2… |
Prérequis
| Ressource | Valeur |
|---|---|
| Accès | Exécution directe sur les nœuds (pour accéder aux fichiers de config) |
| Ou | Job Kubernetes avec hostPID: true et accès aux volumes système |
| Kubernetes | Toutes versions (benchmarks par version) |
Installation
Via Job Kubernetes (recommandé)
# Job pour auditer les nœuds master
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job-master.yaml
# Attendre la fin
kubectl wait --for=condition=complete job/kube-bench-master --timeout=120s
# Voir le rapport
kubectl logs job/kube-bench-master
# Nettoyer
kubectl delete job kube-bench-master
Binaire direct (sur le nœud)
# Télécharger le binaire
curl -Lo kube-bench.tar.gz \
https://github.com/aquasecurity/kube-bench/releases/latest/download/kube-bench_linux_amd64.tar.gz
tar -xzf kube-bench.tar.gz
sudo mv kube-bench /usr/local/bin/
# Auditer le nœud courant (détecte auto master ou worker)
kube-bench
# Ou spécifier la cible
kube-bench run --targets master
kube-bench run --targets node
Via container Docker (sans installation)
# Sur un nœud master
docker run --rm --pid=host --userns=host \
-v /etc:/etc:ro -v /var:/var:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v $(which kubectl):/usr/bin/kubectl:ro \
aquasec/kube-bench:latest run --targets master
Vérification de l'installation
# 1. Vérifier la version et les benchmarks disponibles
kube-bench version
# 2. Lancer un audit rapide sur le nœud courant
kube-bench 2>&1 | tail -20
# Doit afficher le résumé PASS/FAIL/WARN
# 3. Vérifier le résumé de conformité
kube-bench 2>&1 | grep -E "^== Summary"
# == Summary master ==
# X checks PASS
# Y checks FAIL
# Z checks WARN
# W checks INFO
# 4. Export JSON pour analyse
kube-bench --json > kube-bench-report.json
cat kube-bench-report.json | jq '.Controls[].tests[].results[] | select(.status=="FAIL") | .test_desc' | head -10
Pièges courants
| Symptôme | Cause | Correction |
|---|---|---|
Unable to detect version | Distribution non reconnue | Passer --version 1.27 manuellement |
| Tous les checks en WARN | kube-bench exécuté hors du nœud | Monter les volumes système /etc, /var dans le container |
| Checks master sur un worker | Mauvaise cible | Passer --targets node explicitement |
| Faux positifs sur EKS/GKE | Managed K8s - access control plane limité | Utiliser --benchmark eks-1.4 ou gke-1.2 |
Lire le rapport
Structure d'un résultat
[INFO] 1 Control Plane Components
[INFO] 1.1 Master Node Configuration Files
[PASS] 1.1.1 Ensure that the API server pod specification file ...
[FAIL] 1.1.2 Ensure that the API server pod specification file ...
Remediation: Run the below command:
chmod 644 /etc/kubernetes/manifests/kube-apiserver.yaml
[WARN] 1.2.1 Ensure that the --anonymous-auth argument is set to false
- PASS : la configuration est conforme
- FAIL : non conforme, remédiation fournie
- WARN : vérification manuelle requise (dépend du contexte)
- INFO : informatif
Sections du rapport
| Section | Contenu |
|---|---|
1 - Control Plane | API server, etcd, controller manager, scheduler |
2 - Etcd | Configuration etcd, authentification, chiffrement |
3 - Control Plane Policies | RBAC, admission controllers, network policies |
4 - Worker Node | Kubelet, fichiers de configuration des nœuds |
5 - Policies | Pod Security Standards, NetworkPolicies, RBAC |
Audit ciblé
# Auditer uniquement le contrôle des fichiers de configuration
kube-bench run --check 1.1.1,1.1.2,1.1.3
# Auditer une section complète
kube-bench run --group 1.2 # API server checks only
# Audit d'un cluster managé (EKS)
kube-bench --benchmark eks-1.4 run --targets node
# Audit GKE
kube-bench --benchmark gke-1.2 run
# Sortie JUnit (pour intégration CI)
kube-bench --junit > kube-bench-junit.xml
Automatisation en CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: kube-bench-audit
namespace: kube-system
spec:
schedule: "0 2 * * 1" # Chaque lundi à 2h
jobTemplate:
spec:
template:
spec:
hostPID: true
containers:
- name: kube-bench
image: aquasec/kube-bench:latest
command: ["kube-bench", "--json"]
volumeMounts:
- name: var-lib-kubelet
mountPath: /var/lib/kubelet
readOnly: true
- name: etc-systemd
mountPath: /etc/systemd
readOnly: true
- name: etc-kubernetes
mountPath: /etc/kubernetes
readOnly: true
restartPolicy: Never
volumes:
- name: var-lib-kubelet
hostPath: {path: /var/lib/kubelet}
- name: etc-systemd
hostPath: {path: /etc/systemd}
- name: etc-kubernetes
hostPath: {path: /etc/kubernetes}
Mise à jour
# Mettre à jour le binaire
curl -Lo kube-bench.tar.gz \
https://github.com/aquasecurity/kube-bench/releases/latest/download/kube-bench_linux_amd64.tar.gz
tar -xzf kube-bench.tar.gz && sudo mv kube-bench /usr/local/bin/
# Mettre à jour l'image Docker
docker pull aquasec/kube-bench:latest
Troubleshooting
# Mode verbose pour déboguer
kube-bench --v=2
# Vérifier le fichier de configuration utilisé
kube-bench --config-dir /path/to/cfg
# Lister les benchmarks disponibles
ls /etc/kube-bench/cfg/
# Vérifier quelle version de K8s est détectée
kube-bench --v=2 2>&1 | grep "Kubernetes version"
Commandes utiles
kube-bench # Audit complet auto (master ou node)
kube-bench run --targets master # Auditer le control plane
kube-bench run --targets node # Auditer un nœud worker
kube-bench run --targets etcd # Auditer etcd
kube-bench --json > report.json # Sortie JSON
kube-bench --junit > report.xml # Sortie JUnit
kube-bench run --check 1.1.1,4.2.1 # Checks spécifiques uniquement
kube-bench --benchmark eks-1.4 # Benchmark EKS spécifique
Ressources
- GitHub : https://github.com/aquasecurity/kube-bench
- Benchmarks CIS Kubernetes : https://www.cisecurity.org/benchmark/kubernetes
- Releases : https://github.com/aquasecurity/kube-bench/releases
- Jobs Kubernetes exemples : https://github.com/aquasecurity/kube-bench/tree/main/job.yaml