Kubernetes a apporté de la flexibilité, mais aussi un nouvel ensemble de vecteurs d'attaque. La sécurité doit être intégrée au pipeline, de la création de l'image à l'exécution sur le cluster.
Principales couches de sécurité
- Supply-Chain, recherche de vulnérabilités dans les images Docker].
- Contrôle d'accès (RBAC), autorisations minimales par compte de service.
- Politiques réseau,
NetworkPolicypour isoler les pods. - Runtime Security, Falco, OPA Gatekeeper pour détecter les comportements anormaux.
- Sécurité des données, secrets chiffrés avec KMS, chiffrement de volume.
Liste de contrôle de sécurité Kubernetes
- Activez PodSecurityPolicy ou Pod Security Standards.
- Définissez Roles et RoleBindings avec le principe du moindre privilège.
- Appliquez NetworkPolicy pour limiter le trafic intra-espace de noms.
- Numérisez des images avec Trivy ou Clair dans CI.
- Implémentez OPA Gatekeeper pour les politiques de validation.
- Configurez Falco pour surveiller les appels système suspects.
- Faites pivoter Secrets régulièrement.
- Auditez les journaux du Serveur API avec la stratégie d'audit.
Exemple de RBAC restreint
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: prod name: read-only-role rules: - apiGroups: [""] resources: ["pods", "services", "configmaps"] verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-only-binding namespace: prod subjects: - kind: ServiceAccount name: app-sa namespace: prod roleRef: kind: Role name: read-only-role apiGroup: rbac.authorization.k8s.io
Politiques de réseau simples
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all-except-frontend namespace: prod spec: podSelector: {} policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: app: frontend
Numérisation d'images dans CI
## .gitlab-ci.yml stages: - scan - build - deploy scan_image: stage: scan image: aquasec/trivy:latest script: - trivy image --severity HIGH,CRITICAL myapp:latest
Surveillance du temps d'exécution avec Falco
apiVersion: apps/v1 kind: DaemonSet metadata: name: falco namespace: kube-system spec: selector: matchLabels: app: falco template: metadata: labels: app: falco spec: containers: - name: falco image: falcosecurity/falco:latest securityContext: privileged: true volumeMounts: - name: devfs mountPath: /host/dev - name: procfs mountPath: /host/proc - name: sysfs mountPath: /host/sys volumes: hostPath: path: /proc - name: sysfs hostPath: path: /sys
Conclusion
La sécurité dans Kubernetes est un processus continu. En appliquant des couches de défense, depuis la création d'images jusqu'aux politiques d'exécution, vous réduisez considérablement la surface d'attaque et augmentez la confiance dans les environnements de production.
Quelles pratiques de sécurité avez-vous déjà adoptées dans votre cluster ? Partagez dans les commentaires !
A lire aussi
- Zero Trust : mise en œuvre d'une sécurité d'accès granulaire dans des environnements distribués
- Autorisation et permissions dans les applications : contrôle d'accès sécurisé
- Autorisation et permissions - Principes fondamentaux des meilleures pratiques
- Protection contre les fuites de données : Guide de sécurité
- Sécurité des applications : Guide de protection mobile
- HashiCorp Vault : Gestion sécurisée des secrets dans les applications
