Kubernetes security: 11 best practices
Kubernetes is een snelgroeiend platform. Steeds meer organisaties gebruiken al containers of zijn van plan om dit in de nabije toekomst te doen, waarbij Kubernetes in de meeste gevallen het geprefereerde orkestratieplatform is. Het platform is echter technisch complex en vereist inspanning, maatwerk en technische kennis om een optimale omgeving op te zetten. Veiligheid is een belangrijke uitdaging binnen Kubernetes, vooral in productieomgevingen, en het waarborgen van de veiligheid vereist toegewijde beveiligingsteams met begrip van beveiligingsproblemen en afhankelijkheden binnen Kubernetes-clusters. In deze blog laten we aan de hand van een aantal best practices zien hoe je de veiligheid van jouw Kubernetes-omgeving bewaakt en verbetert.
Kubernetes en veiligheid: de best practices
Deels omdat Kubernetes een complex en veelzijdig platform is, hebben gebruikers ook bij het beveiligen van het platform veel knoppen om aan te draaien. Tijd om eens te kijken naar de belangrijkste best practices bij het inrichten van je Kubernetes security.
1. De risico’s per stack en onderdeel identificeren
De beste en eenvoudigste manier om snel zicht te krijgen op veiligheidsrisico’s binnen je Kubernetes-omgeving? Het platform ontleden. Kubernetes bestaat namelijk uit verschillende componenten, stacks en niveaus. Denk bijvoorbeeld aan clusters, pods (meerdere pods vormen een cluster), nodes en API’s. Probeer te ontdekken welke typen risico’s welke onderdelen kunnen treffen en koppel de juiste veiligheidsmaatregelen en -tools aan die inzichten.
Lees ook: Kubernetes-deployment beveiligen met handtekeningverificatie
2. Images scannen
Voor het veilig deployen van containers in Kubernetes is het van groot belang dat je container images geen kwetsbaarheden of veiligheidsrisico's bevatten. Elke container die je aanmaakt vanuit een gecompromitteerde containerafbeelding, zal namelijk dezelfde kwetsbaarheden hebben. Scan containerafbeeldingen daarom in elk stadium van de CI/CD-pipeline op kwetsbaarheden en veiligheidsproblemen.
3. RBAC inschakelen
Role-based access control (RBAC) helpt je om te bepalen wie toegang heeft tot de Kubernetes API en toont welke machtigingen bepaalde personen hebben. RBAC is meestal standaard ingeschakeld op Kubernetes 1.6 en hoger. Omdat Kubernetes ‘authorization controllers’ combineert, moet je bij het inschakelen van RBAC ook de verouderde, op attributen gebaseerde toegangscontrole (ABAC) uitschakelen. Het geniet de voorkeur om machtigingen op basis van namespaces in plaats van clusterbrede machtigingen te gebruiken. Op die manier oefen je namelijk een fijnmazige controle uit op de toegangs- en bewerkingsrechten van Kubernetes-gebruikers.
4. Authenticatie-oplossingen van een derde partij
Het verdient aanbeveling om Kubernetes te integreren met tools van een externe partij die gespecialiseerd is in het leveren van authenticatie-oplossingen. Denk bijvoorbeeld aan GitHub of de OAuth-connectors van Dex. Op die manier profiteer je van extra veiligheidsfunctionaliteiten zoals multifactorauthenticatie en verzeker jij je ervan dat de kube-apiserver niet verandert als je gebruikers toevoegt of verwijdert.
5. Nodes isoleren en beveiligen
Nodes (de virtuele servers waaruit Kubernetesclusters bestaan) zijn belangrijke schakels in Kubernetes. Het zijn feitelijk de operationele levensaders van het systeem. Het beveiligen ervan is dan ook een belangrijk onderdeel van Kubernetes security. Plaats nodes op een apart netwerk dat niet direct verbonden is met publieke netwerken of bedrijfsnetwerken. Dit kan door nodes met de ingress controller zo te configureren dat er vanuit de master node alleen verbindingen mogelijk zijn via een gespecificeerde en beveiligde poort.
Verder kun je nodes extra beveiligen door externe applicaties, libraries, overbodige gebruikersaccounts en niet-essentiële onderdelen van het besturingssysteem te verwijderen en zo het aanvalsoppervlak te verkleinen. Ook OS-logging (waarmee je mogelijke lekken of kwetsbaarheden opspoort) helpt bij het beveiligen van je nodes.
6. Netwerkbeveiliging perfectioneren
Probeer een netwerkarchitectuur te creëren die workloads zoveel mogelijk isoleert van het publieke internet. Implementeer firewalls op gateway-niveau om het verkeer van ongewenste en onveilig opererende hosts te blokkeren en controleer het netwerkverkeer op tekenen van een inbreuk. Dit zijn stappen die je kunt uitvoeren met externe tools zoals een service mesh.
Kubernetes biedt tevens een beperkte hoeveelheid native tooling die helpt bij het beveiligen van netwerkbronnen. Het gaat dan vooral om netwerkbeleid. Hoewel netwerkbeleid op zich geen beveiligingsfunctie is, kunnen beheerders het gebruiken om te bepalen hoe verkeer binnen een Kubernetescluster stroomt. Je kunt bijvoorbeeld netwerkbeleid maken om pods op netwerkniveau van elkaar te isoleren of inkomend verkeer te filteren.
7. Audit logging aanzetten
Zorg ervoor dat de functionaliteit audit logging aanstaat en je ongebruikelijke of ongewenste API-aanroepen in de gaten houdt. Vooral authenticatiefouten zijn vaak een rode vlag. De logs merken zo’n statusbericht als ‘verboden’ aan, wat erop duidt dat een aanvaller gestolen inloggegevens probeert te gebruiken om toegang te krijgen tot je Kubernetes-omgeving. Met audit logging kun je ook heel exact bepalen welke events binnen Kubernetes je logt.
8. Pods beveiligen
Een pod is een groep containers die ervoor zorgt dat een applicatie probleemloos kan draaien. Het spreekt voor zich dat veilige pods een voorwaarde zijn voor veilige applicaties in Kubernetes. Met een PodSecurityPolicy (PSP) definieer je de minimale voorwaarden waar een pod aan moet voldoen voordat hij toegelaten wordt tot een cluster. Deze functionaliteit maakt gaandeweg plaats voor een nieuwe variant (die luistert naar de tijdelijke naam ‘PSP Replacement Policy’), die meer flexibiliteit en schaalbaarheid biedt bij het koppelen van veiligheidsvoorwaarden aan pods.
Lees ook: De lifecycle van een pod en debus containers
9. Data beveiligen
Gegevens beveiligen die zijn gekoppeld aan Kubernetes? Volg dan de best practices die je gebruikt om gegevens binnen elk grootschalig opslagsysteem te beveiligen. Versleutel ‘data in rest’ waar mogelijk en gebruik een goed systeem voor identiteits- en toegangsmanagement (IAM) om te reguleren en beperken wie toegang heeft tot gegevens. Zorg ervoor dat de servers die jouw opslagsystemen beheren goed vergrendeld zijn en maak een back-up van gegevens om jezelf te beschermen tegen gegevensdiefstal of ransomware-aanvallen.
Lees ook: Hoe veilig is data in de (public) cloud?
10. Workloads isoleren met namespaces
Kubernetes geeft gebruikers de mogelijkheid om verschillende workloads van elkaar te isoleren met namespaces. Vanuit veiligheidsoogpunt is het verstandig om aparte namespaces te creëren voor al je teams en verschillende typen workloads. Denk bijvoorbeeld aan aparte namespaces voor je ontwikkel- en testomgeving en productieomgeving.
11. Kubernetes-versies up-to-date houden
En last but not least: zorg ervoor dat je altijd met de laatst beschikbare versie van Kubernetes werkt. Dan weet je zeker dat je altijd gebruik kunt maken van de nieuwste security-functionaliteiten en werkt met technologie die voorzien is van de actueelste veiligheidsupdates. Kubernetes upgraden kan best een ingewikkeld proces zijn, maar er zijn goede, gespecialiseerde serviceproviders die je hier prima bij kunnen helpen.
Zo helpt ACC ICT
Bij ACC ICT kennen wij alle ins en outs van Kubernetes. Onze specialisten beschikken samen over nagenoeg iedere Kubernetes-certificering en kunnen je prima helpen bij het toepassen van alle belangrijke best practices op het vlak van Kubernetes security. Met Managed Kubernetes van ACC ICT profiteer je van een stuk ontzorging, een single point of contact voor al je Kubernetes-vraagstukken en accurate monitoring en logging. Een securityspecialist is altijd een vast onderdeel van je team en helpt bij het veilig gebruiken en beheren van Kubernetes.
Wil je meer weten over ACC ICT en Managed Kubernetes? Neem gerust contact met ons.