best practices8 min de lecture

Sécuriser un cluster Kubernetes : les bonnes pratiques indispensables

SFEIR Institute

Points clés

  • 67% des incidents Kubernetes sont dus à des erreurs de configuration (CNCF 2025)
  • RBAC strict et Network Policies forment la première ligne de défense
  • Le chiffrement des Secrets et l'audit logging sont indispensables en production
TL;DR : La sécurisation cluster Kubernetes bonnes pratiques repose sur une défense en profondeur : RBAC strict, Network Policies, Pod Security Standards, chiffrement des Secrets, et audit logging. Selon le rapport CNCF 2025, 67% des incidents Kubernetes proviennent de mauvaises configurations de sécurité. Ce guide vous présente les 10 pratiques indispensables pour protéger vos clusters en production.

Pour maîtriser ces compétences en profondeur, découvrez la formation LFS460 Principes Fondamentaux de la Sécurité Kubernetes.

Pourquoi la sécurité Kubernetes Network Policies Pod Security est critique en 2026 ?

Kubernetes n'est pas sécurisé par défaut. Lorsque vous déployez un cluster vanilla, tous les pods communiquent entre eux, les conteneurs s'exécutent en root, et l'API server accepte des requêtes anonymes. Cette configuration permissive facilite le développement mais expose votre infrastructure à des risques majeurs.

Selon Aqua Security (2025), 89% des clusters analysés présentent au moins une vulnérabilité critique. Les attaques par mouvement latéral, l'escalade de privilèges et l'exfiltration de données restent les menaces principales.

À retenir : Sécuriser un cluster Kubernetes demande une approche multicouche. Vous devez protéger chaque niveau : infrastructure, cluster, workloads et supply chain.

La bonne nouvelle : si vous appliquez les pratiques décrites ici, vous réduirez votre surface d'attaque de 80% selon les benchmarks CIS.

1. Comment configurer RBAC pour limiter les accès à votre cluster ?

Le Role-Based Access Control (RBAC) constitue votre première ligne de défense. Vous devez l'activer et le configurer correctement dès le premier jour.

Pourquoi c'est essentiel : Sans RBAC, tout utilisateur authentifié obtient des privilèges administrateur. Un développeur pourrait supprimer des namespaces de production ou lire des Secrets sensibles.

Comment l'implémenter :

# Role limitant l'accès aux pods dans un namespace
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: production
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
---
# Binding associant le role à un groupe
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: production
subjects:
- kind: Group
  name: developers
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Vérifiez vos permissions avec cette commande :

kubectl auth can-i --list --namespace=production --as=developer@company.com

Consultez notre guide détaillé sur RBAC Kubernetes : comprendre et configurer la gestion des accès pour approfondir ce sujet.

À retenir : Appliquez le principe du moindre privilège. Vous ne devez jamais accorder plus de droits que nécessaire. Auditez régulièrement vos ClusterRoleBindings.

2. Quelles Network Policies déployer pour isoler vos workloads ?

Les Network Policies segmentent le trafic réseau entre vos pods. Sans elles, un conteneur compromis peut scanner et attaquer tous les services de votre cluster.

Pourquoi c'est essentiel : Par défaut, Kubernetes autorise toute communication pod-to-pod. Un attaquant exploitant une faille applicative peut pivoter vers vos bases de données ou services internes.

Comment l'implémenter :

# Politique deny-all par défaut
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: production
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
---
# Autoriser uniquement le trafic nécessaire
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 8080

Selon Isovalent (2025), les clusters utilisant une politique deny-all par défaut réduisent les incidents de sécurité réseau de 73%.

Testez vos policies :

kubectl run test-pod --image=busybox --rm -it -- wget -O- http://backend:8080

3. Comment activer Pod Security Standards pour vos namespaces ?

Les Pod Security Standards (PSS) remplacent les PodSecurityPolicies depuis Kubernetes 1.25. Vous devez les configurer pour empêcher l'exécution de conteneurs privilégiés.

Pourquoi c'est essentiel : Un conteneur en mode privilégié peut accéder au système hôte, monter des volumes arbitraires et compromettre tout le nœud.

Comment l'implémenter :

# Appliquer le profil "restricted" à un namespace
apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted

Les trois profils disponibles :

  • Privileged : aucune restriction (à éviter en production)
  • Baseline : restrictions minimales bloquant les escalades évidentes
  • Restricted : sécurité maximale, recommandé pour la production

Lorsque vous déployez vos applications, assurez-vous qu'elles respectent ces contraintes :

spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    seccompProfile:
      type: RuntimeDefault
  containers:
  - name: app
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop: ["ALL"]
      readOnlyRootFilesystem: true
