13 Best Practices zum Sichern von Microservices

Die Microservices-Architektur bietet Flexibilität, Skalierbarkeit und die Möglichkeit, Softwarekomponenten zu ändern, hinzuzufügen oder zu entfernen, ohne andere Teile der Anwendung zu beeinträchtigen.

Neben kürzeren Softwareentwicklungszyklen, kleineren Teams und flexiblen Programmiersprachenoptionen ermöglicht es Ihnen, bestimmte Funktionen oder Dienste zu skalieren oder Fehler zu beheben, ohne die anderen Komponenten zu beeinträchtigen.

Im Allgemeinen ermöglichen die Microservices das Aufteilen großer monogamer Anwendungen in unabhängig einsetzbare unterschiedliche Dienste. Diese kleineren unabhängigen Dienste erhöhen jedoch die Anzahl der Komponenten und damit die Komplexität und Schwierigkeit, sie zu sichern.

Monolithische vs. Microservices-Architektur Image Roter Hut

Normalerweise umfasst eine typische Microservices-Bereitstellung die Ebenen Hardware, Service oder Anwendung, Kommunikation, Cloud, Virtualisierung und Orchestrierung. Jede davon hat spezifische Sicherheitsanforderungen, Kontrollen und Herausforderungen.

Sicherheitsherausforderungen im Zusammenhang mit Microservices

Microservices sind in der Regel weit verteilte Systeme mit komplexen Zugriffsregeln, mehr zu überwachendem Datenverkehr und einer größeren Angriffsfläche. Darüber hinaus werden die meisten Microservices-Clouds in Cloud-Umgebungen ausgeführt, die auch unterschiedliche Sicherheitskonfigurationen und -kontrollen haben.

Aufgrund der großen Anzahl offengelegter APIs, Ports und Komponenten bieten herkömmliche Firewalls möglicherweise keine ausreichende Sicherheit. Diese Probleme machen die Bereitstellung von Microservices anfälliger für verschiedene Cyber-Bedrohungen wie Man-in-the-Middle, Injection-Angriffe, Cross-Site-Scripting, DDoS und andere.

Die Netzwerksicherheit ist eine weitere Herausforderung bei Microservices. Insbesondere die Identitäts- und Zugriffskontrolle erreichen eine neue Komplexitätsstufe. Weitere Schwachstellen sind unsicherer Code und Fehler in den Diensterkennungssystemen.

Obwohl das Sichern von Microservices schwieriger ist als monolithische Anwendungen, können Sie sie effektiv schützen, indem Sie eine gute Strategie entwickeln und die Best Practices befolgen.

Idealerweise erfordert die Architektur einen verteilten Ansatz, der alle verschiedenen Komponenten abdecken sollte.

Typische Bereiche, die angesprochen werden müssen, umfassen

  • Schutz von Anwendungen, Microservices und Benutzern
  • Sicheres Identitäts- und Zugriffsmanagement
  • Daten schützen
  • Verbessern Sie die Sicherheit der Service-to-Service-Kommunikation
  • Überwachung der Microservices und Sicherheitssysteme

Best Practices zum Sichern von Microservices

Eine der besten Strategien besteht darin, eine Kombination aus Best Practices, Tools und Kontrollen zu verwenden, um das gesamte Ökosystem zu schützen. Der tatsächliche Ansatz kann sich je nach Art der Dienste, Anwendungen, Benutzer, Umgebungs- und anderen Faktoren unterscheiden.

Wenn Sie sich für den Einsatz von Microservices entscheiden, müssen Sie sicherstellen, dass Sie alle Sicherheitsanforderungen für die Dienste, Verbindungen und Daten erfüllen.

Lassen Sie uns nun einen Blick auf einige effektive Sicherheitspraktiken für Microservices werfen.

#1. Bauen Sie Sicherheit von Anfang an 👮

Machen Sie Sicherheit zu einem Teil des Entwicklungszyklus. Integrieren Sie Sicherheit idealerweise von Anfang an in die Entwicklung und Bereitstellung von Microservices. Die Sicherheit auf diese Weise anzugehen, ist ein einfacher, effektiver und billigerer Ansatz, als darauf zu warten, sie hinzuzufügen, wenn die Softwareentwicklung kurz vor dem Abschluss steht.

#2. Verwenden Sie den Defense-in-Depth-Mechanismus

Defense in Depth (DiP) ist eine Technik, bei der Sie mehrere Sicherheitsebenen auf Ihre Dienste und Daten anwenden. Diese Praxis erschwert es Angreifern, durch die mehreren Schichten zu dringen, und bietet so eine starke Sicherheit für Ihre Dienste und Daten.

