Hinweis perev. : Dies ist nicht der erste Artikel mit allgemeinen Sicherheitsempfehlungen zu Kubernetes, den wir in unserem Blog übersetzen. Ihre Relevanz - zumindest als Erinnerung an einfache und wichtige Dinge, die aus Zeitgründen nicht ignoriert werden sollten - wird jedoch nur durch die jüngsten Ereignisse bestätigt, die der Autor zu Beginn des Materials erwähnt hat. Der Autor ist übrigens Connor Gilbert, Produktmanager bei StackRox, einer vorgefertigten Plattform zur Sicherung von Anwendungen, die in Kubernetes-Clustern bereitgestellt werden. Also, hier ist, was er den CNCF-Blog-Lesern rät ...
NB : Um den Artikel informativer zu gestalten, haben wir für einige der vom Autor erwähnten Begriffe / Methoden Links zu der entsprechenden Dokumentation hinzugefügt.
Im vergangenen Monat entdeckte Kubernetes, das weltweit beliebteste Container-Orchestrierungssystem,
die erste große Sicherheitslücke, die das Ökosystem des Projekts betraf. Sicherheitsanfälligkeit
CVE-2018-1002105 ermöglicht es Angreifern, Cluster über den Kubernetes-API-Server zu kompromittieren, wodurch bösartiger Code ausgeführt werden kann, um Malware usw. zu installieren.
Anfang des Jahres führte die falsche Konfiguration des Kubernetes-Kontrollfelds zur
Installation von Cryptocurrency-Mining-Software auf Tesla-Ressourcen. Dann nutzten die Angreifer die Tatsache, dass eines der Kubernetes-Panels nicht kennwortgeschützt war, sodass sie mit einem Konto auf einen der Pods zugreifen konnten, um auf die größere Tesla-Infrastruktur in AWS zuzugreifen.
Unternehmen, die die Implementierung von Containern und deren Orchestrierung beschleunigen, müssen außerdem verbindliche Maßnahmen ergreifen, um einen so kritischen Teil ihrer Infrastruktur zu schützen. Im Folgenden finden Sie neun der besten Sicherheitspraktiken von Kubernetes, die auf Kundendaten basieren: Befolgen Sie diese, um Ihre Infrastruktur besser zu schützen.
1. Aktualisieren Sie auf die neueste Version
In jeder vierteljährlichen Version von [Kubernetes] gibt es nicht nur Fehlerkorrekturen, sondern auch neue Sicherheitsfunktionen: Um diese nutzen zu können, empfehlen wir, mit der neuesten stabilen Version zu arbeiten.
Die Verwendung der neuesten Version mit den neuesten Patches wird vor dem Hintergrund der jüngsten Entdeckung von CVE-2018-1002105 besonders relevant sein. Updates und Support sind möglicherweise schwieriger als die neuen Funktionen, die in Releases angeboten werden. Planen Sie Ihre Updates daher mindestens einmal im Quartal.
Deutlich vereinfachte Updates können die Anbieter von verwalteten Kubernetes-Lösungen nutzen.
2. Aktivieren Sie die rollenbasierte Zugriffssteuerung (RBAC).
Verwenden Sie
RBAC (Role-Based Access Control), um zu steuern, wer auf die Kubernetes-API zugreifen kann und welche Rechte sie haben. Normalerweise ist RBAC in Kubernetes Version 1.6 und höher (oder höher für einige Anbieter) standardmäßig aktiviert. Wenn Sie jedoch seitdem aktualisiert wurden und die Konfiguration nicht geändert haben, sollten Sie Ihre Einstellungen überprüfen. Aufgrund des Mechanismus, mit dem die Arbeit von Berechtigungscontrollern in Kubernetes kombiniert wird
(für die allgemeine Abfolge der Vorgänge lesen Sie den Artikel „ Was passiert in Kubernetes, wenn der Kubectl-Lauf startet? Teil 1 “ - ca. übersetzt )) , müssen sowohl RBAC als auch Legacy-ABAC aktiviert sein (Attributbasierte Zugriffssteuerung).
Die Aktivierung von RBAC reicht jedoch nicht aus - es muss noch effektiv genutzt werden. Im allgemeinen Fall sollten Rechte für den gesamten Cluster
(clusterweit) vermieden werden, wobei Rechte in bestimmten Namespaces bevorzugt werden. Vermeiden Sie es, jemandem Cluster-Administratorrechte auch für das Debuggen zu erteilen. Es ist viel sicherer, Rechte nur bei Bedarf und von Zeit zu Zeit zu erteilen.
Sie können
kubectl get clusterrolebinding
und einfach Rollen mit den
kubectl get clusterrolebinding
oder
kubectl get rolebinding --all-namespaces
. So können Sie schnell überprüfen, wem die
cluster-admin
(in diesem Beispiel nur für die
masters
Gruppe):
$ kubectl describe clusterrolebinding cluster-admin Name: cluster-admin Labels: kubernetes.io/boostrapping=rbac-defaults Annotations: rbac.authorization.kubernetes.io/autoupdate=true Role: Kind: ClusterRole Name: cluster-admin Subjects: Kind Name ---- ---- Group system:masters Namespace ---------
Wenn für die Anwendung Zugriff auf die Kubernetes-API erforderlich ist, erstellen Sie separate Dienstkonten
(lesen Sie mehr dazu in diesem Material - ca. Übersetzung ) und geben Sie ihnen die für jeden Anwendungsfall erforderlichen Mindestrechte. Dieser Ansatz ist viel besser, als dem Standardkonto im Namespace zu viele Berechtigungen zu erteilen.
Die meisten Anwendungen benötigen überhaupt keinen Zugriff auf die API:
Sie können automountServiceAccountToken
für sie auf
false
.
3. Verwenden Sie Namespaces, um Sicherheitsgrenzen festzulegen
Das Erstellen separater Namespaces ist wichtig für die erste Ebene der Komponentenisolation. Es ist viel einfacher, Sicherheitseinstellungen anzupassen, z. B. Netzwerkrichtlinien, wenn verschiedene Arten von Workloads in separaten Namespaces bereitgestellt werden.
Verwendet Ihr Team Namespaces effizient? Überprüfen Sie die Liste auf Nicht-Standard (nicht standardmäßig erstellt):
$ kubectl get ns NAME STATUS AGE default Active 16m kube-public Active 16m kube-system Active 16m
4. Trennen Sie sensible Workloads.
Eine bewährte Methode zur Begrenzung der potenziellen Folgen von Kompromissen besteht darin, Workloads mit vertraulichen Daten auf einem dedizierten Satz von Maschinen auszuführen. Dieser Ansatz verringert das Risiko, dass eine weniger sichere Anwendung mit vertraulichen Daten, die in derselben ausführbaren Containerumgebung oder auf demselben Host ausgeführt werden, auf die Anwendung zugreift. Beispielsweise hat ein Kubelet eines gefährdeten Knotens normalerweise nur dann Zugriff auf den Inhalt von Geheimnissen, wenn diese auf Pods montiert sind, deren Ausführung auf demselben Knoten geplant ist. Wenn wichtige Geheimnisse auf mehreren Clusterknoten gefunden werden können, hat ein Angreifer mehr Möglichkeiten, sie zu erhalten.
Die Trennung kann mithilfe von
Knotenpools -
Knotenpools (in der Cloud oder für lokale Anwendungen) - sowie von Kubernetes-Steuerungsmechanismen wie Namespaces,
Taints, Toleranzen und anderen erfolgen.
5. Schützen Sie den Zugriff auf Cloud-Service-Metadaten
Vertrauliche Metadaten - beispielsweise Kubelet-Anmeldeinformationen - können gestohlen oder böswillig verwendet werden, um Berechtigungen in einem Cluster zu eskalieren. Ein
kürzlich gefundener Fund in Shopify's Bug Bounty zeigte beispielsweise detailliert, wie ein Benutzer die Autorität überschreiten kann, indem er Metadaten von einem Cloud-Anbieter unter Verwendung speziell generierter Daten für einen der Microservices empfängt.
In GKE ändert die Funktion zum
Verbergen von Metadaten , das
Verbergen von Metadaten , den Mechanismus zum Bereitstellen des Clusters so, dass ein solches Problem vermieden wird. Wir empfehlen, ihn zu verwenden, bis eine dauerhafte Lösung implementiert ist.
Ähnliche Gegenmaßnahmen können in anderen Umgebungen erforderlich sein.
6. Erstellen und definieren Sie Cluster-Netzwerkrichtlinien
Netzwerkrichtlinien -
Netzwerkrichtlinien - Mit dieser Option können Sie den Netzwerkzugriff auf und von containerisierten Anwendungen steuern. Um sie verwenden zu können, benötigen Sie einen Netzwerkanbieter mit Unterstützung für eine solche Ressource. Für verwaltete Kubernetes-Lösungsanbieter wie Google Kubernetes Engine (GKE) muss der Support aktiviert werden. (Das Aktivieren von Netzwerkrichtlinien für vorhandene Cluster in GKE erfordert ein kurzes fortlaufendes Update.)
Sobald alles fertig ist, beginnen Sie mit einfachen Standardnetzwerkrichtlinien, z. B. Blockieren (standardmäßig) des Datenverkehrs von anderen Namespaces.
Wenn Sie die Google Container Engine verwenden, können Sie überprüfen, ob die Richtlinienunterstützung für Arbeitscluster aktiviert ist:
$ gcloud container clusters list \ --format='table[box] (name,addonsConfig.networkPolicyConfig)'

