Sécurité des Conteneurs Docker et Kubernetes
Introduction à la Sécurité des Conteneurs
Les conteneurs ont révolutionné le déploiement des applications, mais ils introduisent de nouveaux vecteurs d'attaque. La sécurité doit couvrir tout, des images de base jusqu'à l'orchestration Kubernetes, en passant par la protection runtime et les network policies.
Sécurité des Images Docker
1. Sélection de l'Image de Base
- Utiliser des images officielles et vérifiées (Docker Hub verified publishers)
- Préférer Alpine Linux ou Distroless pour une surface d'attaque réduite
- Éviter les images :latest - toujours spécifier les versions
- Minimiser les couches et supprimer les outils inutiles
2. Analyse des Vulnérabilités
- Trivy : Scanner open-source d'Aqua Security
- Grype : Analyse des vulnérabilités dans les images et les filesystems
- Clair : Analyse statique des vulnérabilités
- Snyk Container : Intégration avec CI/CD
- Analyse automatisée dans le pipeline CI/CD avant le push
3. Signature des Images
- Docker Content Trust (Notary) pour la signature des images
- Sigstore/Cosign pour la supply chain security
- Vérification de l'intégrité avant le déploiement
Sécurité Runtime de Docker
Durcissement des conteneurs Docker :
- User Namespaces : Ne pas exécuter en tant que root (USER directive)
- Capabilities : Drop all + ajouter uniquement les nécessaires (--cap-drop=ALL)
- Read-only Filesystem : --read-only pour des conteneurs immuables
- No New Privileges : --security-opt=no-new-privileges
- Resource Limits : --memory, --cpus pour prévenir les DoS
- Seccomp Profiles : Filtrer les syscalls dangereux
- AppArmor/SELinux : Mandatory access control
Sécurité Kubernetes
1. RBAC et Contrôle d'Accès
- Moindre privilège : Roles et RoleBindings spécifiques
- Service Accounts dédiés par application
- Éviter ClusterAdmin sauf pour l'automatisation critique
- Audit logging de tous les API calls
2. Pod Security Standards
- Privileged : Sans restrictions (à éviter)
- Baseline : Empêche les escalades connues
- Restricted : Durcissement maximal pour la production
- Pod Security Admission controller pour l'enforcement
3. Network Policies
- Default deny all + allow explicite selon le besoin
- Segmentation par namespace et labels
- Contrôle de l'egress pour prévenir l'exfiltration
- Intégration avec les CNI plugins (Calico, Cilium)
Gestion des Secrets
- Ne jamais coder en dur des secrets dans les images ou le code
- Kubernetes Secrets : Encodés en Base64 (non chiffrés !)
- External Secrets Operator : Intégration avec des vaults externes
- Sealed Secrets : Chiffrement asymétrique pour GitOps
- HashiCorp Vault : Dynamic secrets et rotation automatique
- AWS Secrets Manager / Azure Key Vault : Cloud-native options
- Encryption at rest pour etcd (--encryption-provider-config)
Sécurité Runtime
Outils de protection runtime :
- Falco : Détection de menaces en runtime avec eBPF (CNCF)
- Tetragon : eBPF-based security observability (Cilium)
- Sysdig Secure : Container forensics et compliance
- Aqua Security : Full lifecycle container security
- Prisma Cloud : CWPP (Cloud Workload Protection Platform)
Ils détectent : génération anormale de processus, connexions réseau suspectes, modifications du file system, tentatives d'escalade de privilèges
Sécurité du Service Mesh
- Istio : mTLS automatique, authorization policies, chiffrement du trafic
- Linkerd : Service mesh léger avec zero-trust networking
- Consul Connect : Chiffrement et autorisation service-to-service
- Rotation automatique des certificats
- Contrôle d'accès granulaire entre microservices
- Observabilité : distributed tracing et metrics
Sécurité de la Chaîne d'Approvisionnement
- SBOM (Software Bill of Materials) : Syft, Tern pour la génération
- Admission Controllers : OPA/Gatekeeper, Kyverno pour le policy enforcement
- Image Provenance : Conformité au SLSA framework
- Registry Security : Harbor, Artifactory avec analyse intégrée
- Signature et vérification des artefacts (Cosign, Notary v2)
- Gestion continue des vulnérabilités
Meilleures Pratiques
- [OK] Analyse des images à toutes les phases du pipeline
- [OK] Implémenter Pod Security Standards au niveau Restricted
- [OK] Network policies default deny pour tous les namespaces
- [OK] Secrets externes (jamais dans Git ni dans les images)
- [OK] Runtime monitoring avec Falco ou équivalent
- [OK] Audit logs activés et centralisés
- [OK] Mises à jour régulières du cluster et des components
- [OK] Backup d'etcd chiffré
- [OK] Plans de disaster recovery testés
- [OK] Zero-trust networking avec service mesh