Im Gegensatz zu Perimeter-Sicherheitslösungen wie Firewalls ist das Defense-in-Depth-Konzept anders. Es stützt sich auf eine Kombination von Tools wie Antivirus, Firewall, Patch-Management, Anti-Spam-Software und andere, um mehrere Sicherheitsebenen bereitzustellen, die über das gesamte System verteilt sind.

  So erstellen und verwenden Sie Microsoft Teams-Tags

Mehrschichtige Defense-in-Depth-Sicherheit Bild: Imperva

Bei diesem Ansatz müssen Sie zunächst die sensiblen Dienste identifizieren und anschließend die entsprechenden Sicherheitsebenen um sie herum anwenden.

#3. Stellen Sie Sicherheit auf Containerebene 📦 bereit

Meistens verlassen sich Microservices auf Container-Technologie. Daher ist die Sicherung der Container, sowohl intern als auch extern, eine Möglichkeit, die Angriffsfläche und die Risiken zu reduzieren. Im Idealfall ist das Streben nach dem Sicherheitsprinzip der geringsten Rechte eine gute Praxis und erfordert eine Kombination von Strategien, einschließlich, aber nicht beschränkt auf:

  • Beschränkung der Erlaubnis auf das erforderliche Minimum
  • Vermeiden Sie das Ausführen von Diensten und allem anderen, das die sudo- oder privilegierten Konten verwendet.
  • Beschränken oder kontrollieren Sie den Zugriff und Verbrauch verfügbarer Ressourcen. Beispielsweise hilft die Beschränkung des Zugriffs auf die Betriebssystemressourcen durch die Container, Datendiebstahl oder Kompromittierung zu verhindern.
  • Speichern Sie keine Geheimnisse auf dem Containerdatenträger.
  • Verwenden Sie geeignete Regeln, um den Zugriff auf die Ressourcen zu isolieren.

Es ist auch wichtig sicherzustellen, dass Container-Images keine Schwachstellen oder Sicherheitsprobleme aufweisen. Ein regelmäßiges Sicherheits- und Schwachstellenscannen der Container hilft, Risiken zu identifizieren.

Zu den typischen Bildscan-Tools gehören Klar, Ankerund mehr.

#4. Stellen Sie eine Multi-Faktor-Authentifizierung bereit 🔒

Die Aktivierung der Multi-Faktor-Authentifizierung erhöht die Sicherheit des Front-Ends.

Benutzer, die darauf zugreifen, müssen ihren Benutzernamen und ihr Passwort sowie eine andere Form der Verifizierung angeben, z. B. einen Code, der an ihre Telefone oder eine bestimmte E-Mail-Adresse gesendet wird. Die Technik erschwert es Angreifern, die möglicherweise gestohlene oder gehackte Anmeldeinformationen verwenden, auf die Microservices zuzugreifen, da sie keine Möglichkeit haben, die zweite Authentifizierung bereitzustellen.

#5. Verwenden Sie Benutzeridentitäts- und Zugriffstoken

Bei der Bereitstellung von Microservices erfordert eine große Anzahl von Anwendungen und Diensten eine sichere Autorisierung und Zugriffskontrolle. Ein Autorisierungsframework wie OAuth 2.0 und OpenID ermöglicht es Ihnen, die Token sicher zu verarbeiten und somit Ihre Microservices zu schützen. Folglich können Anwendungen von Drittanbietern auf andere Dienste oder Daten von Benutzern zugreifen.

In einer typischen Bereitstellung fordert die Hauptanwendung den Benutzer auf, den Drittanbieterdienst zu autorisieren. Wenn Sie dies akzeptieren, generiert die Anwendung ein Zugriffstoken für die Sitzung.

Insbesondere OAuth ist eine der effektivsten Strategien für Benutzeridentität und Zugriffskontrolle. Obwohl es mehrere andere Autorisierungsprotokolle gibt und Sie auch Ihre eigenen erstellen können, empfiehlt es sich, die zu verwenden OAuth seit ist standardisierter, stabiler und weithin akzeptiert.

#6. Erstellen Sie ein API-Gateway

Im Allgemeinen bestehen die Microservices aus mehreren Komponenten, die über verschiedene Netzwerke verteilt und von einer Vielzahl von Systemen und Clients aus zugänglich sind. Das Offenlegen der Microservices erhöht Schwachstellen und Sicherheitsrisiken. Eine Möglichkeit, sie zu schützen, besteht darin, einen einzigen und sicheren Zugangspunkt zu schaffen, der Ihnen hilft, den gesamten Zugriff von externen Systemen und Clients zu zentralisieren.

