CSM25: Kubernetes hardening: 9 beveiligingstips voor jouw K8s-cluster
Ga direct naar
Kubernetes heeft prachtige functies, maar is jouw cluster ook veilig? Als je met een standaardconfiguratie werkt, is het antwoord op die vraag waarschijnlijk nee. Zeker in productieomgevingen is het cruciaal om je cluster actief te beveiligen tegen misbruik, privilege escalation en datalekken. Wil jij je K8s-cluster écht veilig maken? Kubernetes hardening begint met deze 9 beveiligingstips.
1. Schakel Role-Based Access Control (RBAC) in
Bij installatie krijgen Kubernetes-clusters vaak te ruime standaardrechten. Gebruikers en services, maar ook gecompromitteerde pods, kunnen zo toegang krijgen tot gevoelige resources. Dit los je op door met RBAC (Role-Based Access Control) rechten te koppelen aan specifieke rollen en verantwoordelijkheden. Door RBAC strikt te configureren, verminder je het risico op privilege escalation en beperk je de impact van beveiligingsincidenten.
Configureer RBAC zo strikt mogelijk
Om RBAC zo strikt mogelijk in te kunnen stellen, heb je overzicht nodig van wie of wat er toegang nodig heeft tot je cluster. Nadat je de toegangsbehoeften hebt geïnventariseerd, kun je die op twee niveaus instellen:
Namespaced: Door Roles en RoleBindings toe te wijzen, kun je toegangsrechten toekennen aan specifieke rollen binnen een namespace. Houd developers bijvoorbeeld buiten de productieomgeving door ze alleen pods in de development-namespace te laten inzien en beheren.
Clusterwijd: Met ClusterRoles en ClusterRoleBindings ken je rechten toe aan gebruikers en services die het hele cluster moeten kunnen gebruiken. Een CI/CD-pipeline moet nieuwe deployments kunnen uitrollen naar alle namespaces en heeft daarom clusterwijde toegangsrechten nodig.
Gebruik bij het toekennen van rechten het principe van least privilege: geef gebruikers en diensten alleen die rechten die nodig zijn om te kunnen functioneren.
2. Gebruik Network Policies om pod-communicatie te beperken
Als je niet instelt, kunnen alle pods in een Kubernetes-cluster onbeperkt met elkaar communiceren. Een aanvaller die toegang krijgt tot één pod kan door het netwerk bewegen en zo gevoelige data bereiken. Network Policies beperken dit risico door communicatie tussen pods te beperken. Zie het als een firewall binnen je cluster.
Definieer strikte netwerkregels
Breng je applicatie-architectuur in kaart. Welke pods moeten met elkaar communiceren? Gebruik labels om pods te groeperen en analyseer het huidige verkeer met tools als Cilium of Kiali. Voer vervolgens een deny-all-beleid in, en voeg daarna alleen toestemmingen toe voor noodzakelijke verbindingen, zoals frontend naar backend. Test de communicatie na elke aanpassing en controleer je logs op onverwacht verkeer. Documenteer je regels per namespace, zodat je overzicht houdt.
3. Update Kubernetes en afhankelijkheden regelmatig
Verouderde Kubernetes-versies en afhankelijkheden bevatten vaak bekende kwetsbaarheden die door aanvallers worden misbruikt. Als je niet regelmatig update, loop je het risico op exploits die leiden tot datalekken of zelfs volledige cluster-overnames. Updates zijn je eerste verdedigingslinie tegen nieuwe bedreigingen.
Automatiseer updates waar mogelijk
Inventariseer eerst alle componenten in je cluster, inclusief Kubernetes zelf, container runtimes en CNI-plugins. Gebruik managed services (zoals EKS, GKE of AKS) of tools als kubeadm om upgrades te stroomlijnen. Test nieuwe versies altijd eerst in een staging-omgeving voordat je ze naar productie rolt. Plan updates tijdens onderhoudsvensters en houd rekening met de Kubernetes version skew policy om compatibiliteit te garanderen. Scan ook je container-images regelmatig op verouderde pakketten met tools als Renovate of Dependabot.
4. Schakel PodSecurity Admission (PSA) in
Pods die als root draaien of die onveilige configuraties bevatten (zoals privilege escalation) vormen een groot risico. Een aanvaller die toegang krijgt tot zo’n pod kan vervolgens volledige controle over de host krijgen. PodSecurity Admission (PSA) dwingt veilige standaarden af, zoals het verbieden van root-toegang en het vereisen van read-only filesystems.
Zet PSA op jouw cluster aan
Zet PSA aan op jouw cluster en kies een passend beveiligingsniveau:
Enforce: Blokkeert pods die niet voldoen aan de restricted-standaard (ideaal voor productie-omgevingen).
Audit: Logt waarschuwingen voor pods die niet voldoen, zodat je ze later kunt aanpassen.
Warn: Toont, zonder pods te blokkeren, waarschuwingen in de API-server logs (geschikt voor testomgevingen).
Label je namespaces om het beveiligingsniveau zichtbaar te maken, bijvoorbeeld pod-security.kubernetes.io/enforce: restricted.
5. Gebruik Secrets veilig
Kubernetes gebruikt Secrets om gevoelige gegevens los te koppelen van je applicatiecode. Secrets worden standaard in base64 opgeslagen, wat met enige regelmaat onterecht wordt aangezien voor encryptie. Dit is niet het geval. Iedereen met toegang tot je cluster kan deze Secrets eenvoudig decoderen en misbruiken om databases, API’s of andere kritieke systemen te compromitteren.
Bescherm je Secrets met encryptie
Gebruik externe tools zoals HashiCorp Vault of Sealed Secrets om end-to-end encryptie toe te voegen. Zo blijven Secrets beveiligd, zelfs als een aanvaller ze onderschept. Beperk toegang tot Secrets met RBAC en ServiceAccounts, zodat alleen geautoriseerde pods ze kunnen lezen. Vermijd het hardcoden van Secrets in container images of configmaps, en vervang ze regelmatig om het risico op misbruik te verkleinen.
6. Schakel audit-logs in en monitor verdachte activiteiten
Audit-logs geven je inzicht in wie wat doet in je cluster. Ze helpen je niet alleen om inbraken te detecteren en de oorzaak van incidenten te achterhalen, maar zijn ook verplicht voor compliance (aan onder meer ISO 27001 en SOC 2). Zonder logs mis je cruciale informatie over verdachte activiteiten, zoals ongeautoriseerde toegang of wijzigingen in de beveiligingsinstellingen.
Configureer en monitor audit logs
Schakel audit logging in op je API-server en definieer in een beleid welke gebeurtenissen je wilt loggen (bijvoorbeeld create, delete en update van RBAC-regels).
Gebruik tools zoals Falco (voor real-time detectie) of ELK (voor analyse en opslag) om verdachte activiteiten te signaleren. Stel onder meer waarschuwingen in voor onverwachte pod-creaties, wijzigingen in ClusterRoleBinding-rechten en herhaalde mislukte authenticatiepogingen.
Bewaar logs minimaal 30 dagen en stel alerts in voor kritieke gebeurtenissen, zoals het aanmaken van cluster-admin-rechten. Analyseer logs regelmatig op afwijkingen zodat je op bedreigingen kunt reageren voordat ze escaleren.
7. Beperk toegang tot de API-server
De API-server is het hart van je Kubernetes-cluster. Een aanvaller met toegang kan het cluster volledig overnemen, pods starten, Secrets lezen en zelfs je infrastructuur saboteren. Ondanks dit risico staan standaardconfiguraties vaak anonieme toegang met bijna onbeperkte rechten toe.
Versterk de API-server
Schakel anonieme toegang uit. Zorg ervoor dat alle communicatie met de API-server versleuteld is (via TLS/HTTPS), en laat alleen vertrouwde IP-adressen toe (AWS Security Groups, beheerders, CI/CD-servers). Dit voorkomt dat aanvallers vanaf willekeurige locaties verbinding kunnen maken. Combineer dit met sterke authenticatie zoals OIDC of LDAP voor maximale beveiliging. Controleer daarnaast regelmatig wie toegang heeft met kubectl get clusterrolebinding.
8. Scan container-images op kwetsbaarheden
Container-images kunnen kwetsbare pakketten, malware of verouderde software bevatten. Als je ze niet scant voordat je ze deployt, loop je het risico om bekende lekken in jouw productie-omgeving te introduceren. Aanvallers scannen openbare repositories vaak om images met kwetsbaarheden te vinden. Scan jouw container-images op kwetsbaarheden om ze voor te zijn.
Integreer een scanning-tool
Je hebt keuze uit verschillende scanning-tools om je images in de gaten te houden. Kijk bijvoorbeeld naar één van deze drie:
Trivy is lichtgewicht, snel, en eenvoudig te integreren.
Clair is open-source en geschikt voor private registries.
Snyk biedt diepgaande analyses en patch-adviezen.
Laat je CI/CD-pipeline builds stoppen als er kritieke kwetsbaarheden worden gevonden. Scan bestaande images in je registry en vergeet niet om ook images van derden te scannen voor je ze gebruikt.
9. Implementeer Pod Resource Limits
Pods zonder resource limits kunnen alle beschikbare CPU en geheugen gaan gebruiken. Dit kan tot prestatieproblemen leiden en cluster-crashes veroorzaken. Denial-of-Service-aanvallen gebruiken deze zwakte om een cluster uit te schakelen. Implementeer Pod Resource Limits om te voorkomen dat applicaties elkaar in de weg zitten en de stabiliteit van je cluster in gevaar brengen.
Stel limits en requests in
Definieer in je deployment-YAML per pod de requests en limits. Dit zijn de minimale en maximale resources die deze pod mag gebruiken. Baseer je waarden op werkelijk gebruik. Als je niet zeker bent hoe groot dit is, dan kun je dat met kubectl top pods meten. Monitor resource-gebruik doorlopend en laat limieten met je applicaties meegroeien. Gebruik ResourceQuota’s om het totale resource-gebruik per namespace te beperken.
Werk veilig: upgrade jouw Kubernetes-security
Kubernetes heeft prachtige functies, ook als het op beveiliging aankomt, maar dan moet je ze wel aanzetten. Met deze 9 beveiligingstips scherm je jouw K8s-cluster af van aanvallers. Kubernetes hardening voorkomt incidenten en verhoogt zo de betrouwbaarheid van jouw cluster. Wil je nóg meer zekerheid inbouwen? Breng je cluster dan onder bij een uitmuntende host. Klik hier om de beste opties te ontdekken.
Bedankt voor het toelichten!