À retenir : Activez le profil "restricted" sur tous vos namespaces de production. Vous bloquerez ainsi 90% des vecteurs d'escalade de privilèges.

4. Quelle stratégie adopter pour sécuriser vos Secrets Kubernetes ?

Les Secrets Kubernetes ne sont pas chiffrés par défaut dans etcd. Vous devez activer le chiffrement at-rest et envisager une solution externe.

Pourquoi c'est essentiel : Un accès non autorisé à etcd expose tous vos mots de passe, tokens API et certificats en clair.

Comment l'implémenter :

Créez une configuration de chiffrement :

# /etc/kubernetes/encryption-config.yaml
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
    providers:
      - aescbc:
          keys:
            - name: key1
              secret: <base64-encoded-32-byte-key>
      - identity: {}

Configurez l'API server :

kube-apiserver --encryption-provider-config=/etc/kubernetes/encryption-config.yaml

Pour les environnements critiques, vous devriez intégrer un gestionnaire de secrets externe :

# Exemple avec External Secrets Operator
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: database-credentials
spec:
  refreshInterval: 1h
  secretStoreRef:
    name: vault-backend
    kind: ClusterSecretStore
  target:
    name: db-secret
  data:
  - secretKey: password
    remoteRef:
      key: secret/data/production/database
      property: password

Consultez la page Administration cluster Kubernetes pour comprendre l'architecture globale de sécurité.

5. Comment sécuriser votre supply chain d'images conteneurs ?

La sécurité de la supply chain commence par vos images. Vous devez scanner, signer et restreindre les registries autorisés.

Pourquoi c'est essentiel : Selon Sysdig (2025), 62% des images publiques contiennent des vulnérabilités critiques. Une image compromise peut injecter du code malveillant dans votre cluster.

Comment l'implémenter :

Intégrez le scanning dans votre CI/CD :

# Scan avec Trivy
trivy image --severity HIGH,CRITICAL --exit-code 1 myregistry/myapp:v1.2.0

Signez vos images avec Cosign :

cosign sign --key cosign.key myregistry/myapp:v1.2.0

Configurez un Admission Controller pour vérifier les signatures :

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: image-signature-verification
webhooks:
- name: verify.images.example.com
  rules:
  - apiGroups: [""]
    apiVersions: ["v1"]
    operations: ["CREATE", "UPDATE"]
    resources: ["pods"]
À retenir : Ne déployez jamais d'images sans les scanner. Vous devez bloquer automatiquement les images contenant des CVE critiques.

6. Comment durcir la configuration de l'API server ?

L'API server est le point d'entrée central de votre cluster. Vous devez le configurer avec les flags de sécurité appropriés.

Pourquoi c'est essentiel : Un API server mal configuré expose votre cluster à des attaques d'authentification, des requêtes anonymes et des fuites d'information.

Comment l'implémenter :

Vérifiez ces configurations critiques :

# Désactiver l'authentification anonyme
--anonymous-auth=false

# Activer l'audit logging
--audit-log-path=/var/log/kubernetes/audit.log
--audit-policy-file=/etc/kubernetes/audit-policy.yaml

# Restreindre les NodePorts
--service-node-port-range=30000-32767

# Activer RBAC
--authorization-mode=Node,RBAC

Si vous configurez votre cluster avec kubeadm, consultez notre Guide complet : installer un cluster Kubernetes multi-nœuds pour les options de sécurité.

7. Pourquoi activer l'audit logging sur votre cluster ?

L'audit logging enregistre toutes les requêtes vers l'API server. Vous obtenez une traçabilité complète des actions dans votre cluster.

Pourquoi c'est essentiel : Sans logs d'audit, vous ne pouvez pas détecter les intrusions, investiguer les incidents ou prouver la conformité.

Comment l'implémenter :

# /etc/kubernetes/audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
# Log les modifications de secrets au niveau RequestResponse
- level: RequestResponse
  resources:
  - group: ""
    resources: ["secrets"]
# Log les actions admin au niveau Metadata
- level: Metadata
  users: ["system:admin"]
# Log minimal pour les autres requêtes
- level: Metadata
  omitStages:
  - RequestReceived

Centralisez vos logs avec Fluentd ou Vector :

kubectl logs -n kube-system -l component=kube-apiserver --tail=100

Pour diagnostiquer les problèmes courants, référez-vous à Résoudre les 10 problèmes les plus courants sur un cluster Kubernetes.

8. Quels outils de runtime security déployer en 2026 ?

La sécurité runtime détecte les comportements anormaux pendant l'exécution. Vous devez surveiller les syscalls, les accès fichiers et les connexions réseau suspects.

