Einleitung
Die Open-Source-Plattform Kubernetes ist gerade ein ziemliches Hype-Thema. Mittlerweile wurde Kubernetes von so gut wie allen großen Anbietern, wie etwa VMware, Google, Amazon und Microsoft übernommen. Grund genug, sich damit ein wenig genauer zu beschäftigen. Bevor ich jedoch auf die Sicherheit in Azure Kubernetes Service (AKS) zu sprechen komme, möchte ich zunächst allgemein über die wichtigsten Aspekte Rund um Containerisierung und Kubernetes sprechen. Ich hoffe, Sie bekommen dadurch einen guten Überblick.
Was ist ein Container?
Container sind isolierte Umgebungen zum Ausführen von Anwendungen. Sie enthalten neben dem Anwendungscode alles Weitere, was notwendig ist, um eine Anwendung ausführen zu können (z.B. Abhängigkeiten, Bibliotheken, Binärdateien und Konfigurationsdateien). Allerdings enthält ein Container im Gegensatz zu einer virtuellen Maschine kein Betriebssystem. Container teilen sich stattdessen den Kernel des darunterliegenden Host-Betriebssystems. Die Grundlage dafür bereitet die Technologie namespaces. Der Container Engine legt namespaces für die verschiedenen Aspekte eines Containers an, die als Isolierungschicht zwischen den Containern dienen:
Anwendungen werden heutzutage zunehmend containerbasiert erstellt, weil Containerisierung viele Vorteile gegenüber der klassischen Virtualisierung bietet:
- Containerisierte Anwendungen lassen sich leicht zwischen verschiedenen Plattformen und Clouds verschieben („write once, run everywhere“)
- Containerisierung ermöglicht eine effiziente Nutzung der Compute-Ressourcen. Auf einem Host können nämlich deutlich mehr Container als virtuelle Maschinen laufen, weil diese ohne Betriebssystem sehr „leichtgewichtig“ sind
- Container sind durch Ihre geringe Größe besonders schnell und lassen sich in Sekunden hochfahren
- Containerisierung erlaubt es, komplexe Anwendungen aus einer Vielzahl von Microservices zusammenzusetzen und erleichtert es Entwicklern dadurch schnell und kontinuierlich Anwendungen zu verbessern. Unternehmen wie Netflix können täglich dutzende Male neuen Code in Ihre Produktionsumgebung liefern, ohne dass Millionen von Benutzern Unterbrechungen erfahren
- Unterschiedliche Funktionen der containerbasierten Anwendung lassen sich schnell und unabhängig voneinander skalieren
Die bekannteste Containerisierung-Plattform ist das Open-Source-Tool „Docker“. Docker ist über die letzten Jahre faktisch zum Standard für containerisierte Anwendungen geworden. Mit Docker lassen sich in erster Linie Images erstellen, aus denen sich Instanzen – also Container – erzeugen lassen. Darüber hinaus lassen sich auf dem Hostsystem laufende Container mit Docker verwalten.
Wenn man Docker auf einer Vielzahl von Hosts installiert und die Anzahl der Container zunimmt, wird die Verwaltung deutlich schwieriger. In einem solchen Szenario kann man mit einer Container-Management-Lösung die Bereitstellung und Verwaltung von Anwendungscontainern vereinfachen und automatisieren.
Was ist Kubernetes?
Die bekannteste Container-Management-Lösung heißt Kubernetes (oftmals auch als K8s abgekürzt) und wird häufig zusammen mit Docker verwendet. Kubernetes fasst die physischen und virtuellen Maschinen, auf den die Container laufen, zu einem Cluster zusammen und automatisiert die Verteilung und Planung der Container über das Cluster hinweg auf effiziente Weise. Die Plattform ist sehr komplex und besteht aus zahlreichen Komponenten, z.B. Cluster, Nodes, Pods, Mastern, Services, Deployments, uvm. In diesem Medium-Artikel sind die wichtigsten Komponenten und Begrifflichkeiten von Kubernetes sehr gut und einfach erklärt. Ich kann Ihnen sehr empfehlen diesen Artikel durchzulesen, damit Sie grundlegend verstehen, was sich hinter dem Kubernetes-Vokabular verbirgt.
Was ist Azure Kubernetes Service (AKS)?
Azure Kubernetes Service (AKS) ist die von Microsoft gemanagte Kubernetes-Implementierung in Azure. In dieser Variante von Kubernetes verwaltet Microsoft die komplette Steuerungsebene von Kubernetes für Sie, sodass Sie sich hauptsächlich um die Nodes kümmern, auf denen Ihre Anwendung läuft. Das generelle Layout von AKS sieht wie folgt aus:
Ein Kubernetes-Cluster in AKS absichern
Sicherheit in einem Kubernetes-Cluster zu gewährleisten ist keine triviale Angelegenheit. Glücklicherweise müssen Sie sich bei der Verwendung von AKS deutlich weniger Gedanken um die richtigen Konfigurationen in ihrem Cluster machen, da sich Microsoft um Vieles im Hintergrund kümmert. Für Ihre eigenen Konfigurationen empfehle Ich Ihnen sich nach den Empfehlungen der offiziellen Kubernetes Dokumentation zu richten.
Im Folgenden werde ich auf die Sicherheitsaspekte der zentralen Clusterkomponenten und die Netzwerksicherheit bei der Nutzung von AKS eingehen:
AKS Master Node:
Wichtiger Teil der Master Node ist der API-Server, der als zentrale Schnittstelle fungiert und über den die Kommunikation aller Komponenten läuft. Zum Schutz vor unberechtigtem Zugriff muss ein Authentifizierungsdienst verwendet werden. In AKS lässt sich Azure Active Directory für die Benutzerauthentifizierung integrieren. Die rollenbasierte Zugriffsteuerung von Kubernetes (RBAC) kann dann auf Grundlage der Benutzeridentität oder Gruppenmitgliedschaft in AAD konfiguriert werden. Außerdem sollte sie sicherstellen, dass der API-Verkehr verschlüsselt ist und daher Transport-Layer-Security aktivieren. Ebenso kann der Zugriff auf den API-Server auf bestimmte autorisierte IP-Adressbereiche beschränkt werden.
Worker Nodes:
Worker Nodes sind die virtuellen Maschinen, auf denen Ihre containerbasierte Anwendung läuft. Die Windows und Linux Nodes werden von AKS jeweils mit minimalisierten Betriebssystemen ausgeführt. Linux-Nodes werden automatisch mit Betriebssystem-Sicherheitsupdates versorgt. Für den Fall, dass ein Neustart erforderlich ist, liegt es jedoch in Ihrer Verantwortung die Maschinen neu zu starten. Windows-Nodes müssen in regelmäßigen Abständen selbst upgedated werden. Zusätzlich sollten Sie alle gängigen Methoden anwenden, die dem Schutz von virtuellen Maschinen dienen, z.B. Sicherheitsrichtlinien, Firewalls und Anti-Virus.
Pods und Container:
Für Ihre Pods sollten Sie Ressourcenlimits festlegen, um zu verhindern, dass kompromittierte Pods auf zu viele darunterliegende Ressourcen des Worker Nodes zugreifen können. Die Container Images in Ihren Pods sollten nur aus sicheren Quellen stammen und auf Schwachstellen gescannt werden, bevor sie im Cluster ausgeführt werden.
Netzwerksicherheit
Neben den Komponenten spielt die Netzwerksicherheit in AKS eine wichtige Rolle. Hier gibt es von Microsoft selbst eine Best-Practices-Anleitung, die folgenden Punkte abhandelt:
- Auswahl eines geeigneten Netzwerkmodells
- Verteilen des Eingangsdatenverkehrs
- Absichern des Datenverkehrs mit einer Web Application Firewall
- Steuern des Datenverkehrsflusses mit Netzwerkrichtlinien
- Herstellen sicherer Verbindungen mit Clusterknoten
Zusammenfassung
Mit dem Dienst Azure Kubernetes Services vereinfacht Microsoft den Weg zur eigenen Kubernetes-Umgebung und nimmt Ihnen einige Sicherheitsverantwortlichkeiten ab.
Dennoch gibt es einiges zu tun, um eine wirklich sichere Kubernets-Umgebung zu schaffen und zu betreiben. Da die Plattform so komplex und mächtig ist, fällt es vielen Unternehmen schwer wichtige Sicherheitsmaßnahmen umzusetzen, was auch Cyberkriminellen nicht verborgen bleibt.
Kontaktieren Sie uns daher gerne, wenn Sie Unterstützung für Ihr Azure Kubernets Services Projekt benötigen.