Um dies zu erreichen, stellen Sie ein API-Gateway bereit, um alle eingehenden Anfragen auf Sicherheitsprobleme zu überprüfen, bevor Sie sie an die entsprechenden Microservices weiterleiten. Das API-Gateway befindet sich zwischen den Clientanwendungen und den Microservices. Es schränkt dann die Offenlegung der Microservices ein und bietet zusätzliche Funktionen zur Anforderungsverwaltung wie Authentifizierung, SSL-Terminierung, Protokollübersetzung, Überwachung, Anforderungsweiterleitung, Caching und mehr.

  So veranstalten Sie eine virtuelle Gruppen-Listening-Party in Spotify

Bei diesem Ansatz leitet das API-Gateway alle externen Dienste an die Microservices weiter und unterstützt gleichzeitig das Defense-in-Depth-Sicherheitsprinzip.

Bild des Microservices-API-Gateways Livebuch

Typische API-Gateways umfassen NGINX, Kong, Typ, Botschafter, AWS-API-Gatewayund mehr.

Um mehr über API-Sicherheit zu erfahren, lesen Sie unseren Leitfaden Warum und wie man API-Endpunkte sichert.

#7. Profil-APIs basierend auf der Bereitstellungszone

Implementieren Sie rollenbasierte Einschränkungen, indem Sie sicherstellen, dass die Benutzer nur Zugriff auf die APIs und Dienste haben, die sie benötigen. Da die meiste bösartige Software einen Dienst oft mehr Personen zugänglich macht, verringert die Beschränkung des Zugriffs auf nur autorisierte Benutzer die Risiken. Eine Technik zur Verringerung der Gefährdung besteht darin, die APIs basierend auf den Benutzern zu kennzeichnen, die Zugriff darauf haben sollten. Im Allgemeinen können die APIs sein;

  • Ethernet-APIs – Für Dienste, die der Außenwelt außerhalb des Rechenzentrums ausgesetzt sind.
  • Unternehmenszonen-APIs – diese sind für den internen privaten Datenverkehr gedacht
  • DMZ-APIs – um den Datenverkehr zu verarbeiten, der aus dem Internet stammt
  • Hybridzonen-APIs – für Bereitstellungen in Rechenzentren

#8. Sichern Sie die Service-to-Service-Kommunikation

Effektive Praktiken umfassen das Authentifizieren und Autorisieren von Anforderungen, wenn zwei Microservices kommunizieren.

Im Allgemeinen gibt es drei Haupttechniken, die Sie verwenden können, um die Kommunikation zwischen Diensten zu sichern. Dies sind Trust the network, JSON Web Token (JWT) und Mutual Transport Layer Security (mTLS oder Mutual TLS).

Sichern der Kommunikation zwischen Diensten mit JWT Image Livebuch

Von den dreien ist mTLS das beliebteste. Bei diesem Ansatz muss jeder Microservice ein öffentliches/privates Schlüsselpaar enthalten. Der Client-Microservice verwendet dann das Schlüsselpaar, um sich über mTLS beim empfangenden Microservice zu authentifizieren.

Während der Authentifizierung generiert jeder Microservice ein Zertifikat. Anschließend verwendet jeder Microservice das Zertifikat des anderen, um sich zu authentifizieren.

Während TLS Integrität und Vertraulichkeit für die übertragenen Daten bietet, ermöglicht es dem Client auch, einen Microservice zu identifizieren. Der Client-Microservice kennt normalerweise den anderen Microservice. Da TLS jedoch unidirektional ist, kann ein empfangender Microservice den Client-Microservice nicht verifizieren – und Angreifer können diesen Fehler ausnutzen. Andererseits stellt mTLS ein Mittel bereit, mit dem jeder der Microservices den anderen identifizieren kann.

#9. Ratenlimit 🚏 Client-Traffic

Die Begrenzung des externen Datenverkehrs verhindert Probleme wie Denial-of-Service-Angriffe (DoS) sowie Fälle, in denen einige Clients den größten Teil der Anwendungsbandbreite verbrauchen. Ein Ansatz besteht darin, verschiedene Regeln anzuwenden, die die von einem Client gesendete oder empfangene Datenverkehrsrate basierend auf IP, Zeit usw. überwachen und steuern können.

Konfigurieren Sie Ihre Dienste so, dass sie langsamer werden, wenn sie mehrere fehlgeschlagene Anmeldeversuche bei Ihren APIs oder andere verdächtige Aktivitäten erkennen.

Ein langsames System würde die Angreifer abschrecken und ihren Versuch, auf die Dienste zuzugreifen, wahrscheinlich aufgeben. Sie können das Ratenlimit über das API-Gateway, über den Code oder eine andere Technik festlegen. Normalerweise verfügen die meisten SaaS-Umgebungen über eine API-Ratenbegrenzung, um den Missbrauch durch Benutzer sowie Angriffe zu minimieren.

  So geben Sie Speicherplatz auf Ihrem iPhone frei, ohne Apps oder Fotos zu löschen

#10. Verwenden Sie Orchestrierungsmanager

