Aller au contenu

04. Sécurité des conteneurs & Kubernetes

04. Sécurité des conteneurs & Kubernetes

Sécurité de Docker : Hardening des images et des conteneurs

Images de base minimalesUtilisateur non-root obligatoire
FROM ubuntu:latest
FROM alpine:3.19
# Pas de USER → root par défaut
RUN adduser -D appuser && USER appuser
Pas de secrets dans les couchesFilesystem en lecture seule
ENV DB_PASSWORD=secret123
ARG DB_PASSWORD (build-time) + Secrets manager runtime
docker run myapp
docker run —read-only —tmpfs /tmp myapp
Capabilities Linux limitéesScan CVE obligatoire
# Toutes les capabilities accordées
—cap-drop=ALL —cap-add=NET_BIND_SERVICE
# Image déployée sans scan
trivy image myapp:latest (gate CI bloquant)

Kubernetes RBAC : Contrôle d’accès au cluster

RBAC K8s : Sujets (Users/Groups/ServiceAccounts) → Verbs (get/list/create/delete) → Resources (pods/secrets/deployments)

Objets RBAC KubernetesAnti-patterns K8S à éviter
• Role : permissions dans un namespace spécifique
• ClusterRole : permissions cluster-wide (tous namespaces)
• RoleBinding : lie un Role à des sujets dans un namespace
• ClusterRoleBinding : lie un ClusterRole à des sujets globalement
• ServiceAccount : identité pour les pods (≠ user humain)
• Wildcard dans les verbes : verbs: [”*”] : JAMAIS
• ClusterAdmin bindé à un ServiceAccount applicatif
• Default ServiceAccount avec des droits (le désactiver)
• Partage de ServiceAccount entre plusieurs apps
• Oublier de désactiver automountServiceAccountToken
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
namespace: default
rules:
- apiGroups: [""]
resources: [“pods”]
verbs: [“get”, “list”, “watch”] # jamais ”*“

Network policies : Micro-segmentation dans Kubernetes

Principe de fonctionnement
Contrôle du trafic Est-OuestContrôle du trafic Nord-SudApproche “Default Deny”
• Pod → Pod
• Namespace → Namespace
• Pod → Service
• Entrées depuis l’extérieur
• Sorties vers Internet ou
vers des services externes
• Tout est interdit par défaut
• Les flux nécessaires sont
explicitement autorisés
• Les autres communications
restent bloquées

Attention : Par défaut dans Kubernetes, tout le trafic est autorisé entre tous les pods de tous les namespaces !

Default Deny AllAllow Namespace → NamespaceAllow Egress HTTPS
Première règle déployée dans chaque
namespace. Bloque tout trafic IN et
OUT. Puis ouvrir uniquement les flux
nécessaires.
Autoriser uniquement le trafic entre
namespaces spécifiques. Ex: ns/frontend →
ns/backend uniquement via port 8080.
Autoriser uniquement le trafic sortant
HTTPS vers Internet pour les mises à jour,
webhooks, API externes.
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
# bloque TOUT
# puis ouvrir sélectivement
spec:
ingress:
- from:
- namespaceSelector:
matchLabels:
name: frontend
- podSelector: {}
spec:
podSelector:
matchLabels:
app: myapp
egress:
- ports:
- port: 443
protocol: TCP

Fonctionnement

Slide 153

Pod security standards (PSS)

Les Pod Security Standards (PSS) définissent des niveaux de sécurité prédéfinis qui contrôlent les configurations autorisées des Pods Kubernetes afin de réduire les risques de compromission.

Slide 156

Admission controllers : Contrôler les ressources avant leur

création Un Admission Controller est un mécanisme (plugin) Kubernetes qui intercepte les requêtes envoyées à l’API Server après l’authentification et l’autorisation, mais avant l’enregistrement de la ressource dans le cluster. Il permet de modifier, valider ou refuser une ressource afin d’appliquer des règles de sécurité, de conformité ou de gouvernance.

ÉlémentDescription
RôleIntercepter les requêtes envoyées à l’API Server avant l’enregistrement de la
ressource
PositionAprès l’authentification et l’autorisation RBAC, avant la persistance dans etcd
TypesMutating Admission Controller et Validating Admission Controller
Objectif sécuritéEmpêcher l’entrée de configurations dangereuses ou non conformes dans le cluster
RésultatLa ressource est modifiée, acceptée ou refusée
1Un utilisateur, une CI/CD ou un contrôleur envoie
une requête à l’API Kubernetes
2Kubernetes authentifie l’identité
3Kubernetes vérifie les droits avec RBAC
4L’Admission Controller intercepte la requête
5Un contrôleur mutating peut modifier la
ressource
6Un contrôleur validating vérifie la conformité
7La ressource est acceptée ou refusée avant
création

