Mehrere Snyk-Kubernetes-Controller in einem einzelnen Kubernetes-Cluster installieren
Pas Apicella
15. August 2022
0 Min. LesezeitKubernetes bietet eine Schnittstelle, über die verteilte Systeme reibungslos ausgeführt werden können. Die Plattform kümmert sich um Skalierung und Failover Ihrer Anwendungen, stellt Deployment-Muster bereit und vieles mehr. Bei der Sicherheit müssen die Teams, die Workloads im Kubernetes-Cluster bereitstellen, entscheiden, welche Workloads sie gemäß ihren Anforderungen an die Anwendungssicherheit überwachen möchten.
Was aber, wenn jedes Team selbst festlegen könnte, welche Container-Images und welche konkreten Workloads gescannt werden? Möglicherweise stellen mehrere Teams Workloads in Kubernetes bereit, und jedes hat eigene Anforderungen an die Überwachung. Dieser Anwendungsfall lässt sich am besten lösen, indem jedes Team eine eigene Snyk-Kubernetes-Integration einrichtet und die benötigten Workloads überwacht. Sehen wir uns an, wie das funktioniert.
Überblick über die Snyk-Kubernetes-Integration
Snyk lässt sich in Kubernetes integrieren. So können Sie Ihre laufenden Workloads importieren und kontinuierlich testen, um Schwachstellen in den zugrunde liegenden Images sowie Konfigurationen zu erkennen, die die Sicherheit der Workloads beeinträchtigen könnten. Auch nach dem Deployment überwacht Snyk die Workloads weiterhin und erkennt, wenn sie durch neu entdeckte Schwachstellen oder weitere Sicherheitsprobleme gefährdet sind, etwa wenn neue Container bereitgestellt werden oder sich die Workload-Konfiguration ändert.

Architekturdiagramm der Kubernetes-Integration
Mehrere Snyk-Controller in einem einzelnen Kubernetes-Cluster installieren
Jetzt wird es spannend! Wir führen Sie Schritt für Schritt durch die Einrichtung mehrerer Snyk-Controller in einem einzelnen Kubernetes-Cluster. Dabei gehen wir folgendermaßen vor:
Separate Namespaces konfigurieren
Für jeden Namespace eine Snyk-Organisation erstellen
snyk monitorfür den ersten Namespace (Äpfel) installieren und konfigurierensnyk monitorfür den zweiten Namespace (Bananen) installieren und konfigurierenÜberprüfen, ob bereitgestellte Workloads automatisch über die Policy importiert werden
Workloads in „Bananen“ bereitstellen, die über eine Rego-Policy-Datei automatisch importiert werden
Voraussetzungen
Für die Kubernetes-Integration benötigen Sie ein Business- oder Enterprise-Konto bei Snyk. Falls Sie noch keines haben, können Sie eine kostenlose Testversion unseres Business-Plans starten. Auch wenn Sie die Schritte nicht selbst ausprobieren möchten, empfehle ich Ihnen, weiterzulesen (und die Codeblöcke zu überspringen), um zu erfahren, wie Sie mehrere Snyk-Controller in einem einzelnen Kubernetes-Cluster installieren und verwalten.
Ein Kubernetes-Cluster, z. B. AKS, EKS, GKE, Red Hat OpenShift oder eine andere unterstützte Variante.
Schritt 1: Separate Namespaces konfigurieren
In dieser Demo verwende ich einen Azure-AKS-Dienst für meinen Kubernetes-Cluster. In diesem Cluster installieren wir zwei Snyk-Controller, jeweils in einem eigenen Namespace: einen im Namespace apples und einen im Namespace bananas, wie im folgenden Diagramm dargestellt.

Erstellen Sie nun wie unten gezeigt die Namespaces:
Schritt 2: Für jeden Namespace eine Snyk-Organisation erstellen
Mit separaten Snyk-Organisationen können wir das Scannen der Workloads voneinander trennen. So können Feature-Teams eigene Organisationen verwenden und das Scannen ihrer Workloads und Images besser steuern. Sie können für alle Snyk-Controller, die wir bereitstellen, auch dieselbe Organisation verwenden. In diesem Beispiel halten wir sie jedoch getrennt. In beiden Fällen werden die Workloads mit einem Label angezeigt, das wir bei der Installation der Snyk-Controller festlegen.

Unsere neuen Organisationen
Eine für den Namespace apples:

Eine für den Namespace bananas:

Nach der Erstellung sollten in der Snyk-App zwei leere Organisationen angezeigt werden. Wir verwenden sie gleich.