7. Legen Sie die Pod-Sicherheitsrichtlinie für den Cluster fest.
Pod-Sicherheitsrichtlinie -
Pod-Sicherheitsrichtlinie - legt die Standardwerte fest, die zum Starten von Workloads im Cluster verwendet werden. Erwägen Sie, eine Richtlinie zu definieren und den
Zulassungscontroller für Pod-Sicherheitsrichtlinien zu aktivieren: Die Anweisungen für diese Schritte variieren je nach verwendetem Cloud-Anbieter oder Bereitstellungsmodell.
Für den Anfang
NET_RAW
Sie möglicherweise
NET_RAW
Funktion in Containern
NET_RAW
, um sich vor bestimmten Arten von Spoofing-Angriffen zu schützen.
8. Arbeiten Sie an der Knotensicherheit
Führen Sie die folgenden Schritte aus, um die Hostsicherheit zu verbessern:
- Stellen Sie sicher, dass der Host sicher und korrekt konfiguriert ist . Eine Möglichkeit sind CIS-Benchmarks . Viele Produkte verfügen über einen Autochecker, der das System automatisch auf Einhaltung dieser Standards überprüft.
- Überwachen Sie die Netzwerkverfügbarkeit wichtiger Ports . Stellen Sie sicher, dass das Netzwerk den Zugriff auf die von kubelet verwendeten Ports blockiert, einschließlich 10250 und 10255. Sie sollten den Zugriff auf den Kubernetes-API-Server einschränken - mit Ausnahme vertrauenswürdiger Netzwerke. In Clustern, für die keine Authentifizierung und Autorisierung in der Kubelet-API erforderlich war, verwendeten Angreifer den Zugriff auf solche Ports, um Cryptocurrency Miner zu starten.
- Minimieren Sie den Administratorzugriff auf Kubernetes-Hosts . Der Zugriff auf Clusterknoten sollte grundsätzlich eingeschränkt sein: Zum Debuggen und Lösen anderer Probleme können Sie in der Regel auf den direkten Zugriff auf den Knoten verzichten.
9. Aktivieren Sie die Überwachungsprotokollierung
Stellen Sie sicher, dass Überwachungsprotokolle aktiviert sind und dass Sie das Auftreten ungewöhnlicher oder unerwünschter API-Aufrufe überwachen, insbesondere im Zusammenhang mit Autorisierungsfehlern. Diese Einträge haben eine Meldung mit dem Status "Verboten". Autorisierungsfehler können bedeuten, dass ein Angreifer versucht, die erhaltenen Anmeldeinformationen zu nutzen.
Anbieter verwalteter Lösungen (einschließlich GKE) bieten über ihre Schnittstellen Zugriff auf diese Daten und können Sie beim Einrichten von Benachrichtigungen bei Autorisierungsfehlern unterstützen.
Mit Blick auf die Zukunft
Befolgen Sie diese Richtlinien für einen sichereren Kubernetes-Cluster. Denken Sie daran, dass Sie auch nach der sicheren Konfiguration des Clusters die Sicherheit in anderen Aspekten der Konfiguration und des Betriebs von Containern gewährleisten müssen. Um die Sicherheit des Technologie-Stacks zu verbessern, sollten Sie die Tools untersuchen, die ein zentrales System für die Verwaltung bereitgestellter Container, die ständige Überwachung und den Schutz von Containern und Cloud-nativen Anwendungen bieten.
PS vom Übersetzer
Lesen Sie auch in unserem Blog: