Suchen

Sicherheit in Kubernetes beachten Container-Infrastrukturen richtig absichern

Autor / Redakteur: Thomas Joos / Peter Schmitz

Kubernetes wird in immer mehr Umgebungen eingesetzt, um Container-Infrastrukturen zu orchestrieren. Hier spielt die Sicherheit eine wichtige Rolle, da davon alle Apps und deren Microservices abgesichert werden, die in dieser Infrastruktur betrieben werden.

Die Absicherung von Container-Infrastrukturen sollte bereits in den Grundlagen der IT-Infrastruktur beginnen.
Die Absicherung von Container-Infrastrukturen sollte bereits in den Grundlagen der IT-Infrastruktur beginnen.
(© sutthinon602 - stock.adobe.com)

Kubernetes liefert viele Angriffsflächen und Möglichkeiten unberechtigte Zugriffe auf Container zu nehmen. Auch die Anwendungen die auf den Containern laufen stellen generelle Sicherheitsgefahren und Möglichkeiten der falschen Konfiguration dar. Die Rechte und die Sicherheitseinstellungen betreffen in einer Kubernetes-Infrastruktur immer die ganze Umgebung.

In vielen Fällen werden zwar die Funktionen von Kubernetes umfassend genutzt, allerdings nicht immer mit einem ausreichenden Sicherheitskonzept. Die Abläufe der Angriffe kann zum Beispiel beim Hack der Public Cloud von Tesla in 2018 in Erfahrung gebracht werden. Auch hier kommt Kubernetes zum Einsatz.

Bildergalerie
Bildergalerie mit 5 Bildern

Kubernetes-Infrastruktur absichern

Generell sollte die Absicherung von Kubernetes bereits in den Grundlagen der IT-Infrastruktur beginnen. In Kubernetes sollte generell streng mit Berechtigungen umgegangen werden. Daher sollte bereits frühzeitig geplant werden, wie die Authentifizierung in der Umgebung durchgeführt werden soll. Idealerweise sollte die Authentifizierung mit einem Dienst stattfinden, der im Unternehmen ohnehin schon genutzt wird.

Die Container-Hosts, ob virtuelle oder Bare-Metal müssen ordnungsgemäß installiert, aktualisiert und abgesichert sein. Das Basis-Betriebssystem und der Schutz der Umgebung sollten hier frühzeitig geplant werden. Wenn Kubernetes virtualisiert wird, müssen die Virtualisierungs-Hosts ebenfalls abgesichert und in das Konzept eingebunden werden.

Kubernetes sollte möglichst in aktueller Version in Betrieb sein und auch regelmäßig aktualisiert werden. Es gibt verschiedene Lücken, die Angreifern gestatten Code auf den Clusterknoten auszuführen. Solche Lücken können durch regelmäßige Aktualisierung geschlossen werden. Die Sicherheitslücke „CVE-2018-1002105“ ist ein solches Beispiel.

Bildergalerie
Bildergalerie mit 5 Bildern

Absicherung der Master Nodes und Worker Nodes

Kubernetes wird in der Umgebung über Master Nodes und Worker Nodes bereitgestellt. Beide Knotenvarianten erfordern eine eigene Absicherung, die bereits vor der Bereitstellung von Containern berücksichtigt werden muss. Hier sollte mit einem sicheren Linux-System gearbeitet werden, dass möglichst wenig Features umfasst. Es gibt auch Zusatztools, die dabei helfen die Sicherheit zu verbessern, in dem auch Schwachstellen in der Umgebung gefunden und behoben werden. Beispiele dafür sind coreos/clair oder aquasecurity/kube-bench. Mit „neuvector/kubernetes-cis-benchmark“ können Kubernetes-Umgebungen auf fehlerhafte Konfigurationen getestet werden. Nur die für den Betrieb von Containern notwendigen Funktionen sind hier notwendig. Vor allem die Worker Nodes haben nur eine Aufgabe: Das Ausführen von Containern. Aus diesem Grund ist es sehr sinnvoll hier hochsicher zu konfigurieren und diese Server so ideal wie möglich abzusichern.

