Cet article présente trois exemples de problèmes de sécurité rencontrés sur des clusters Kubernetes, causés par un manque de maîtrise des applications déployées sur un cluster par ses administrateurs ou par les développeurs des applications s’y exécutant. Nous donnons ensuite des pistes afin de mieux maîtriser et sécuriser ces applications.
1. Présentation de la machinerie Kubernetes
Kubernetes est un orchestrateur de conteneurs, qui exécute des applications – typiquement distribuées sous forme d'images Docker – sur un ensemble de machines appelées cluster. Nous présenterons d'abord les objets contenant les données qui définissent entièrement la configuration du cluster, accessibles via des API. Ces objets sont créés et consommés par la machinerie (extensible) de Kubernetes, que nous présenterons ensuite. Pour terminer cette présentation de Kubernetes, nous présenterons différents modes d'installation et leurs impacts sur la sécurité.
1.1 API Server et Custom Resource Definitions
La pierre angulaire de Kubernetes est son API server, qui offre l'accès aux objets décrivant la configuration du cluster. Ces données sont stockées dans une base de données distribuée clef-valeur etcd [1].
Les principaux types d'objets qui seront utilisés dans cet article sont :
- Les Pods, qui...

[1] Stockage clef-valeur distribué etcd : https://etcd.io/
[2] Documentation Kubernetes : https://kubernetes.io/docs
[3] Opérateur Prometheus : https://github.com/prometheus-operator/prometheus-operator
[4] Collecte de métriques Prometheus : https://prometheus.io/
[5] Documentation RBAC : https://kubernetes.io/docs/reference/access-authn-authz/rbac/
[6] Cluster de développement et test minikube : https://minikube.sigs.k8s.io/docs/
[7] Définition de politiques de sécurité avec Open Policy Agent : https://www.openpolicyagent.org/
[8] Intégration continue / déploiement continu avec Jenkins : https://www.jenkins.io/
[9] Intégration continue / déploiement continu avec ArgoCD : https://argoproj.github.io/argo-cd/
[10] Webshell GoTTY : https://github.com/yudai/gotty
[11] Dépôt d'images Docker open source Harbor : https://goharbor.io/
[12] Tracing distribué Jaeger : https://www.jaegertracing.io/
[13] Service mesh Istio : https://istio.io/
[14] Console d’administration Kubernetes : https://github.com/kubernetes/dashboard
[15] Overlay network Flannel : https://github.com/coreos/flannel
[16] Exemples de NetworkPolicies : https://github.com/ahmetb/kubernetes-network-policy-recipes
[17] Analyse statique d'images Docker avec Clair : https://github.com/quay/clair
[18] Client en ligne de commandes pour Clair, Klar : https://github.com/optiopay/klar/
[19] Revue de configuration d'un Pod avec kubesec : https://github.com/controlplaneio/kubesec
[20] Analyse de configuration d'un cluster avec kube-bench : https://github.com/aquasecurity/kube-bench
[21] Écosystème « cloud-native » : https://landscape.cncf.io/
[22] Environnement Kubernetes vulnérable kubernetes-goat : https://github.com/madhuakula/kubernetes-goat