kube-bench — аудит K8s по CIS Benchmark
Безопасность · Kubernetes
Проблема
Кластер поднят, работает, приложения катаются. Никто не знает, включён ли audit log, разрешён ли --anonymous-auth, не торчит ли etcd наружу и как настроен kubelet. Все смотрят в документацию CIS Kubernetes Benchmark и скучнеют от 100+ пунктов ручной проверки.
Решение
kube-bench от Aqua — автоматическая проверка кластера по CIS Kubernetes Benchmark. Запускается как Job в самом кластере, читает конфиги компонентов на нодах, выдаёт pass/warn/fail по каждому пункту.
Пример
Запуск одной командой на managed-кластере (EKS/GKE/AKS):
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job-eks.yaml
kubectl logs -f job/kube-bench
Фрагмент типичного отчёта:
[INFO] 4 Worker Node Security Configuration
[INFO] 4.1 Worker Node Configuration Files
[PASS] 4.1.1 Ensure kubelet service file permissions are 600 or more restrictive
[FAIL] 4.1.2 Ensure kubelet service file ownership is root:root
[WARN] 4.2.6 Ensure --protect-kernel-defaults is set to true
Для self-managed кластеров (kubeadm):
apiVersion: batch/v1
kind: Job
metadata:
name: kube-bench-master
spec:
template:
spec:
hostPID: true
nodeSelector:
node-role.kubernetes.io/control-plane: ""
containers:
- name: kube-bench
image: aquasec/kube-bench:v0.9.3
command: ["kube-bench", "run", "--targets=master"]
restartPolicy: Never
В CI — еженедельный прогон с отправкой отчёта в Slack:
kube-bench --outputfile report.json --json
jq '.Totals.total_fail' report.json # общее число FAIL
Когда применять
- Сразу после провиженинга кластера — базовая проверка.
- Раз в месяц на живых кластерах — ловить дрейф конфигурации.
- После любого апгрейда control-plane.
Источник
- ramitsurana/awesome-kubernetes — раздел Security
- aquasecurity/kube-bench
- CIS Kubernetes Benchmark
Как применить у себя
- Запустить kube-bench разовым Job на каждом кластере (dev/stage/prod).
- Разобрать FAIL: что можно поправить сразу (permissions, флаги kubelet), что требует обсуждения (enable audit log).
- Добавить еженедельный Job + хранение отчётов в S3.
- Когда после второй итерации количество FAIL стабильно уменьшается — статус Изучено.