Pourquoi c'est essentiel : Les vulnérabilités zero-day contournent les scanners statiques. Seule la détection runtime peut identifier une compromission active.

Comment l'implémenter :

Déployez Falco pour la détection d'anomalies :

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: falco
  namespace: falco
spec:
  selector:
    matchLabels:
      app: falco
  template:
    spec:
      containers:
      - name: falco
        image: falcosecurity/falco:0.37.0
        securityContext:
          privileged: true
        volumeMounts:
        - name: proc
          mountPath: /host/proc
          readOnly: true

Exemple de règle Falco détectant un shell dans un conteneur :

- rule: Shell spawned in container
  desc: Detect shell execution in containers
  condition: >
    container.id != host and 
    proc.name in (bash, sh, zsh) and 
    spawned_process
  output: "Shell spawned (user=%user.name container=%container.name)"
  priority: WARNING
À retenir : Déployez Falco sur tous vos nœuds de production. Vous détecterez les comportements malveillants en temps réel.

9. Comment sécuriser vos nœuds worker ?

La sécurité des nœuds protège l'infrastructure sous-jacente. Vous devez durcir l'OS, restreindre l'accès SSH et isoler les workloads sensibles.

Pourquoi c'est essentiel : Un nœud compromis donne accès à tous les pods qu'il héberge, aux secrets montés et potentiellement à d'autres nœuds du cluster.

Comment l'implémenter :

Appliquez les recommandations CIS :

# Vérifier les permissions kubelet
chmod 600 /etc/kubernetes/kubelet.conf
chmod 644 /etc/kubernetes/pki/ca.crt

# Désactiver le swap
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# Configurer les limites système
cat >> /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
kernel.panic = 10
EOF

Pour les environnements haute sécurité, vous devriez envisager des nœuds dédiés avec taints :

kubectl taint nodes secure-node-1 security=high:NoSchedule
kubectl label nodes secure-node-1 security-tier=high

Consultez Haute disponibilité Kubernetes : configurer un cluster résilient pour combiner sécurité et résilience.

10. Comment automatiser les audits de sécurité avec kube-bench ?

Kube-bench vérifie automatiquement la conformité de votre cluster aux benchmarks CIS. Vous devez l'exécuter régulièrement.

Comment l'implémenter :

# Exécuter kube-bench sur un nœud master
kubectl run kube-bench --image=aquasec/kube-bench:v0.7.0 \
  --restart=Never \
  --overrides='{"spec":{"nodeName":"master-1"}}' \
  -- master

# Récupérer les résultats
kubectl logs kube-bench

Exemple de sortie :

[PASS] 1.1.1 Ensure that the API server pod specification file permissions are set to 644
[FAIL] 1.1.2 Ensure that the API server pod specification file ownership is set to root:root
[WARN] 1.1.3 Ensure that the controller manager pod specification file permissions are set to 644

Intégrez kube-bench dans votre pipeline CI/CD pour bloquer les déploiements non conformes.

Les anti-patterns à éviter absolument

Anti-patternRisqueSolution
Conteneurs rootEscalade de privilègesrunAsNonRoot: true
Secrets en variables d'envExposition dans logsMonter en volumes
Images latestVersions non contrôléesTags immutables
ClusterRoleBinding trop largeAccès excessifsRoles par namespace
Network Policies absentesMouvement latéralDefault deny

Si vous débutez avec Kubernetes, commencez par Kubernetes les fondamentaux pour comprendre l'architecture avant d'implémenter ces mesures.

Pour déployer votre premier cluster sécurisé, suivez notre tutoriel Déployer votre premier cluster Kubernetes en 30 minutes.

À retenir : La sécurisation cluster Kubernetes bonnes pratiques n'est pas optionnelle. Vous devez l'intégrer dès le premier jour, pas après l'incident.

Passez à l'action : formez-vous à la sécurité Kubernetes

La sécurité Kubernetes Network Policies Pod Security demande des compétences spécialisées. Les formations certifiantes vous préparent aux défis réels de production.

Votre parcours recommandé :

  1. LFS458 Administration Kubernetes : Maîtrisez les fondamentaux de l'administration sécurisée (4 jours, préparation CKA)
  1. LFS460 Principes Fondamentaux de la Sécurité Kubernetes : Approfondissez la sécurité cluster et préparez le CKS (4 jours)
  1. Kubernetes, les fondamentaux : Découvrez Kubernetes si vous débutez (1 jour)

Consultez notre guide complet Formation Kubernetes pour choisir le parcours adapté à votre profil. Contactez nos conseillers pour un accompagnement personnalisé.