Mit den Orchestrierungsmanagern können Sie die Konfiguration, Koordination und andere Microservices-Verwaltungsaufgaben zusätzlich zur Verbesserung der Sicherheit automatisieren. Normalerweise ermöglichen Ihnen die Tools, mehrere Container zu verwalten, den Zugriff auf Metadaten zu beschränken, Workloads zu trennen, Protokolle zu sammeln und vieles mehr.

Einige Orchestrierungstools verfügen über zusätzliche Funktionen, die es den Entwicklern ermöglichen, vertrauliche Informationen wie SSL-Zertifikate, Verschlüsselungsschlüssel, Kennwörter und Identitätstoken zu speichern und freizugeben.

Die beiden häufig verwendeten Methoden für eine effektive Microservice-Orchestrierung sind:

  • Kodierung der Orchestrierung als Microservice
  • Verwenden der API-Gateways zum Bereitstellen einer Orchestrierungsebene

Die Orchestrierung über das API-Gateway wird aufgrund von Herausforderungen nicht empfohlen, wenn Dienste skaliert werden müssen.

Microservice-Orchestrierungsebene – Image Globallogik

Zu den typischen Orchestrierungs-Management-Tools gehören Kubernetes, Istio, Azure Kubernetes-Dienst (AKS)etc.

Um mehr zu erfahren, erkunden Sie die Container-Orchestrierung für DeOps.

#11. Überwachen Sie alle Ihre Systeme und Dienste

Da Microservices auf verteilte Systeme angewiesen sind, benötigen Sie eine zuverlässige und effektive Überwachungsstrategie für alle einzelnen Komponenten.

Durch den Einsatz einer kontinuierlichen Überwachung können Sie Sicherheitsrisiken rechtzeitig erkennen und angehen. Zu diesem Zweck gibt es eine breite Palette von Microservices-Überwachungslösungen, darunter Prometheus, Statistik, InfluxDB, Logstashetc.

Überwachung innerhalb der Microservices-Architektur

Verwenden Sie die geeigneten Tools, um interne Systeme und Dienste zu überwachen. Einige Best Practices sind:

  • Aktivieren Sie die Protokollierung auf Anwendungsebene. Du kannst Splunk, Graphana, ELK-Stapelund andere Tools, die Protokolle auf Anwendungs-, Container-, Netzwerk- und Infrastrukturebene sammeln.
  • Überwachen Sie die Nutzungsmetriken
  • Verwenden Sie die Trends in Metriken wie CPU, Arbeitsspeicher, Antwortzeiten, Fehler, Benachrichtigungen und andere, um ungewöhnliche Aktivitäten zu erkennen, die auf einen bestehenden oder potenziellen Angriff hinweisen.
  • Prüfen Sie die Protokolle in Bereichen wie eingehende Clientanfragen, Datenbankeinträge, Container und andere, um Inkonsistenzen oder ungewöhnliche Aktivitäten zu identifizieren.

#12. Sicherheitsaktivitäten automatisieren

Automatisieren Sie Sicherheitsprozesse wie die Bereitstellung von Updates, Schwachstellen-Scans, Überwachung, Durchsetzung von Richtlinien und andere Aktivitäten. Überprüfen Sie außerdem die Updates, um sicherzustellen, dass sie sicher sind und keine neuen Schwachstellen einführen.

Nach Updates sollte die Sicherheitssoftware idealerweise Tests an allen Containern und Microservices durchführen, um festzustellen, ob es möglicherweise bereits zuvor Schwachstellen oder Sicherheitsprobleme gegeben hat.

#13. 🛡️Daten jederzeit schützen

Schützen Sie Daten während der Übertragung und im Ruhezustand. Erzwingen Sie im Idealfall die Verwendung von HTTPS für die gesamte Kommunikation, um die Daten während der Übertragung zu sichern, und die Verschlüsselung aller sensiblen Daten im Ruhezustand. Vermeiden Sie das Übertragen und Speichern von Klartext-Passwörtern, Schlüsseln, Anmeldeinformationen und sensiblen Daten, die sich außerhalb des Codes befinden.

Die beste Strategie ist es, alle sensiblen Daten so früh wie möglich mit Standardtechnologien zu verschlüsseln. Entschlüsseln Sie die Daten auch so spät wie möglich, um die Gefährdung zu verringern.

Fazit

Microservices verlassen sich auf verteilte Komponenten, um Vorteile wie mehr Flexibilität und Bereitstellungsoptionen zu bieten. Bei der Nutzung der Microservices müssen Unternehmen jedoch interne Sicherheitsrichtlinien und -strategien an einen Cloud-nativeren und verteilteren Ansatz anpassen.

Versuchen Sie im Idealfall, die Angriffsfläche zu reduzieren und die Microservices-Umgebung, APIs, Anwendungen und Daten zu schützen.