Slide 159

Admission controllers courants

ContrôleurTypeRôle dans l’admission
PodSecurityValidatingApplique les niveaux PSS Privileged, Baseline, Restricted aux Pods
ResourceQuotaValidatingRefuse les créations qui dépassent les quotas d’un namespace
LimitRangerMutating / ValidatingDéfinit des valeurs par défaut ou vérifie les limites CPU / mémoire
ValidatingAdmissionWebhookValidatingDélègue la validation à un webhook externe
MutatingAdmissionWebhookMutatingDélègue la modification d’une ressource à un webhook externe
ValidatingAdmissionPolicyValidatingApplique des règles d’admission déclaratives avec CEL
ServiceAccountMutating / ValidatingAssocie les Pods à une identité Kubernetes et vérifie certains
prérequis

OPA Gatekeeper : Appliquer des politiques Kubernetes

OPA Gatekeeper est un contrôleur d’admission Kubernetes qui applique des politiques déclaratives exécutées par Open Policy Agent. Il permet de refuser ou modifier des ressources qui ne respectent pas les règles définies pour le cluster. La documentation officielle le décrit comme un webhook validating et mutating qui applique des politiques basées sur des CRD et exécutées par OPA.

ÉlémentDescription
RôleContrôler les ressources Kubernetes avant leur création ou modification
PositionS’appuie sur les Admission Controllers Kubernetes
MoteurOpen Policy Agent
TypeValidating et mutating webhook
LangageRego
Objets clésConstraintTemplate et Constraint
ObjectifImposer automatiquement des règles de sécurité, conformité et gouvernance

Slide 163

Exemples de politiques

OPA Gatekeeper transforme les règles de sécurité Kubernetes en politiques exécutées automatiquement à l’entrée du cluster.

PolitiqueContrôle appliqué
Interdire les Pods privilégiésBloque les configurations à risque
Imposer des labels obligatoiresRenforce la traçabilité
Interdire les images latestAméliore la reproductibilité
Restreindre les registres d’imagesContrôle la provenance des conteneurs
Interdire les volumes hostPathRéduit l’exposition du nœud hôte
Imposer des limites CPU / mémoireEncadre la consommation de ressources

Synthèse

Slide 166

Polaris : Validateur des meilleures pratiques Kubernetes

(Fairwinds) Polaris valide que vos ressources K8s suivent les meilleurs pratiques de sécurité et de fiabilité. Il peut fonctionner en audit, en CI/CD ou en admission webhook en temps réel.

ConceptFonctionnement
• Validateur des meilleurs pratiques K8s (Fairwinds, OSS)
• 3 modes : CLI audit, CI/CD check, Admission webhook
• Vérifie : security contexts, resource limits et health
checks
• Checks par catégorie : sécurité, fiabilité et efficacité
• Profils de sévérité configurables
(danger/warning/ignore)
• Score global 0-100 : ‘fiabilité et sécurité du cluster’
• Alternatives : Kubescape (plus complet) · kube-score
• Mode webhook : bloque les déploiements non conformes
• Checks clés : runAsNonRoot, readOnlyRootFilesystem,
resource limits/requests, liveness probe
• Intégration Helm
$> polaris audit —format=pretty (audit cluster)
$> polaris audit —audit-path=./k8s/ (audit
manifestes locaux)
$> polaris audit —format=score (score 0-100)

Les vérifications

CritiqueWarningConforme
• privileged = true
• allowPrivilegeEscalation = true
• hostPID = true
• hostIPC = true
• hostNetwork = true
• Exécution en root
(runAsNonRoot = false)
• runAsNonRoot non défini
• readOnlyRootFilesystem non défini
• securityContext absent ou
incomplet
• CPU requests non définies
• Memory requests non définies
• CPU limits non définies
• Memory limits non définies
• livenessProbe absente
• readinessProbe absente
• startupProbe absente
• Image utilisant le tag latest
• Image sans tag explicite
• Exécution non-root
(runAsNonRoot = true)
• allowPrivilegeEscalation = false
• readOnlyRootFilesystem = true
• privileged = false
• Capabilities Linux réduites (drop:
ALL)
• Requests et Limits définies
• Probes configurées
• Security Context conforme
• Image versionnée avec un tag
explicite

Slide 170

