Erstellen Sie ausfallsichere, sichere Microservices mit Mikrosegmentierung
Dieser Artikel erschien ursprünglich in Der neue Stack.
Vor etwa 10 bis 12 Jahren erlebte die Welt der Software einen Wandel in den architektonischen Aspekten von Unternehmensanwendungen. Architekten und Softwareentwickler begannen, sich von den riesigen, eng gekoppelten, monolithischen Anwendungen, die in den privaten Rechenzentren bereitgestellt werden, zu einer stärker auf Microservices ausgerichteten Architektur zu bewegen, die in einer öffentlichen Cloud-Infrastruktur gehostet wird. Die inhärent verteilte Natur von Microservices ist eine neue Herausforderung für die Sicherheit in der Public Cloud. Trotz der zunehmenden Einführung von Microservices-orientierten Architekturen für die Erstellung skalierbarer, autonomer und robuster Unternehmensanwendungen in den letzten zehn Jahren haben Unternehmen im Vergleich zu herkömmlichen Rechenzentren oft Schwierigkeiten, sich vor dieser neuen Angriffsfläche in der Cloud zu schützen. Dazu gehören Bedenken hinsichtlich der Mandantenfähigkeit und des Mangels an Transparenz und Kontrolle über die Infrastruktur sowie die Betriebsumgebung. Diese architektonische Verschiebung erschwert das Erreichen von Sicherheitszielen, insbesondere da der Schwerpunkt auf schnelleren containerbasierten Bereitstellungen liegt.
In diesem Artikel erfahren Sie, was Mikrosegmentierung ist und wie sie Softwarearchitekten, DevOps-Ingenieure und IT-Sicherheitsarchitekten in die Lage versetzen kann, sichere und belastbare Microservices zu erstellen. Insbesondere werde ich die Herausforderungen der Netzwerksicherheit im Zusammenhang mit dem beliebten Container-Orchestrierungsmechanismus Kubernetes erörtern und den Wert der Mikrosegmentierung veranschaulichen, um laterale Bewegungen zu verhindern, wenn eine Sicherheitsverletzung stattfindet.
Sicherheitsherausforderungen bei der Bereitstellung von Microservices
Eine Microservice-orientierte Architektur erfordert die Aufteilung von Anwendungen in kleinere, lose gekoppelte Dienste. Aufgrund der verteilten Natur dieser Dienste haben sie oft ihre eigenen Datenspeicher. Jeder dieser Dienste wird unabhängig voneinander mithilfe eines Containers bereitgestellt, der einen Mechanismus für eine Anwendung bietet, um alles von Objektcode, Bibliotheken von Drittanbietern, Betriebssystemen, Tools und anderen Abhängigkeiten zu packen. Sobald alle Notwendigkeiten verpackt sind, bieten Container die Ausführungsumgebung, um sie reibungslos auszuführen. Diese Container werden mithilfe von Orchestratoren wie Kubernetes verwaltet.
Nach der landläufigen Meinung ist das Container-Ökosystem darauf ausgelegt, Sicherheit durch Isolation durchzusetzen. Die Isolation zwischen Containern bietet jedoch nicht unbedingt die erforderlichen Sicherheitsgrenzen. Kubernetes bietet verschiedene Sicherheitsfunktionen wie Authentifizierung, Autorisierung, Netzwerkrichtlinie und Pod-Sicherheitsstandard usw. Aber leider bieten weder Container noch Kubernetes standardmäßig Sicherheit. Bei Kubernetes-Bereitstellungen wird in der Standardkonfiguration die Funktionalität über die Sicherheit gestellt. Daher weiß ein Entwickler oder ein Zuverlässigkeitstechniker, der für das Erstellen, Verschieben und Löschen dieser Container verantwortlich ist, möglicherweise nicht immer, wie die Sicherheit von Bereitstellungen gewährleistet werden kann. Werfen wir einen genaueren Blick auf einige der wichtigen Aspekte von Kubernetes aus der Netzwerk- und Sicherheitsperspektive:
- Namespace: In Kubernetes ist ein Namespace ein logischer Weg, um Cluster-Ressourcen in virtuellen Raum auf mehrere Benutzer aufzuteilen. Im Gegensatz zu Linux wird keine Netzwerksegmentierung erzwungen. Beachten Sie, dass ein Namespace keine Sicherheitsgrenze ist und daher Dienste in einem Namespace auf Dienste in einem anderen Namespace zugreifen können.
- Netzwerk-Richtlinie: Die Kubernetes-Netzwerkrichtlinie ist ein anwendungsspezifisches Konstrukt, das die Kommunikation zwischen Layer-3- und Layer-4-Namespaces, Pods und IP-Adressblöcken ermöglicht. Wenn Kubernetes installiert ist, ist die Netzwerkrichtlinie standardmäßig nicht verfügbar. Man muss Netzwerk-Plugins installieren und konfigurieren, um Netzwerkrichtlinien durchzusetzen, bevor Pods erstellt werden. Es ist auch erwähnenswert, dass Netzwerkrichtlinien nicht auf Dienstebene durchgesetzt werden können. Dies ist aus Sicherheitssicht ein erhebliches Manko, da die Zugriffskontrolle nicht auf Dienste ausgeweitet werden kann.
- Sicherheitsstandard für Pods: In einem Cluster unterstützen Pods mehrere Container, die dieselbe physische oder virtuelle Maschine gemeinsam nutzen. Sie ermöglichen die gemeinsame Nutzung von Daten und die Kommunikation zwischen den Containern innerhalb des Pods. Ein Pod-Sicherheitsstandard ermöglicht es einem Administrator, Ressourcen und deren Berechtigungen mithilfe eines fein abgestuften Autorisierungsmodells zu steuern. Für diese Sicherheitskontrolle ist ein Zugangscontroller erforderlich, der standardmäßig nicht aktiviert ist. Ein privilegierter Pod bietet administrativen Zugriff auf alle Container. Dies hat zur Folge, dass der Angreifer, der Zugriff auf privilegierte Container erhält, administrativen Zugriff auf Hostressourcen erhalten kann.
- Geheime Lagerung: Kubernetes speichert sensible und vertrauliche Informationen wie Passwörter, OAuth-Token und SSH-Schlüssel als Secrets in Base-64-codierter Form, die als Klartext betrachtet wird. Die Autorisierungsrichtlinie, die zum Einschränken des Zugriffs auf Geheimnisse verwendet wird, ist nicht standardmäßig konfiguriert. Diese werden über Umgebungsvariablen oder Manifest-Dateien geteilt, die ebenfalls als unsichere Praxis für den Umgang mit Geheimnissen gelten. In Ermangelung einer standardmäßigen Verschlüsselung von Geheimnissen im Ruhezustand und des Fehlens einer robusten Geheimnisverwaltung werden Geheimnisse zu einem attraktiven Ziel für laterale Bewegungen.
Lateral Movement und der böswillige Insider