Aktivieren Sie für jede Organisation die Kubernetes-Integration: Wählen Sie dazu den Tab Integrations und anschließend Kubernetes aus. Klicken Sie dann auf Connect. Folgen Sie abschließend der Snyk-Dokumentation zu Kubernetes, um die Einrichtung abzuschließen.
Notieren Sie sich die Integrations-IDs für die Kubernetes-Integration jeder Snyk-Organisation – Sie benötigen sie gleich. Die Kubernetes-Integrations-ID finden Sie über das Symbol Organisationseinstellungen in der oberen Navigationsleiste von Snyk. Navigieren Sie anschließend in der Seitenleiste zu Integrations und wählen Sie die Kubernetes-Integration aus, wie unten dargestellt.

Schritt 3: snyk monitor für den Namespace „Äpfel“ installieren und konfigurieren
Nachdem wir unsere Organisationen und Integrationen eingerichtet und mit unserem Cluster verbunden haben, können wir Snyk Monitor konfigurieren. Dazu verwenden wir ein Terminalfenster.
Wir erstellen eine Datei, um Workload-Ereignisse zu abonnieren, legen die Kriterien für unsere Abonnements fest, installieren das Helm-Chart von Snyk für die Kubernetes-Überwachung und richten den Monitor ein und starten ihn.
Die Registry-Datei erstellen
Erstellen Sie im Terminal ein Verzeichnis für die Organisation „Äpfel“ und wechseln Sie in dieses Verzeichnis:
Erstellen Sie eine Datei namens workload-events.rego mit folgendem Inhalt. Ersetzen Sie <APPLES_INTEGRATION_ID> durch die Integrations-ID der Kubernetes-Integration der Organisation „Äpfel“.
Mit der folgenden Rego-Policy weisen wir den Snyk-Controller an, Workloads ausschließlich aus dem Namespace apples zu importieren bzw. zu löschen, sofern der Kubernetes-Workload-Typ weder CronJob noch Service ist. Weitere Informationen zu den verschiedenen Workload-Typen finden Sie in der Snyk-Dokumentation.
workload-events.rego
Die Snyk-Helm-Charts zu Ihrem Repository hinzufügen
Greifen Sie auf Ihre Kubernetes-Umgebung zu und führen Sie den folgenden Befehl aus, um das Snyk-Charts-Repository zu Helm hinzuzufügen. Wir benötigen es gleich, wenn wir dieses Helm-Chart installieren.
Die Konfiguration für Snyk Monitor erstellen und das Helm-Chart bereitstellen
Mit einem Kubernetes-Secret können wir den Dienst ausführen, ohne Zugangsdaten im Klartext offenzulegen. In diesen Schritten erstellen und verwenden wir das Secret, während wir die Konfiguration für die Organisation „Äpfel“ bereitstellen.
Erstellen Sie das Secret snyk-monitor für den Namespace „Äpfel“ und ersetzen Sie <APPLES_INTEGRATION_ID> durch die Kubernetes-Integrations-ID der Snyk-App für „Äpfel“. In dieser Demo verwenden wir Docker Hub als öffentliche Container-Registry. Für den Zugriff auf öffentliche Images sind keine Zugangsdaten erforderlich. Weitere Informationen zur Verwendung privater Container-Registries finden Sie in der Snyk-Controller-Dokumentation.
Erstellen Sie nun eine ConfigMap, in der die Rego-Policy-Datei gespeichert wird, anhand derer snyk-monitor bestimmt, was im Namespace apples automatisch importiert oder gelöscht werden soll:
Installieren Sie als Nächstes snyk-monitor im Namespace apples. Ersetzen Sie im Befehl <APPLES_INTEGRATION_ID> durch die Snyk-App-Integrations-ID für „Äpfel“:
Hinweis: Anhand des Labels „AKS K8s - Apples“ finden Sie die importierten Workloads in der Snyk-Benutzeroberfläche, die Sie gleich sehen werden.
Überprüfen Sie abschließend, ob alles läuft. (Dieser Befehl setzt voraus, dass jq installiert ist. Falls nicht, lassen Sie den Teil | jq des Befehls weg.)
Nun ist im Namespace apples ein Snyk-Controller mit einem eigenen eindeutigen Namen installiert. Später zeigen wir, wie dieser Snyk-Controller Workloads automatisch importiert, wenn sie gemäß unserer Konfiguration im Namespace apples des Kubernetes-Clusters bereitgestellt werden. Wenn Sie jetzt die Projektseite der Organisation „Äpfel“ aktualisieren, sehen Sie möglicherweise, dass Snyk Monitor selbst gescannt wurde. Das liegt daran, dass wir den Controller angewiesen haben, Workloads vom Typ Deployment im Namespace apples zu scannen.

