Kubernetes-Security
Container-Nutzung - Kubernetes als Plus in der IT-Security
Palo Alto Networks erläutert Aspekte der Container-Nutzung für die Sicherheit der Infrastruktur
Da sich immer mehr Unternehmen von den traditionellen virtuellen Maschinen für die Entwicklung von Anwendungen abwenden, ist die Containerisierung zur neuen Norm geworden. Container bieten einen moderneren Ansatz, da sie in der Regel leichter und schneller, unabhängig von Betriebssystemen und Infrastrukturen sind und Anwendungen in größerem Umfang verarbeiten können. Diese Skalierung kann jedoch eine Herausforderung für die Verwaltung darstellen. An dieser Stelle kommt Kubernetes ins Spiel.
Palo Alto Networks erläutert die Aspekte der Container-Nutzung für die Sicherheit der Infrastruktur und beschreibt grundlegende Security-Features:
Kubernetes hat sich aus vielen guten Gründen – Skalierbarkeit, Stabilität, Kosten (in einigen Fällen) und, wenn es richtiggemacht wird, Security – schnell zu einer der beliebtesten Cloud-Technologien entwickelt. Leider sind diese Vorteile mit einem Kompromiss verbunden, der einem bereits komplexen Konstrukt eine weitere Ebene hinzufügt.
Eine der großen Herausforderungen bei der Containerisierung im Vergleich zu virtuellen Maschinen ist die Sicherheit, da sie schwieriger zu isolieren sind. Obwohl Kubernetes versucht, dieses Problem mit seinen nativen Sicherheitsfunktionen zu lösen, kann es auch zu mehr Komplexität und damit zu einer größeren Angriffsfläche führen. In diesem Beitrag gehen wir auf einige der Sicherheitsfunktionen ein, die Kubernetes bietet, sowie auf seine einzigartigen Vorteile in Bezug auf DevSecOps durch die Verwendung von Infrastructure as Code (IaC) für das Cluster-Management.
Native Kubernetes-Sicherheitstools
Die Cloud-Infrastruktur hat sich trotz – oder vielleicht gerade wegen – der Sicherheitsbedenken, mit denen sie konfrontiert ist, weit entwickelt. Kubernetes verfügt über integrierte Sicherheitsfunktionen, die allein vielleicht nicht ausreichen, um die gesamte Infrastruktur zu schützen, aber einen guten Ausgangspunkt für den Schutz von Kubernetes-Umgebungen darstellen. Unternehmen gehen an die Sicherung dynamischer, komplexer und vielschichtiger Kubernetes-Systeme heran, indem sie Kubernetes-spezifische Bedrohungen identifizieren und einen umfassenden Kontext und Einblicke bieten.
Im Folgenden führt Palo Alto Networks einige der Kubernetes-spezifischen Sicherheitsfunktionen auf:
1. Kubernetes Role-Based Access Control (RBAC)
RBAC, also die rollenbasierte Zugriffskontrolle, ist eine Kubernetes-Funktion, mit der Administratoren den Zugriff auf Dienste anhand von Rollen und Identitäten einschränken können. RBAC verbessert die Sicherheit eines Kubernetes-Clusters, indem es einschränkt, wer worauf Zugriff hat. Dies wird erreicht, indem der Ressourcenzugriff auf Benutzer und Anwendungen durch Autorisierung kontrolliert wird, z. B. durch Gewährung des Zugriffs auf einen Benutzer, Hinzufügen oder Entziehen von Rechten und Festlegung von Regeln. Mehr Informationen über RBAC finden sich in der offiziellen Kubernetes-Dokumentation .
2. Pod-Sicherheitspolicies
Mit PodSecurityPolicies können Administratoren das Verhalten von Pods und Containern steuern, z. B. indem sie diese daran hindern, im privilegierten Modus ausgeführt zu werden, oder indem sie ihnen vorschreiben, ein schreibgeschütztes Dateisystem zu verwenden. Die PodSecurityPolicy legt eine Reihe von Anforderungen fest, die Pods erfüllen müssen, um vom Cluster akzeptiert zu werden. Wenn eine Anfrage zur Erstellung oder Aktualisierung eines Pods die Anforderungen nicht erfüllt, wird die Anfrage abgelehnt und ein Fehler zurückgegeben. Um die PodSecurityPolicy zu verwenden, müssen Administratoren zunächst die Richtlinien erstellen und beschreiben, die neue und aktualisierte Pods erfüllen müssen.
Kubernetes hat bekannt gegeben, dass die Pod Security Policy (PSP) im Jahr 2021 veraltet sein wird, aber ab Version 1.21 bis 1.25 der Kubernetes Deprecation Policy folgen wird. Die Kubernetes-Community hat mehrere Einschränkungen als Gründe für die Abschaffung der PSP genannt, darunter Konflikte im Autorisierungsparadigma, Komplexität in der API und Probleme mit dem Funktionsumfang und dem Bereitstellungsablauf. Bessere Lösungen sind im Kommen, wie die Kubernetes Pod Security Standards und andere IaC-Sicherheitsoptionen von Drittanbietern, wie Open Policy Agent (OPA) und Prisma Cloud.
3. Netzwerk-Policies
Die Kubernetes-Netzwerkrichtlinie ermöglicht Administratoren und Entwicklern die Kontrolle darüber, welcher Netzwerkverkehr zulässig ist. Mit Kubernetes NetworkPolicies können Administratoren den Verkehrsfluss für bestimmte Anwendungen in ihrem Cluster auf der Ebene der IP-Adresse und des Ports regeln. Hierzu gilt es, festzulegen, wie ein Pod mit verschiedenen Netzwerkelementen (Endpunkten und Diensten) über das Netzwerk kommunizieren kann. Diese werden auf eine Verbindung mit dem betreffenden Pod an einem oder beiden Enden angewendet. Wenn ein Cluster eine mehrstufige Anwendung hostet, ermöglicht die Definition von Netzwerkrichtlinien die Implementierung detaillierter Sicherheitsprotokolle.
4. Admission Controllers
Admission Controllers in Kubernetes sind Plugins, die die Regeln für die Persistenz von Kubernetes-Objekten regeln und kontrollieren. Sie dienen als Gatekeeper, fangen (authentifizierte) API-Anfragen ab und stellen fest, ob sie gegen eine vordefinierte Richtlinie verstoßen, bevor sie sie ablehnen oder so ändern, dass sie den Richtlinien entsprechen. Admission Controller werden verwendet, um mehrere grundlegende Kubernetes-Best-Practices wie Limits und Anfragen zu gewährleisten und sicherzustellen, dass Pods nicht übermäßig privilegiert sind. Admission Controller sind also eine weitere Funktion, die illegale Aktivitäten in einer Kubernetes-Umgebung verhindert. Wie die Netzwerk- und Namensraumsegmentierung sind sie jedoch nur dann sinnvoll, wenn sie korrekt konfiguriert und durchgesetzt werden.
5. TLS für Kubernetes-Ingress
Ein Ingress ist ein Kubernetes-Objekt, das den Zugriff auf Kubernetes-Dienste von außerhalb des Clusters ermöglicht. Administratoren konfigurieren den Zugriff, indem sie festlegen, welche eingehenden Verbindungen welche Dienste erreichen, wobei sie einen Satz von Regeln verwenden. So können sie alle ihre Routing-Regeln in einer einzigen Ressource zusammenfassen. Ein Geheimnis, das einen privaten TLS-Schlüssel (Transport Layer Security) und ein Zertifikat enthält, kann zur Sicherung einer Kubernetes-Anwendung verwendet werden. Nur ein TLS-Port, 443, wird von Ingress unterstützt, was eine TLS-Terminierung voraussetzt. Das TLS-Geheimnis muss die Schlüssel namens tls.crt und tls.keys enthalten, die das TLS-Zertifikat bzw. den privaten Schlüssel enthalten.
In Anbetracht der Tatsache, dass Kubernetes eher als Orchestrator denn als vollwertige Sicherheitslösung gedacht ist, verfügt es über eingebaute Funktionen, um einige Leitplanken für die Beschränkung des Zugriffs und die Kontrolle des Pod- und Container-Verhaltens zu schaffen. Dennoch erfordern die meisten Sicherheitsprobleme in einer Kubernetes-Umgebung, wie etwa anfällige Container-Images und Fehlkonfigurationen, zusätzliche Sicherheitskontrollen.
Kubernetes, IaC und DevSecOps
Kubernetes ermöglicht die Bereitstellung skalierbarer, modularer und fehlertoleranter moderner Container-Anwendungen. Mit Kubernetes geben Administratoren den Zustand an, in dem sich ihre Umgebung befinden soll, und Kubernetes arbeitet kontinuierlich daran, diesen Zustand aufrechtzuerhalten, wodurch die Administratoren von der manuellen Verwaltung der Infrastruktur entlastet werden. Die manuelle Bereitstellung eines Kubernetes-Clusters und seiner Addons kann allerdings sehr zeitaufwändig sein – und hier kommt Infrastructure as Code (IaC) ins Spiel. IaC nutzt Code, um Infrastrukturressourcen wie Datenserver, Speicher und Netzwerke zu verwalten, anstatt sie manuell zu verwalten. Darüber hinaus sind IaC-Bausteine wie Kubernetes-Manifeste, Helm-Diagramme und Kustomize-Dateien maschinenlesbar, was Versionskontrolle und Auditierbarkeit sowie eine einfachere Zusammenarbeit und Sicherheitstests ermöglicht.
Die Einbettung von Kubernetes-Sicherheitsleitplanken und -tests in den gesamten Softwareentwicklungszyklus, allgemein als DevSecOps bekannt, ist für die Absicherung von containerisierten, Cloud-nativen Anwendungen erforderlich. DevSecOps zielt darauf ab, die Sicherheit in die DevOps-Prozesse zu integrieren, und zwar auf die gleiche Weise, wie die Entwicklung, das Testen und die Bereitstellung durch CI/CD-Pipelines automatisiert werden, um Folgendes zu ermöglichen:
- Erhöhte Sichtbarkeit und Unveränderlichkeit von Cloud-Ressourcen.
- Geringeres Betriebsrisiko dank Compliance-Richtlinien und eingebetteter nativer Sicherheit.
- Höhere betriebliche Effizienz durch schnellere Erkennung von Bedrohungen und priorisierte Risikobewertung in Kubernetes.
- Erhöhter Schutz und reduzierte Wartungskosten.
Infrastrukturhärtung mit Codesicherheit ist eine hervorragende Lösung für moderne DevOps-Teams, die die Sicherheitsverantwortung über bestehende Frameworks innerhalb von CI/CD-Pipelines verteilen und die Verantwortung für die Sicherheit an einzelne Mitarbeiter delegieren möchten.
Kubernetes ist de facto die Container-Managementplattform. Aufgrund der Komplexität der Bereitstellung, Verwaltung und Erweiterung von Containern kann die Sicherheit von Kubernetes jedoch leicht zu einer Belastung werden. Daher ist es trotz der eingebauten Sicherheitskontrollen wichtig, zusätzliche Best Practices für die Kubernetes-Sicherheit zu implementieren und zu befolgen.
Wie bereits erwähnt, bietet die Einführung von Kubernetes und die Priorisierung von IaC zahlreiche Vorteile für die Sicherheit der Infrastruktur. DevOps-Teams müssen die Sicherheit in ihre Workflows integrieren und DevSecOps nutzen, um die Sicherheit „nach links“ zu verlagern und gleichzeitig zu gewährleisten, dass ihre Kultur und Prozesse flexibler und automatisierter werden. Wenn DevSecOps gut gemacht ist, wird jedes Team in der Lage sein, seine Fähigkeit zu erklären, dem Unternehmen zu helfen, die Leistung von Cloud-nativen Modellen im Allgemeinen und Containern im Besonderen voll zu nutzen.
Complete Guide to Kubernetes Security