En introduisant le concept de micro-services, Kubernetes lance un nouveau défi aux solutions d’isolation et de filtrage réseau : comment gérer les droits d’accès réseau dans une infrastructure en constante mutation et dans laquelle une machine n’a plus un rôle prédéterminé ?
La majorité des outils d’isolation et de contrôle d’accès réseau sont fondés sur un principe simple : l’accès réseau nécessaire au bon fonctionnement de chaque machine est statique, et étroitement lié à sa fonction au sein de l’infrastructure. Dans une infrastructure en micro-services, l’orchestrateur peut décider à tout moment de changer le rôle d’une instance, ou même demander à ce que plusieurs services indépendants soient exécutés côte à côte. Il y a alors deux options : ne plus filtrer l’accès réseau pour permettre à n’importe quelle application de fonctionner, ou migrer vers une nouvelle génération d’outils de protection dynamique d’accès réseau.
1. Les outils classiques de contrôle d’accès réseau ne sont plus suffisants
1.1 Restriction de l’accès réseau : objectifs et intérêts
Kubernetes explique dans sa documentation [1] que les pods d’un cluster sont « non-isolés » par défaut. Concrètement, cela...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première
[1] « Network policies », Documentation officielle de Kubernetes : https://kubernetes.io/docs/concepts/services-networking/network-policies
[2] « Payment Card Industry », Security Standards Council : https://fr.pcisecuritystandards.org/document_library
[3] Heartin Kanikathottu, « AWS Security Cookbook », 2020
[4] IPTables manuel page, Linux, https://linux.die.net/man/8/iptables
[5] Thomas Gutzmann, « IPTables Firewall Setup for Dynamic DNS », 2017 : https://wiki.gutzmann.com/confluence/display/HowTo/IPTables+Firewall+Setup+for+Dynamic+DNS
[6] AWS IP ranges : https://ip-ranges.amazonaws.com/ip-ranges.json
[7] « The Kubernetes network model », Documentation officielle de Kubernetes : https://kubernetes.io/docs/concepts/cluster-administration/networking/#the-kubernetes-network-model
[8] « NetworkPolicy API definition », Documentation officielle de Kubernetes : https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#networkpolicy-v1-networking-k8s-io
[9] « Network policies prerequisites », Documentation officielle de Kubernetes : https://kubernetes.io/docs/concepts/services-networking/network-policies/#prerequisites
[10] « Kubelet », Documentation officielle de Kubernetes : https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/
[11] « Cluster networking », Documentation officielle de Kubernetes : https://kubernetes.io/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model
[12] « DaemonSet », Documentation officielle de Kubernetes : https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
[13] « BPF and XDP reference guide », Documentation officielle de Cilium : https://docs.cilium.io/en/v1.8/bpf/#bpf-guide
[14] « Overlay Network Mode », Documentation officielle de Cilium : https://docs.cilium.io/en/v0.12/concepts/#overlay-network-mode
[15] « Identity based network security », Documentation officielle de Cilium : https://docs.cilium.io/en/v1.8/concepts/security/identity/
[16] Guillaume Fournier, Code source du projet « network-security-probe », 2020 : https://github.com/Gui774ume/network-security-probe
[17] Lorenzo Fontana et David Calavera, « Linux Observability with BPF », 2019.
[18] Guillaume Fournier, « Process level network security monitoring and enforcement with eBPF », SSTIC, 2020 : https://www.sstic.org/2020/presentation/process_level_network_security_monitoring_and_enforcement_with_ebpf/