Aufgrund der verteilten Natur von Microservices ist Konnektivität äußerst wichtig. Insbesondere müssen Container und Pods in der Lage sein, über Namespaces hinweg miteinander zu kommunizieren. Die standardmäßigen Netzwerkrichtlinien auf Cluster-Ebene implementieren jedoch nicht unbedingt das Prinzip der geringsten Rechte . Unabhängig davon, wie Sie Ihren Code sichern, kann daher der unbefugte implizite Zugriff auf freigegebene Ressourcen nicht verboten werden. Infolgedessen kann die Anwendung anfällig für laterale Bewegungen innerhalb des Clusters werden. Die Mikrosegmentierung ermöglicht die Implementierung einer granularen Zugriffskontrolle, indem sichere Zonen um jeden Microservice auf Container-, Pod- und Cluster-Ebene erstellt werden, wodurch der Explosionsradius erheblich reduziert und die Ausfallsicherheit bei der Wiederherstellung nach einem erfolgreichen Angriff erhöht wird.
Die zweite prominente Bedrohung, die das Sicherheitsmodell des bestehenden Kubernetes-Frameworks in Bezug auf Microservices darstellt, ist ein böswilliger Insider. Aus der Sicht eines Angreifers, wenn die Sicherheit nicht standardmäßig verfügbar ist, sind mehrere Fehlkonfigurationen möglich. In Ermangelung einer starken Zugriffskontrolle oder Autorisierungsrichtlinien ermöglichen Angriffe wie Server-Side Request Forgery (SSRF) dem Angreifer, einen authentifizierten Zugriff auf einen Pod zu nutzen, um unbefugten Zugriff auf Ressourcen innerhalb eines anderen Pods zu erhalten.
Wie oben erläutert, haben wir festgestellt, dass standardmäßig keine angemessenen Sicherheitskontrollen zum Schutz von Geheimnissen verfügbar sind. Das Nichtverschlüsseln und Rotieren von Geheimnissen sowie das Nichteinschränken des Zugriffs auf Geheimnisse sind in der Tat keine damit zusammenhängenden Probleme, aber in Ermangelung einer einzigen Sicherheitskontrolle (in diesem Fall fehlende Verschlüsselung) wird die zweite Sicherheitskontrolle (d. h. die Einschränkung des Zugriffs auf die geheimen Speicher) entscheidend, um die Ausnutzung durch einen böswilligen Insider (z. B. einen verärgerten Administrator) zu verhindern.
Einführung von Cyber-Resilienz mit Mikrosegmentierung
Im Kontext der Sicherheit ist Resilienz die Fähigkeit, sich schnell nach einem einfachen Ausfall aufgrund von Angriffen oder katastrophalen Ereignissen wie Sicherheitsverletzungen zu erholen. Der erste Schritt beim Aufbau resilienter Microservices besteht darin, zu verstehen, was wir vor dem Angreifer schützen möchten und wie wir die Auswirkungen begrenzen können, wenn die Ressource oder Ressource kompromittiert wird. Die Mikrosegmentierung hilft uns, die Ressourcen zu bestimmen, die wichtige Daten oder kritische fehlertolerante Systeme enthalten, und sie bietet auch einen Mechanismus, um den Zugriff auf der Grundlage der geringsten Rechte zu sperren. Auf diese Weise werden die anderen Ressourcen selbst dann nicht beeinträchtigt, wenn eine kritische Ressource kompromittiert wird.
Der moderne Softwareentwicklungszyklus von heute legt besonderen Wert auf die schnelle Bereitstellung von Funktionen. Diese Funktionen werden in der Produktion über Container noch schneller bereitgestellt, meist von denselben Entwicklern oder DevOps. Wenn wir alle Arten von Schwachstellen berücksichtigen, für die der Code von Microservices, Bibliotheken von Drittanbietern und anderen Abhängigkeiten, Containern oder Clustern anfällig ist, wie können wir dann all diese Angriffe identifizieren und verhindern? Die Antwort besteht darin, den Zugriff auf kritische Ressourcen zu blockieren und nur auf einer "Need-to-know-Basis" durch Mikrosegmentierung zuzulassen.
Erste Schritte mit der Mikrosegmentierung
Es gibt keine einheitliche Strategie für den Einstieg in die Mikrosegmentierung, aber im Folgenden finden Sie einige bewährte Methoden für den Start eines Mikrosegmentierungsprojekts für Microservices:
1. Kenntnis der Microservice-Entwurfsmuster und Verwendung einer Mikrosegmentierungsvorlage
Die Kenntnis der Entwurfsmuster erleichtert ein tieferes Verständnis der Architekturkomponenten, des Datenflusses und der Ressourcen, die kritische Daten enthalten. Basierend auf diesen häufig verwendeten Designmustern kann man entsprechende Mikrosegmentierungsvorlagen erstellen. Sobald diese Vorlagen vom Sicherheits- und Netzwerkteam überprüft wurden, können sie einfach wiederverwendet und schneller skaliert werden.
Im Gegensatz zu den riesigen, eng gekoppelten monolithischen Anwendungen folgen die Anwendungen, die auf einer Microservices-orientierten Architektur basieren, einem oder mehreren bestimmten Entwurfsmustern. Bei diesen Entwurfsmustern kann es sich um eines der folgenden Muster handeln:
- Bei den Zerlegungsmustern werden Anwendungen basierend auf den Geschäftsfunktionen in Unterdomänen oder Transaktionen unterteilt.
- Integrationsmuster umfassen Entwurfsmuster für die Service-Integration, z. B. API-Gateway, Aggregator, verkettete Microservices usw.
- Datenbankmuster konzentrieren sich auf die Position von Datenbanken in der Gesamtarchitektur der Anwendungen. Beispiele hierfür sind Datenbank pro Dienst, gemeinsam genutzte Datenbank, Event Sourcing usw.
- Beobachtbarkeitsmuster bestehen aus Entwurfsmustern, die sich auf die Überwachung, Protokollierung und Überwachung konzentrieren, z. B. Protokollaggregation, verteilte Ablaufverfolgung, Integritätsprüfung usw.
- Übergreifende Betreffmuster helfen bei der Verwaltung von Funktionen auf Anwendungsebene, wie z. B. Sicherheit, Fehlertoleranz, Service-to-Service-Kommunikation und Konfigurationsmanagement, an einem zentralen Ort. Beispiele hierfür sind Circuit Breaker, Service Discovery usw.
(Weitere Informationen zu verschiedenen Microservice-Entwurfsmustern finden Sie hier.)
2. Auswahl des richtigen Mikrosegmentierungsansatzes
Derzeit gibt es mehrere Anbieter von Mikrosegmentierung mit unterschiedlichen Lösungsansätzen auf dem Markt. Im Großen und Ganzen lassen sich Mikrosegmentierungstechniken in zwei Kategorien einteilen:
- Technologieunabhängige Mikrosegmentierungslösungen basieren entweder auf Agenten oder Firewalls der nächsten Generation.
- Technologieabhängige Mikrosegmentierungslösungen basieren auf dem Hypervisor oder Network Fabrics.
Microservices verwenden einen unterschiedlichen Technologie-Stack, und die schnellere Bereitstellung erfordert die Fähigkeit, schnell zu skalieren. Daher wäre eine technologieunabhängige Mikrosegmentierungslösung – aber eine, die speziell auf ein Container-Ökosystem zugeschnitten ist, das in der Lage ist, Cluster, Pods, Container und Services zu segmentieren – eine optimale Wahl.
3. Sichtbarkeit des Netzwerks
Die Möglichkeit, segmentierte Anwendungen und Verkehrsflüsse zu visualisieren, ist ein integraler Bestandteil von Mikrosegmentierungslösungen. Visibility bietet dem Administrator, den Sicherheitsarchitekten und dem Chief Security Officer (CSO) einen Überblick über das gesamte Netzwerk aus einer Hand.
4. Einfach zu bedienende, zentralisierte Steuerung
Das Entwerfen einer Richtlinie für jede Anwendung kann anfangs eine entmutigende Aufgabe sein. Dazu sind eine Reihe von Gesprächen mit den IT-, Netzwerk- und Sicherheitsarchitekten erforderlich. Eine zentralisierte Kontrolle zur Erleichterung der Richtlinienerstellung und -durchsetzung trägt dazu bei, den Prozess zu beschleunigen. Die Nutzung der Segmentierungsvorlagen, die gemäß dem Microservice-Entwurfsmuster angepasst werden, kann ebenfalls hilfreich sein.
5. Leistung sollte nicht der Engpass sein
Die Anwendung von Mikrosegmentierungsrichtlinien erfordert die Analyse des Datenverkehrs und die effektive Bereitstellung von Richtlinien in Echtzeit. Der Angreifer kann Leistungsverzögerungen ausnutzen, um den Angriff weiter zu manifestieren. Daher ist es extrem wichtig, die Performance zu testen, insbesondere bei latenzempfindlichen Microservices.
Conclusion

In diesem Blogbeitrag habe ich einige der Sicherheitsbedenken erörtert, die sich aus Container- und Kubernetes-basierten Bereitstellungsmechanismen ergeben, die von Microservices verwendet werden. Das Wort "Resilienz" wird immer dann verwendet, wenn wir die Microservices in der Produktion während des gesamten CI/CD-Lebenszyklus kontinuierlich und schneller bereitstellen, ohne viel Rücksicht auf die Einschränkung des Zugriffs auf kritische Ressourcen zu nehmen. Die Mikrosegmentierung bietet einen starken Zugriffskontrollmechanismus, der die Auswirkungen von Sicherheitsverletzungen minimiert. Es fördert auch die Ausfallsicherheit in den Unternehmensanwendungen durch die Implementierung sicherer Mikrozonen.
Mikrosegmentierung, wenn sie richtig geplant und durchgeführt wird, schafft sicherlich eine robuste Barriere gegen laterale Bewegungen in der Welt der Microservices. Es ist schwierig, Microservices schnell zu sichern, aber es ist wichtig, innezuhalten und über die Implementierung von Sicherheit und Ausfallsicherheit in großem Maßstab nachzudenken und diese proaktiv mit allen Beteiligten zu planen.