Sécurité

kube-bench

Audit CIS Kubernetes Benchmark par Aqua Security. Vérifie API server, etcd, kubelet, scheduler. Job K8s ou binaire, rapport avec remédiation.

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

ComposantValeur
StandardCIS Kubernetes Benchmark (v1.8+ pour K8s 1.27+)
Sections auditéesmaster, node, etcd, policies, managedservices
Formats de sortieTexte (terminal), JSON, JUnit XML, ASFF (AWS Security Hub)
DéploiementBinaire direct (nœud), Job Kubernetes, container Docker
Support distributionskubeadm, EKS, GKE, AKS, OpenShift, k3s, RKE2…

Prérequis

RessourceValeur
AccèsExécution directe sur les nœuds (pour accéder aux fichiers de config)
OuJob Kubernetes avec hostPID: true et accès aux volumes système
KubernetesToutes 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ômeCauseCorrection
Unable to detect versionDistribution non reconnuePasser --version 1.27 manuellement
Tous les checks en WARNkube-bench exécuté hors du nœudMonter les volumes système /etc, /var dans le container
Checks master sur un workerMauvaise ciblePasser --targets node explicitement
Faux positifs sur EKS/GKEManaged 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

SectionContenu
1 - Control PlaneAPI server, etcd, controller manager, scheduler
2 - EtcdConfiguration etcd, authentification, chiffrement
3 - Control Plane PoliciesRBAC, admission controllers, network policies
4 - Worker NodeKubelet, fichiers de configuration des nœuds
5 - PoliciesPod 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

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic