Sicherheit im Container-Cluster Kubernetes-Security bei der Entwicklung

Von Thomas Joos

Anbieter zum Thema

Geht es um die Entwicklung von Container-Apps, spielt natürlich auch die Sicherheit eine wesentliche Rolle. Hier sollten Entwickler bereits frühzeitig planen, damit ihre App optimal an die jeweiligen Sicherheitsfunktionen von Kubernetes angebunden werden können.

Kubernetes kann auch in Windows bereitgestellt oder von Windows aus gesteuert werden.
Kubernetes kann auch in Windows bereitgestellt oder von Windows aus gesteuert werden.
(Bild: Joos / Microsoft)

Bei der Entwicklung von Microservices-Anwendungen splitten Entwickler ihre Server-Anwendungen häufig in verschiedene Dienste und damit Container auf, allerdings nicht immer mit Schwerpunkt auf die Sicherheit. Maßnahmen für eine bessere Sicherheit spielen auch beim Einsatz von Containern eine wichtige Rolle. Entwickler sollten bei der Bereitstellung von Kubernetes eingebunden werden.

Vor allem bei der Bereitstellung neuer Worker Nodes, also den Clusterknoten in Kubernetes auf denen die Container laufen, sollten Entwickler mit eingebunden werden, um die Sicherheit bereits auf dieser Ebene zu optimieren. Worker Nodes sollten so sicher wie möglich betrieben werden und auch durch entsprechende Monitoring-Lösungen überwacht werden.

Bildergalerie

Sinnvoll ist auch der Einsatz einer Firewall für die Container-Umgebung. Hier ist es natürlich wichtig, dass Entwickler eingebunden sind, damit die verschiedenen Microservices entsprechend konfiguriert werden können. Hinzu kommen regelmäßige Schwachstellenanalysen stattfinden und Richtlinien-basierte Zugriffe.

Dem DevSecOps-Gedanken folgend sollte die Bereitstellung von Pods, Containern, Worker Nodes und anderen Bestandteilen im Kubernetes-Cluster so weit wie möglich automatisiert werden. So ist gewährleistet, dass alle Komponenten in der Umgebung einem identischen, fest definierten Stand entsprechen.

Test-Umgebung mit Kubernetes aufbauen

Parallel müssen die Administratoren der Umgebung natürlich regelmäßig die Container-Engine und auch die Container-Verwaltung, also in diesem Beispiel Kubernetes, aktualisieren und bekannte Sicherheitslücken schnell schließen. Nach der Aktualisierung müssen die eingebundenen Apps natürlich noch genauso funktionieren wie zuvor. Aus diesem Grund ist es sicherlich sinnvoll, einen Test-Cluster zu betreiben.

Um die Apps vor der Aktualisierung der Produktivumgebung ausführlich auf Kompatibilität zu testen ist also unumgänglich, dass sich Entwickler eine eigene Kubernetes-Umgebung aufbauen. Beim Einsatz von Docker für Windows kann Kubernetes auch als Ein-Knoten-Cluster in Windows 10 bereitgestellt werden. Idealerweise sollte der Cluster möglichst dem Versionsstand und der Konfiguration entsprechen, die auch im produktiven Betrieb laufen.

Neue Versionen kommen in kürzeren Zeiträumen

Beim Einsatz von Microservices werden die Produktzyklen häufig deutlich verkürzt, und es kommen schneller neue Versionen, die auch produktiv genommen werden, als beim traditionellen, monolithischen Ansatz. Beim Einsatz mit Containern kommen in den meisten Fällen auch Automatisierung, Continuous Integration und Continuous Deployment zum Einsatz. DevOps-Ansätze werden in containerisierten Umgebungen besonders häufig eingesetzt. Dieser Ansatz sollte den Grundsätzen für die sichere Bereitstellung von Containern mit Kubernetes entsprechen.

Pods sicher betreiben

Generell kommen Entwickler kaum darum herum, sich mit der Sicherheit der Pods zu beschäftigen, in denen die Container laufen. Es ist also durchaus sinnvoll, dass sich Entwickler mit der Sicherheit der Pods und deren sicheren Erstellung auseinandersetzen. Über die Konfigurationsdateien der Pods kann festgelegt werden, welche Einstellungen für diese gelten und ob Limits hinterlegt werden.

In Pods werden die Container betrieben. Container basieren wiederum auf Container-Images. Auch hier sollten sich Entwickler mit den Möglichkeiten des Systems auseinandersetzen. Die Images für Container sollten zusammen mit den Entwicklern geplant werden, die Apps für die Container entwickeln, die mit dem Image bereitgestellt werden.

Wichtig sind hier die Rechte des Benutzers im Container/Pod und vor allem, mit welchen Rechten ein Pod selbst ausgeführt wird. Hier sollten möglichst minimale Rechte genutzt werden. Außerdem sollten Container-Images aktuell gehalten werden. Sicherheitsrichtlinien für Pods sind idealerweise möglichst eng gefasst, Entwickler müssen ihre App auf diese Sicherheitsanforderungen hin optimieren.

Verbundene Microservices absichern

In vielen Fällen verteilt sich eine Anwendung auf mehrere Microservices, die wiederum in verschiedenen Containern betrieben werden. Die Container werden miteinander vernetzt und bilden dadurch die Funktionen, mit denen die App erst richtig funktioniert. Die Kommunikation zwischen den verschiedenen Containern muss optimal abgesichert werden. Auch zwischen den Microservices, also den einzelnen Diensten einer App, gibt es Authentifizierungen.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Die Daten zwischen den Containern sollten verschlüsselt werden. Damit muss die App klarkommen und die einzelnen Dienste der App müssen sicher miteinander kommunizieren können. Auf der Seite Kubesec.io lassen sich Analysen der Sicherheitsoptionen durchführen.

Im Rahmen der Bereitstellungen sollte ständig überprüft werden, ob die Container, Container-Images, Pods und die bereitgestellten Anwendungen Lücken aufweisen, die geschlossen werden müssen. Sicherheitsanalysen für Container-Umgebungen lassen sich in vielen Fällen bereits in den CI/CD-Prozess mit einbinden.

In jedem Fall sollten für die jeweilige App nur die Container-Images genutzt werden, die Entwickler und Administratoren freigegeben haben, und die durch Sicherheitstests überprüft wurden. Images können zum Beispiel auch signiert werden. Das sollte bei der Bereitstellung der Microservices beachtet werden. So kann zum Beispiel festgelegt werden, dass die Bereitstellung der App nur auf Containern erfolgt, deren Image signiert wurde.

Fazit

Beim Einsatz von Microservices in Container-Umgebungen spielt Kubernetes eine besonders wichtige Rolle. Wird in Umgebungen auf Kubernetes gesetzt, sollten die Sicherheitsoptionen und -Funktionen möglichst bereits vor der Bereitstellung des Clusters definiert werden. Hier sollten Entwickler und Administratoren eng zusammenarbeiten, damit die Apps möglichst sicher und gleichzeitig stabil betrieben werden können.

(ID:46831113)