Falco : Runtime security & détection comportementale

  • Projet CNCF open source de détection des menaces en temps réel pour Linux, containers et Kubernetes.
  • Analyse les syscalls et les événements K8s pour détecter les comportements anormaux pendant l’exécution.
  • Règles Falco par défaut : spawn shell dans container · lecture /etc/shadow · écriture dans /bin ou /usr/bin · connexion réseau inattendue · ptrace syscall
  • Fonctionnement : hook kernel via eBPF (recommandé) ou module noyau → analyse syscalls en temps réel — overhead <5%
  • Sources : syscalls Linux · K8s Audit Logs · Cloud APIs (AWS CloudTrail plugin) · container runtime events
  • Destinations d’alertes : stdout/syslog · Slack/PagerDuty via Falco Sidekick · SIEM via Fluentd/Logstash · SNS/Pub-Sub
  • Exemple règle custom : alerter si un process écrit dans /etc/crontab ou crée une tâche cron dans un container Falco est l’équivalent d’un système de détection d’intrusion (IDS) pour Kubernetes : il observe les activités des conteneurs et déclenche des alertes dès qu’un comportement suspect est détecté.

Ce que Falco surveille

Activités suspectesKubernetesHôtes LinuxExemples de détections
• Shell lancé dans un
conteneur
• Exécution d’outils
d’administration
• Téléchargement de
fichiers suspects
• Modification de
fichiers système
• Escalade de
privilèges
• Création de Pods
privilégiés
• Utilisation de
conteneurs root
• Modification de
ressources
sensibles
• Accès anormaux
à l’API
Kubernetes
• Exécution de
commandes sensibles
• Connexions réseau
suspectes
• Accès aux fichiers
critiques
• Shell interactif dans un
conteneur
• Conteneur exécuté en mode
privilégié
• Écriture dans /etc
• Exécution de curl, wget ou nc
dans un Pod applicatif
• Connexion réseau vers une
adresse inconnue
• Lecture de secrets Kubernetes

Le SOAR (Security Orchestration, Automation and Response) est une plateforme qui orchestre les outils de sécurité, automatise les processus de réponse aux incidents et assiste les équipes SOC dans la gestion des cyberattaques. Exemples de solutions : Cortex XSOAR, Splunk SOAR, Microsoft Sentinel, IBM QRadar SOAR, FortiSOAR, Google Security Operations et Tines.

Slide 174

Concept & positionFonctionnalités clés
• CWPP (Cloud Workload Protection Platform) pour
Kubernetes
• Concurrent : Falco (runtime) + Trivy (scan) + Calico
• NeuVector = solution tout-en-un : scan + runtime +
réseau
• Déployé en DaemonSet sur chaque nœud Kubernetes
• Alternatives : Aqua Security, Sysdig, Prisma Cloud
Compute
• Forces : réseau Zero Trust natif, sans agent séparé
• Sécurité réseau : micro-segmentation automatique des Pods
et contrôle des communications
• Apprentissage comportemental : identification automatique
des flux et comportements légitimes
• Protection à l’exécution (runtime) : détection et blocage des
activités anormales ou malveillantes
• Analyse des vulnérabilités : scan continu des images de
conteneurs et des nœuds Kubernetes
• Conformité réglementaire : vérification automatisée des
référentiels CIS Kubernetes, PCI-DSS et HIPAA
• Pare-feu applicatif (WAF) : protection des applications et des
flux HTTP/HTTPS (couche 7)
• Prévention des fuites de données (DLP) : détection des
données sensibles circulant dans les communications réseau

Slide 177

KSPM & CIS Kubernetes benchmark (kube-bench)

  • KSPM (Kubernetes Security Posture Management) évalue en continu la configuration de vos clusters Kubernetes contre des référentiels de sécurité (CIS Benchmarks, MITRE ATT&CK for Kubernetes, NSA Kubernetes Hardening Guide).
  • kube-bench (Aqua Security) : outil open source qui vérifie la conformité CIS Kubernetes Benchmark : 100+ vérifications automatiques
  • Domaines audités : kube-apiserver · etcd · kube-scheduler · kube-controller-manager · kubelet · fichiers de configuration
  • Solutions KSPM marché : Prisma Cloud KSPM · Wiz for Kubernetes · Aqua Security · Sysdig Secure · Lacework
  • Détection de drift : comparer config cluster en cours vs. IaC Terraform/Helm : alerter sur les divergences Recommandation : lancer kube-bench à chaque nouveau nœud ajouté et hebdomadairement sur tous les cluster.

Kubescape : Kubernetes security posture management

  • Kubescape est le scanner KSPM de référence de la CNCF.
  • Il audite votre cluster K8s contre les frameworks CIS Benchmark, NSA/CISA, MITRE ATT&CK et les contrôles RBAC.