Schritt 4: snyk monitor für den Namespace „Bananen“ installieren und konfigurieren
Erstellen Sie ein Verzeichnis namens „bananas“ und wechseln Sie in dieses Verzeichnis:
Erstellen Sie nun eine Datei namens workload-events.rego mit folgendem Inhalt. Ersetzen Sie <BANANAS_INTEGRATION_ID> durch die Kubernetes-Integrations-ID der Snyk-App für „Bananen“:
Erstellen Sie als Nächstes das Secret snyk-monitor für den Namespace „Bananen“ und ersetzen Sie BANANAS_INTEGRATION_ID durch die Kubernetes-Integrations-ID der Snyk-App für „Bananen“:
Erstellen Sie anschließend eine ConfigMap, in der die Rego-Policy-Datei gespeichert wird, anhand derer snyk-monitor bestimmt, was im Namespace „Bananen“ automatisch importiert oder gelöscht werden soll:
Installieren Sie snyk-monitor im Namespace „Bananen“ und ersetzen Sie ¤BANANAS_INTEGRATION_ID> durch die Kubernetes-Integrations-ID der Snyk-App für „Bananen“:
Überprüfen Sie abschließend, ob alles läuft:
Schritt 5: Überprüfen, ob bereitgestellte Workloads automatisch über die Policy importiert werden
Als Nächstes stellen wir Workloads im Namespace apples bereit, um sicherzustellen, dass sie automatisch importiert werden. Wir beginnen mit einer Spring-Boot-Anwendung, die wir wie unten gezeigt in Kubernetes bereitstellen.
Erstellen Sie eine Datei namens springbootemployee-K8s.yaml mit folgendem Inhalt:
Stellen Sie sie anschließend bereit:
Überprüfen Sie nach einigen Minuten, ob der Workload gescannt und automatisch in die Snyk-Organisation „Äpfel“ in Snyk importiert wurde. Der Snyk-Controller im Namespace apples sollte dies entsprechend seiner Konfiguration erledigt haben.

Schritt 6: Workloads in „Bananen“ bereitstellen – automatischer Import über eine Rego-Policy-Datei
Erstellen Sie eine Datei namens snyk-boot-web-deployment.yaml mit folgendem Inhalt:
Stellen Sie sie wie folgt bereit:
Überprüfen Sie nach etwa drei Minuten, ob der Workload gescannt und automatisch in die Snyk-Organisation „Bananen“ in der Snyk-App importiert wurde. Der Snyk-Controller im Namespace „Bananen“ sollte dies entsprechend seiner Konfiguration erledigt haben.

Bonus: Protokolle der Snyk-Controller anzeigen
Kubernetes-Konfigurations- und YAML-Dateien können etwas knifflig sein. Falls bei der Einrichtung Ihrer Monitore Probleme auftreten, kann es hilfreich sein, die Protokolle der einzelnen Snyk-Controller anzusehen, wie in den folgenden Befehlsbeispielen gezeigt:
Snyk-Controller für „Äpfel“
Snyk-Controller für „Bananen“
Zusammenfassung
In diesem Blogbeitrag haben wir gezeigt, wie Sie mehrere Snyk-Controller in einem einzelnen Kubernetes-Cluster bereitstellen, die jeweils ihren eigenen Namespace überwachen. Die Controller kommunizieren mit der Kubernetes-API, um festzustellen, welche Workloads im Cluster ausgeführt werden (z. B. Deployment, ReplicationController, CronJob usw., wie in der Rego-Policy-Datei definiert). Sie ermitteln die zugehörigen Images und scannen diese direkt im Cluster auf Schwachstellen.
Probieren Sie diese Schritte gerne in Ihrem eigenen Kubernetes-Cluster aus. Starten Sie dazu eine kostenlose Testversion des Snyk-Business-Plans.
Weitere Informationen
Nachdem Sie nun erfahren haben, wie einfach sich die Kubernetes-Integration mit Snyk einrichten lässt, finden Sie hier einige hilfreiche Links für den Einstieg in die Container-Sicherheit.
Snyk Container für den automatischen Import bzw. das automatische Löschen von Kubernetes-Workload-Projekten einrichten
Rego lernen mit dem hervorragenden Tutorial-Kurs von Styra
Sichern Sie Ihre Infrastruktur an der Quelle
Snyk automatisiert die IaC-Sicherheit und Compliance in Workflows und erkennt abweichende sowie fehlende Ressourcen.