Die Verwaltung von Kubernetes erfolgt meistens mit „kubelet“. Hier sollte bereits frühzeitig eingeschränkt werden, von welchen Adressen Befehle akzeptiert werden. Außerdem ist es an dieser Stelle wichtig die Zertifikate zu hinterlegen, die für die Kommunikation genutzt werden sollen. Auch aus diesem Grund sollte bereits frühzeitig geplant werden, welche Stelle die Zertifikate ausstellen soll. Die Überwachung der Dienste sollte natürlich ebenfalls frühzeitig geplant und umgesetzt werden. Auch Kubernetes bietet eine interne Überwachung, die auch im Rahmen der Sicherheit eine wichtige Rolle spielt.

Bildergalerie
Bildergalerie mit 5 Bildern

Pods und Container absichern

Die nächste Einheit in Kubernetes sind die Pods, über die Container bereitgestellt werden. Auch hier muss bereits bei der Planung berücksichtigt werden, wie die Pods abgesichert werden können und sollen. Wichtig ist hier die Konfiguration von TLS für die verschlüsselte Kommunikation zwischen den Pods. Die Pods sollten so definiert werden, dass strenge Grenzwerte für Speicher und andere Ressourcen gelten. Wenn ein Pod angegriffen oder sogar übernommen wird, kann der Angreifer nicht die ganze Umgebung ausbremsen, da der Pod nur eine bestimmte Anzahl an Ressourcen nutzen darf. Das gilt natürlich auch für die Container, die im entsprechenden Pod betrieben werden. Auch hier sollten regelmäßige Überwachungen des Zustands der Pods konfiguriert werden. Sicherheits-Richtlinien können dabei helfen für mehr Sicherheit in Kubernetes-Umgebungen zu sorgen. Hier unterstützen Lösungen wie Istio.

Schlussendlich werden in den Pods von Kubernetes die Container betrieben. Die Container werden wiederum mit Container-Images bereitgestellt. Die Container-Images müssen auch hier sicher bereitgestellt werden, damit die Container die auf den Images aufbauen, so sicher wie nur möglich sind. Die Images der Container sollten darüber hinaus regelmäßig aktualisiert werden, damit alle bekannten Sicherheitslücken regelmäßig geschlossen werden. Natürlich sollten auch Container nur mit minimalen Rechten gestartet werden. Dazu kommt, dass Root-Rechte auf Ebene der Container sehr eingeschränkt, bis komplett vermieden werden sollten.

Bildergalerie
Bildergalerie mit 5 Bildern

Service-Meshes absichern

Am Ende der Kette stehen die Anwendungen und Dienste, die in den Containern betrieben werden. Auch diese müssen so sicher wie möglich konfiguriert sein und vor allem auch auf die Sicherheitsfunktionen von Kubernetes aufbauen und diese nutzen. In Container-Umgebungen werden Anwendungen in Microservices aufgeteilt und auf verschiedenen Containern, teilweise in verschiedenen Pods miteinander vernetzt.

Microservices, die für den Betrieb einer Anwendung miteinander kommunizieren und Daten austauschen müssen, können zu einem Service-Mesh zusammengefasst werden. In einem Service-Mesh wird gesteuert, wie die Kommunikation zwischen den Microservices abläuft und welche Container auf die verschiedenen Arten miteinander kommunizieren können. An dieser Stelle ist es wichtig die Überwachung, Protokollierung und das Tracing aller Microservices zu konfigurieren. Hier spielen auch Authentifizierung, Verschlüsselung und Rechteverwaltung in der Kommunikation eine besonders hohe Rolle. Über ein Service-Mesh werden viele diese Aufgaben zentralisiert. Das ermöglicht es, dass viele Bibliotheken in einzelnen Containern nicht mehr notwendig sind. Das spart Leistung ein und verbessert die Sicherheit.

Bereits bei der Bereitstellung einer Anwendung sollte in Container-Umgebungen generell darauf geachtet werden, dass der Code und der komplette Ablauf der Bereitstellung einem Sicherheitskonzept untergeordnet werden.

(ID:46935162)

Über den Autor

 Thomas Joos

Thomas Joos

Freiberuflicher Autor und Journalist