Concept & positionCommandes clésvs kube-bench & Polaris
• KSPM (K8s Security Posture
Management) open source CNCF
• Audite clusters K8s / EKS / AKS /
GKE / OpenShift
• Frameworks : CIS K8s 1.8 ·
NSA/CISA · MITRE ATT&CK
• Analyse : RBAC · Network Policies ·
PSS · Images
• Score de risque 0-100 par
namespace et par cluster
• Alternatives : kube-bench (CIS
uniquement) · Polaris · Trivy
• ARMO Platform : version cloud
avec monitoring continu
$> kubescape scan —submit (scan +
dashboard cloud)
$> kubescape scan framework cis-eks
(scan CIS EKS spécifique)
$> kubescape scan framework nsa
(framework NSA/CISA)
$> kubescape scan control C-0013 (1
contrôle précis)
$> kubescape scan —severity critical
(filtrer par criticité)
$> kubescape scan —exceptions
./exceptions.json
$> kubescape scan image nginx:latest
(scan image)
• kube-bench : CIS K8s uniquement, très
léger, nodes only
• Kubescape : multi-framework,
ressources K8s + images
• Polaris : best practices Fairwinds, UX
orientée devs
• Kubescape : plus complet mais plus
lourd que kube-bench
• Trivy : scan images + misconfigs K8s (alt.
léger)
• Recommandation : Kubescape (complet)
+ kube-bench (CIS nodes)
• Tous peuvent coexister dans un pipeline
CI/CD

NeuVector : Sécurité containers & K8s full lifecycle

NeuVector (open source depuis 2022, racheté par SUSE) est une plateforme CWPP complète pour Kubernetes : Réseau Zero Trust, analyse des vulnérabilités et conformité.

Concept & positionFonctionnalités clés
CWPP (Cloud Workload Protection Platform) pour KubernetesSécurité réseau : micro-segmentation automatique des Pods et contrôle des communications
Concurrent : Falco (runtime) + Trivy (scan) + CalicoApprentissage comportemental : identification automatique des flux et comportements légitimes
NeuVector = solution tout-en-un : scan + runtime + réseauProtection à l’exécution (runtime) : détection et blocage des activités anormales ou malveillantes
Déployé en DaemonSet sur chaque nœud KubernetesAnalyse des vulnérabilités : scan continu des images de conteneurs et des nœuds Kubernetes
Alternatives : Aqua Security, Sysdig, Prisma Cloud ComputeConformité réglementaire : vérification automatisée des référentiels CIS Kubernetes, PCI-DSS et HIPAA
Forces : réseau Zero Trust natif, sans agent séparéPare-feu applicatif (WAF) : protection des applications et des flux HTTP/HTTPS (couche 7)
Prévention des fuites de données (DLP) : détection des données sensibles circulant dans les communications réseau

NeuVector vs Falco

CritèreFalcoNeuVector
PositionnementDétection comportementale à l’exécutionPlateforme complète de sécurité Kubernetes
DétectionDétection des comportements suspectsDétection des menaces et anomalies
PréventionAlertes uniquementDétection et blocage des menaces
Sécurité réseauNonMicro-segmentation et réseau Zero Trust
Analyse des vulnérabilitésNonScan des images, conteneurs et nœuds
ConformitéNonContrôles CIS Benchmarks, PCI-DSS, HIPAA, etc.
ApprocheOutil spécialisé runtime sécuritéSolution tout-en-un (runtime + réseau + scan)
ConfigurationRègles Falco (YAML)Interface graphique, API et CRD Kubernetes
ComplexitéLéger et simple à déployerPlus complet mais plus complexe
Cas d’usage privilégiéDétection d’intrusion et surveillance runtimeProtection globale des workloads Kubernetes
AvantagesLéger, flexible, modulaireCouverture sécurité étendue
LimitesPas de prévention native ni de sécurité réseauPlus lourd et plus riche fonctionnellement

Prêt pour lundi

#ActionCommandeDurée / CoûtImpact
1Auditer les RBAC ClusterRoleBindings avec cluster-admin`kubectl get clusterrolebindings -o jsonjq ‘.items[]select(.roleRef.name==“cluster-admin”)
2Vérifier qu’il n’y a pas de pods avec allowPrivilegeEscalation: true`kubectl get pods —all-namespaces -o jsonjq ‘.items[].spec.containers[].securityContext.allowPrivilegeEscalation’`2 min / Gratuit
3Installer Falco en 5 minutes avec Helmhelm repo add falcosecurity https://falcosecurity.github.io/charts && helm install falco falcosecurity/falco --namespace falco --create-namespace10 min / GratuitDétection comportementale runtime (alertes si un pod exécute des commandes suspectes)