Kubernetes-Sicherheit: Herausforderungen und Best Practices
Erfahren Sie, welche Sicherheitsprobleme Kubernetes bei einer cloudnativen Security verursachen kann.
Was versteht man unter Kubernetes-Sicherheit?
Der Begriff Kubernetes-Sicherheit beinhaltet alle Maßnahmen, Prozesse und Grundsätze, die zum Schutz von Kubernetes-Implementierungen angewendet werden sollten. Dazu zählen u. a. die Containersicherheit, die zweckdienliche Konfiguration von Workloads, die Sicherheit des Kubernetes-Netzwerks und der Schutz der eigenen Infrastruktur.
Warum ist Sicherheit bei Kubernetes so wichtig?
Bei Kubernetes ist das Thema Sicherheit wegen der vielfältigen Bedrohungen für Cluster und Pods von großer Bedeutung. Zu diesen Bedrohungen zählen unter anderem:
böswillige Akteure
in Containern ausgeführte Malware
beschädigte Container-Images
kompromittierte und unautorisierte Benutzer
Ohne angemessene Kontrollmechanismen können böswillige Akteure, die sich Zugang zu einer Anwendung verschaffen, die Kontrolle über den Host oder sogar den gesamten Cluster übernehmen.
Wie fügt sich Kubernetes in den Entwicklungsprozess ein?
Das folgende Diagramm zeigt, in welchen Phasen des Softwareentwicklungszyklus (SDLC) die Kubernetes-Sicherheit zum Tragen kommt. Der Code wird nach der Build-Phase zunächst getestet, damit keine Schwachstellen in die Kubernetes-Live-Umgebung gelangen können. Für die Deployment- und Cloud-Infrastruktursicherheit werden die laufenden Anwendungen dann kontinuierlich überwacht. Die so gesammelten Erkenntnisse werden anschließend wieder den Entwicklern bereitgestellt, so dass ein kontinuierlicher Kreislauf zwischen Code-Programmierung und Cloud entsteht.
Die größten Sicherheitsrisiken bei Kubernetes
Herausforderungen in Sachen Sicherheit gibt es bei Kubernetes einige. Das sind die drei wichtigsten:
Konfiguration von Kubernetes-Sicherheitskontrollen: Wird Kubernetes per Open Source implementiert, sind zunächst keinerlei Sicherheitskontrollen eingerichtet. Somit liegt die Verantwortung für ihre korrekte Funktionsweise und sichere Konfiguration allein beim jeweiligen Betreiber.
Sichere Ausführung von Workloads: Bei Kubernetes-Distributionen mit vorkonfigurierten Sicherheitskontrollen oder bei der eigenen Entwicklung von Clustern und deren Sicherheitsfunktionen kann der Workload-Schutz schwierig sein, wenn Sie, die Entwickler oder die Anwendungs-Teams noch nicht mit Kubernetes vertraut sind.
Keine integrierte Sicherheit: Bei Kubernetes gibt es zwar durchaus Zugangskontrollen und Hilfestellungen zur Erstellung sicherer Cluster. Dennoch ist die Standardkonfiguration nicht absolut sicher. Deshalb müssen Workloads, Cluster, Netzwerk und Infrastruktur so konfiguriert werden, dass Kubernetes-Cluster und Container vollständig geschützt sind.
Kubernetes-Sicherheit: Herausforderungen und Lösungen
Die integrierten Sicherheitslösungen von Kubernetes decken nicht alle denkbaren Sicherheitsrisiken ab. Doch glücklicherweise besteht im Kubernetes-Ökosystemen kein Mangel an entsprechenden Lösungen.
Zu den Kubernetes-Bereichen, für die zusätzliche Sicherheitstools nötig sind, gehören u. a.:
Workload-Sicherheit: Bei den meisten Kubernetes-Workloads handelt es sich um Container, die auf Engines wie containerd, cri-o oder Docker laufen. Der Code und sonstige Pakete in diesen Containern dürfen also keinerlei Schwachstellen enthalten.
Workload-Konfiguration: Ob Kubernetes-Manifests, Helm Charts oder Templating-Tools: Die Konfiguration der Anwendungsbereitstellung erfolgt in Kubernetes meist mithilfe von Code. Und der wirkt sich wiederum auf die Kubernetes-Sicherheitskontrollen aus, die festlegen, wie Workloads ausgeführt werden und was bei Sicherheitsverstößen passieren soll bzw. nicht passieren darf. Werden also z. B. CPU-, Speicher- und Netzwerkkapazitäten pro Workload auf den zu erwartenden Höchstwert begrenzt, lassen sich Schwachstellen auf die betroffene Workload beschränken und es werden keine anderen Dienste beeinträchtigt.
Cluster-Konfiguration: Es gibt diverse Tools, mit denen sich die Sicherheit ausgeführter Kubernetes-Cluster prüfen lässt, wie zum Beispiel Sysdig, Falco oder Prometheus. Diese Tools nutzen u. a. Audit-Logs und andere integrierte Kubernetes-Metriken, um die Einhaltung von Best Practices bei der Kubernetes-Sicherheit sowie CIS-Benchmarks und andere sicherheitsrelevante Benchmarks zu überprüfen.
Kubernetes im Netzwerk: Die Netzwerksicherheit spielt bei Kubernetes ebenfalls eine wichtige Rolle. Dabei sind die Kommunikation der Pods, der ein- und ausgehende Datenverkehr sowie ggf. auch Service-Meshes (wie Istio) zu berücksichtigen. Denn wird auch nur ein einziger Cluster kompromittiert, sind alle Dienste und Geräte im gesamten Netzwerk in Gefahr. Deshalb sollte man stets darauf achten, dass alle Dienste und die Kommunikation zwischen ihnen auf das absolut notwendige Maß beschränkt werden. Werden Geräte und Dienste dann auch noch verschlüsselt, stehen die Chancen gut, dass Bedrohungen eingedämmt und Angriffe auf das gesamte Netzwerk verhindert werden können.
Sicherheit der Infrastruktur: Verteilte Anwendungen laufen auf mehreren Servern und nutzen dazu physikalische oder virtuelle Netzwerke und Speicher. Deshalb ist die Sicherung der Kubernetes-Infrastruktur entscheidend – insbesondere der Master-Nodes, Datenbanken und Zertifikate. Haben sich böswillige Akteure erst einmal Zugang zur Ihrer Infrastruktur verschafft, könnten sie im Netzwerk auf alles zugreifen, um Ihre Cluster und Anwendungen zu kompromittieren.
Für diese Herausforderungen gibt es im Kubernetes-Ökosystem zahlreiche Sicherheitstools. Zudem sorgt die Partnerschaft zwischen Snyk und Sysdig mit entwicklerfreundlichen Tools für sämtliche Aspekte der Kubernetes-Sicherheit – vom Container bis zum Cluster – für eine noch bessere Abstimmung von Entwicklung und SecOps. So stellt Snyk Sicherheitstools bereit, die den gesamten Kreislauf der Softwareentwicklung abdecken. Hierzu zählen unter anderem Snyk Container und Snyk Open Source. Durch die Kombination aus entwicklerfreundlichen Workflows und Sysdig sind wir zudem in der Lage, Runtime-Daten von Sysdig (aus der Überwachung der Kubernetes-Umgebung mittels Audit-Logs) in die gewohnten Entwicklungsabläufe einzubinden. Die Partnerschaft stellt damit die erste entwicklerorientierte Plattform für das Cloud Security Posture Management überhaupt dar.
Developer-First Security für Container
Mit Snyk identifizieren Sie Schwachstellen in Container-Images und Kubernetes-Workloads und adressieren sie automatisch.
Sichere Kubernetes-Hosts
Der Cloud-Host bildet die abschließende Schicht jeder Kubernetes-Umgebung. Die führenden Cloud-Provider bieten zwar durchaus Management-Tools für Kubernetes an, wie z. B. die Google Kubernetes Engine (GKE), den Azure Kubernetes Service (AKS) und den Elastic Kubernetes Service (EKS) von Amazon. Doch das Thema Sicherheit beruht weiterhin auf geteilter Verantwortung.
Es gibt mehrere Möglichkeiten, Kubernetes-Hosts vor Schwachstellen zu schützen:
Schutz der Workload-Ebene: Sorgen Sie dafür, dass Ihre Container-Images keine Schwachstellen aufweisen und korrekt konfiguriert sind (und unterbinden Sie dazu beispielsweise privilegierte Container).
Trennung von Workloads und Hosts: Schränken Sie den Zugriff auf Host-Ressourcen ein, indem Sie Containerprivilegien begrenzen und die Laufzeitumgebung so konfigurieren, dass die Ressourcennutzung im Angriffsfall gedeckelt ist.
Überwachung ausgeführter Cluster: Prüfen Sie die Audit-Logs regelmäßig, um Konfigurationsfehler und verdächtige Verhaltensweisen rechtzeitig zu erkennen.
Empfehlungen für Kubernetes securityContext-Parameter
Eine Möglichkeit, Pods und Clustern den Zugriff auf das übrige Kubernetes-System zu verwehren, ist die Verwendung von securityContexts
. Hier zeigen wir Ihnen die zehn wichtigsten securityContext-Parameter, die alle Pods und Container verwenden sollten:
runAsNonRoot
: Auf „true“ gesetzt, verhindert diese Option, dass Container als Root-Benutzer ausgeführt werden.runAsUser
/runAsGroup
: Diese beiden Einstellungen sorgen dafür, dass Container bestimmte Runtime-Benutzer und -Gruppen verwenden.seLinuxOptions
: Hiermit wird der SELinux-Kontext für den Container bzw. Pod eingestellt.seccompProfile
: Mit dieser Option kann ein seccomp-Profil im Linux-Kernel eingerichtet werden, das die Containerberechtigungen einschränkt.privileged
/allowPrivilegeEscalation
: Grundsätzlich wird davon abgeraten, privilegierten Containern oder den darin enthaltenen Prozessen die Ausweitung von Berechtigungen zu erlauben. Diese Option sollte also auf „false“ gesetzt werden.capabilities
: Hier können Sie den Zugriff auf Kernelaufrufe steuern. Dieser sollte auf das absolut notwendige Mindestmaß beschränkt werden.readonlyRootFilesystem
: Diese Option sollte möglichst auf „true“ gesetzt werden. Denn dann können Angreifer keine Software installieren oder die Konfiguration des Dateisystems ändern.procMount
: Hier sollte – außer in Sonderfällen wie etwa bei eingebetteten Containern – die Standardeinstellung „Default“ verwendet werden.fsGroup
/fsGroupChangePolicy
: Diese Einstellung sollte mit Vorsicht verwendet werden, da Änderungen am Volume-Ownership mittelsfsGroup
das Hochfahrverhalten der Pods beeinträchtigen und sich negativ auf freigegebene Dateisysteme auswirken können.sysctls
: Von Modifikationen der Kernel-Parameter mitsysctls
ist außer in ganz bestimmten Fällen abzuraten, da sie die Stabilität des Hostsystems beeinträchtigen können.
Transparenz über die Kubernetes-Sicherheit
Im Hinblick auf die K8-Security kann eine sichere Konfiguration die Sicherheitsfunktionen von Kubernetes ergänzen. Wichtig ist außerdem, dass die Kubernetes-Ressourcen mit wirksamen Monitoring-Verfahren überwacht werden. Hier einige Tipps zum Kubernetes-Monitoring:
Tags und Labels verwenden: Diese definieren Anwendungen mithilfe von Metadaten und vereinfachen so das Management.
Sämtliche Container (und nicht nur bestimmte) im Blick behalten: Kubernetes basiert auf Pods – nicht auf Containern. Deshalb sollte man auch beim Monitoring auf dieser Ebene ansetzen.
Dienste identifizieren: So behalten Sie die kurzlebigen Kubernetes-Dienste besser im Blick.
Warnungen nutzen: Sie können festlegen, wie Ihre Kubernetes-Umgebung aussehen soll, und entsprechende Warnungen einrichten. Sie sollten es aber auch nicht übertreiben, da in verteilten Systemen ansonsten übermäßig viele Warnungen generiert werden.
Steuerungsebene prüfen: Die Steuerungsebene von Kubernetes funktioniert wie ein Fluglotse für Workloads und Cluster. Wenn Sie die einzelnen Komponenten der Steuerungsebene überprüfen, sorgen Sie also für mehr Effizienz bei der Orchestrierung und beim Job Scheduling.
Kubernetes-Sicherheitstipps für einzelne Phasen
Hier finden Sie einige Tipps zur Kubernetes-Sicherheit für die verschiedenen Phasen:
Entwicklung und Konzeption
Manche Kubernetes-Umgebungen sind sicherer als andere. Mit einer Multi-Cluster-Architektur oder mehreren Namespaces mit angemessenen RBAC-Kontrollen lassen sich Workloads isolieren.
Build
Verwenden Sie ein möglichst rudimentäres Image aus einem geprüften Repository.
Überprüfen Sie Container mit Scan-Tools auf Schwachstellen und Konfigurationsfehler.
Bereitstellung
Vor der Bereitstellung sollten alle Images überprüft und validiert werden.
Mit einem Admission Controller lässt sich die Validierung automatisieren, damit ausschließlich geprüfte Container-Images eingesetzt werden.
Laufzeit
Die Laufzeitumgebung bildet die letzte Verteidigungslinie für Kubernetes-Ressourcen.
Die Kubernetes API erstellt Audit-Logs, die man mithilfe eines Runtime-Sicherheitstools Sysdig kontrollieren sollte.
Images und Policy-Dateien sollten zudem laufend gescannt werden, damit Malware und Konfigurationsfehler nicht in die Laufzeitumgebung gelangen können.
Weiterführende Informationen zur Kubernetes-Sicherheit
Hier finden Sie weiterführende Ressourcen zur Kubernetes-Sicherheit.
Snyk bietet entwicklerfreundlichen Sicherheitstools wie Snyk Container und Snyk IaC, mit denen sich die Kubernetes-Sicherheit weiter verbessern lässt. Snyk automatisiert die Überprüfung von Anwendungscode, Container-Images und Kubernetes-Konfigurationen und stellt Insights und Empfehlungen direkt in den Entwickler-Workflows bereit.
„Produkte wie Snyk helfen uns dabei, Bereiche unserer Dienste zu identifizieren, die für externe Angriffe anfällig sind“, erklärt Rizzo. … „Mit Snyk in unserer CI/CD-Pipeline erfolgen die Sicherheitsprüfungen nun deutlich früher in der Entwicklung.“
Mit unserer neuen Partnerschaft mit Sysdig erweitern wir unsere Sicherheitsfunktionen zudem auf die Laufzeitumgebung aus.
Developer-First Security für Container
Mit Snyk identifizieren Sie Schwachstellen in Container-Images und Kubernetes-Workloads und adressieren sie automatisch.
Kubernetes-Sicherheit: Antworten auf häufige Fragen
Stellt Kubernetes ein Sicherheitsrisiko dar?
Kubernetes enthält zwar Sicherheitsfunktionen und hilfreiche Einstellungen, ist aber in der Standardkonfiguration nicht komplett geschützt. Deshalb sollte man sich mit der Konfiguration genau vertraut machen, damit die ausgeführten Container und Codes auch wirklich sicher sind.
Da die Konfiguration der Container, in denen die Anwendungen ausgeführt werden, zunehmend durch Entwickler erfolgt, sollten diese ebenfalls für das Thema Sicherheit sensibilisiert werden.
Wie schützt man Kubernetes Secrets?
Kubernetes Secrets werden standardmäßig unverschlüsselt gespeichert. Der erste Schritt sollte also darin bestehen, die Verschlüsselung beim Speichern zu aktivieren. Anschließend sollten rollenspezifische Zugriffskontrollen angewendet werden, um die Lese- und Schreibberechtigungen der Benutzer einzuschränken und die Berechtigungen zur Änderung bzw. Erstellung neuer Secrets festzulegen.
Wie schützt man Container in Kubernetes?
Die Sicherheit von Kubernetes-Containern beginnt mit der Auswahl eines vertrauenswürdigen, möglichst rudimentären Basis-Image. Anschließend sollten Sie die Container vor der Übergabe an die Produktion mit Scan-Tools auf Schwachstellen und Fehlkonfigurationen überprüfen. Mit Tools zu Laufzeitüberwachung erhalten Sie dann anhand von Audit-Logs und anderer Verfahren einen transparenten Überblick über die ausgeführten Container.
Wie gewährleistet man die Sicherheit von Kubernetes?
Kubernetes bietet integrierte Sicherheitsfunktionen, die aber nur dann wirklich wirksam sind, wenn sie richtig konfiguriert werden. Die Sicherheit beginnt bereits in der Design-Phase mit der Auswahl einer sicheren Architektur sowie eines sicheren Base-Image. Dann sollten Sie den Build-Prozess mit Scannern überwachen, um Schwachstellen und Konfigurationsfehler zu finden, bevor der Container in Produktion geht. Außerdem empfiehlt es sich, mithilfe von Monitoring-Tools die ausgeführten Container kontinuierlich zu überwachen.