Mit Pulumi die Snyk-Kubernetes-Integration für Container automatisieren
Pas Apicella
9. Februar 2022
0 Min. LesezeitDer Begriff Infrastructure as Code (IaC) ist uns allen bekannt. Doch Code bedeutet in diesem Zusammenhang nicht wirklich Code im Sinne einer Programmiersprache. IaC bezeichnet in der Regel die Konfiguration von Infrastruktur mithilfe von Tools wie Terraform, CloudFormation, Kubernetes-YAML oder Azure Resource Manager-Vorlagen. Dabei wird festgelegt, wie die Infrastruktur erstellt wird. Diese Konfigurationen bieten nicht die Flexibilität und Leistungsfähigkeit moderner Programmiersprachen. IaC ist also Code, aber normalerweise nicht diese Art von Code.
In diesem Blogbeitrag zeigen wir Ihnen Schritt für Schritt, wie Sie mit Pulumi, einem neuen Open-Source-Tool, mit dem Entwickler Code in mehreren Sprachen wie JavaScript, Typescript, Python und Go erstellen können, alles Notwendige für die Konfiguration der Kubernetes-Integration in Snyk Container einrichten.
Überblick über die Snyk-Kubernetes-Integration
Snyk lässt sich in Kubernetes integrieren. So können Sie Ihre laufenden Workloads importieren und testen sowie Schwachstellen in den zugehörigen Images und Konfigurationen erkennen, die die Sicherheit dieser Workloads beeinträchtigen könnten. Nach dem Import überwacht Snyk diese Workloads weiterhin und erkennt zusätzliche Sicherheitsprobleme, wenn neue Images bereitgestellt werden oder sich die Workload-Konfiguration ändert.
Was ist Pulumi?
Pulumi ist ein Open-Source-IaC-Tool, das die beliebtesten Programmiersprachen nutzt, um die Bereitstellung und Verwaltung von Cloud-Ressourcen zu vereinfachen.
Pulumi wurde 2017 gegründet und hat grundlegend verändert, wie DevOps-Teams das Konzept von Infrastructure as Code angehen. Anstatt auf domänenspezifische Sprachen zu setzen, können Unternehmen mit Pulumi echte Programmiersprachen verwenden, um Cloud-native Infrastruktur bereitzustellen und wieder abzubauen.
Pulumi unterstützt die folgenden Programmiersprachen:
Python
JavaScript
Go
TypeScript
.NET-Sprachen (C#, F# und VB)
So installieren Sie die Snyk-Kubernetes-Integration mit Pulumi
Jetzt wird es spannend! Wir gehen Schritt für Schritt durch die Einrichtung von Pulumi und starten unsere Automatisierungen. Dabei gehen wir wie folgt vor:
Richten Sie in der Snyk-App eine Kubernetes-Integrations-ID ein
Legen Sie die erforderlichen Pulumi-Konfigurationsvariablen fest
Voraussetzungen
Für die Kubernetes-Integration benötigen Sie ein Business- oder Enterprise-Konto bei Snyk. Falls Sie noch keines haben, können Sie sich für eine kostenlose 14-tägige Business-Testversion anmelden.
Wir stellen die Ressourcen in Google Cloud bereit, daher benötigen Sie ein Konto. Falls Sie noch kein Konto haben, melden Sie sich hier kostenlos an. Folgen Sie anschließend in jedem Fall diesen Anweisungen, um Pulumi mit Ihrem Google-Cloud-Konto zu verbinden.
In diesem Beispiel wird vorausgesetzt, dass sich die
gcloud-CLI in Ihrem Pfad befindet. Sie wird als Teil des Google Cloud SDK installiert.Stellen Sie sicher, dass Sie über Python 3, ein Pulumi-Konto und die Pulumi-CLI verfügen.
Beachten Sie, dass Pulumi voraussetzt, dass Python 3 in Ihrer Umgebung die Standardversion ist. Falls neben Python 3 auch Python 2 installiert ist, müssen Sie möglicherweise einen Alias erstellen. Führen Sie den folgenden Befehl aus, um dies zu überprüfen und sicherzustellen, dass Sie die neueste Version von 3.x verwenden:
Schritt 1: Richten Sie in der Snyk-App eine Kubernetes-Integrations-ID ein
Melden Sie sich bei Snyk an und wählen Sie die Organisation aus, in der Sie die Kubernetes-Integration automatisch einrichten möchten. Sie können eine leere Organisation oder eine bestehende Organisation mit Projekten verwenden. Stellen Sie für dieses Beispiel sicher, dass die Kubernetes-Integration in der ausgewählten Organisation noch nicht konfiguriert ist.
Klicken Sie anschließend auf Integrationen > Kubernetes > Verbinden. Wenn Sie kein Snyk-Business- oder Enterprise-Konto haben, können Sie diesen Schritt nicht ausführen.
Notieren Sie sich die Integrations-ID, da wir sie gleich benötigen.

Das war’s! Jetzt können Sie unsere Snyk-Kubernetes-Integrationsdemo mit Pulumi Infrastructure as Code einrichten. Pulumi erledigt Folgendes:
Einen GKE-Cluster erstellen
Den Snyk-Controller im Cluster bereitstellen0
Die Snyk-Kubernetes-Integration für den automatischen Import von K8s-Workloads in Snyk einrichten
Einen Beispiel-Workload gemäß unserer Rego-Richtliniendatei im Namespace
applesbereitstellen
Schritt 2: Klonen Sie das Beispiel-Repository
Klonen Sie das folgende GitHub-Demo-Repository wie unten gezeigt:
Wechseln Sie nach dem Klonen dieses Repositorys mit cd in das Verzeichnis und führen Sie die nächsten Befehle aus …
Schritt 3: Authentifizieren Sie sich bei Google Cloud
Authentifizieren Sie sich mit der lokalen Authentifizierung bei Google Cloud, um diese Demo bereitzustellen. Es gibt weitere Möglichkeiten, Pulumi mit Google Cloud zu konfigurieren, aber für diese Demo ist dies der einfachste Weg:
Schritt 4: Erstellen Sie einen neuen Pulumi-Stack
Erstellen Sie einen neuen Stack, der für dieses Beispiel als isoliertes Bereitstellungsziel dient. Verwenden Sie als Beispiel dev:
Schritt 5: Legen Sie die erforderlichen Pulumi-Konfigurationsvariablen fest
Häufig benötigen verschiedene Stacks innerhalb eines Projekts unterschiedliche Werte. Beispielsweise möchten Sie möglicherweise für Ihre Google-Cloud-Compute-Instanz eine andere Größe oder für Ihren Kubernetes-Cluster in Entwicklungs- und Produktions-Stacks eine andere Anzahl von Servern verwenden.
Die Schlüssel-Wert-Paare eines Stacks werden in der Stack-Einstellungsdatei Ihres Projekts gespeichert. Ihr Name lautet automatisch Pulumi.<stack-name>.yaml. In der Regel können Sie diese Datei ignorieren. Möglicherweise möchten Sie sie jedoch einchecken und zusammen mit dem Quellcode Ihres Projekts versionieren.
Fügen Sie Ihrem Stack die folgenden Konfigurationsvariablen hinzu, wie unten gezeigt:
Standardmäßig hat Ihr Cluster 3 Knoten vom Typ n1-standard-1. Diese Einstellung lässt sich ändern. Wenn Sie beispielsweise 5 Knoten vom Typ n1-standard-2 auswählen möchten, können Sie folgende Befehle ausführen:
Abschließend müssen wir die erforderlichen Einstellungen für die Snyk-Kubernetes-Integration konfigurieren, damit die Integration automatisch in unserem Cluster eingerichtet wird. Dazu benötigen wir die ID unserer Kubernetes-Integration und die ID unserer Snyk-Organisation. In diesem Beispiel sind beide identisch:
Dieses Beispiel zeigt, wie Sie Stacks sinnvoll konfigurieren können. Sie können diese Einstellungen sogar nach der Bereitstellung ändern.
Anschließend enthält die Datei Pulumi.dev.yaml Folgendes:
Schritt 6: Stellen Sie alles mit pulumi up bereit
Mit dem Befehl pulumi up werden alle für die Kubernetes-Integration mit Snyk erforderlichen Google-Cloud-Ressourcen bereitgestellt, darunter der GKE-Cluster selbst und das Helm-Chart des Snyk-Controllers. Anschließend wird ein Kubernetes-Deployment mit einer Spring-Boot-Anwendung bereitgestellt:
Daraufhin wird eine Vorschau angezeigt und Sie werden um Bestätigung gebeten. Anschließend beginnt die Bereitstellung der Snyk-Kubernetes-Integrationsdemo:
Nach etwa fünf Minuten ist Ihr Cluster bereit. Der Snyk-Controller ist installiert und ein Beispiel-Workload-Deployment wurde automatisch in Ihre Snyk-Organisation importiert:
Die folgenden Screenshots zeigen, dass alles wie erwartet erstellt wurde.
Der in Google Cloud erstellte GKE-Cluster:

Die automatisch konfigurierte Snyk-Kubernetes-Integration:

Der automatisch aus dem Namespace apples importierte Beispiel-Workload:


Konfiguration im Detail
Sehen wir uns die Python-Datei __main__.py genauer an und erfahren wir, wie die Snyk-Kubernetes-Integration für uns installiert und konfiguriert wurde.
Die vom Snyk-Controller verwendete Rego-Richtliniendatei ist derzeit fest so eingestellt, dass nur Workloads aus dem Namespace apples importiert werden, sofern sie nicht vom Typ CronJob oder Service sind. Sie können dies in __main__.py ändern und die Richtliniendatei extern statt als fest codierten Bestandteil des Python-Codes verwenden:
Hier sehen Sie den Python-Code, mit dem der Snyk-Controller über sein Helm-Chart installiert wird. Beachten Sie, dass wir das Repository zum Abrufen des Helm-Charts angegeben und sowohl die Snyk-Organisations-ID als auch die oben beschriebene benutzerdefinierte Richtliniendatei bereitgestellt haben. All dies ist erforderlich, um den Snyk-Controller im GKE-Cluster zu installieren und in Snyk zu integrieren.
Mit dem Python-Code wurde außerdem eine Spring-Boot-Beispielanwendung im Namespace apples bereitgestellt. Diese wurde vom Snyk-Controller automatisch in die Snyk-App importiert. Der Python-Code für dieses Deployment lautet:
Schritt 7: Rufen Sie die Kubernetes-Konfiguration ab
Sie können diese Konfiguration nun entweder in Ihrer Datei ~/.kube/config verwenden oder lokal speichern und in die Umgebungsvariable KUBECONFIG eintragen. Natürlich funktionieren auch alle Ihre gewohnten Google-Cloud-Befehle.
Zum Beispiel:
Der im Namespace snyk-monitor installierte Snyk-Controller sowie die jetzt von Pulumi verwaltete ConfigMap und das Secret, angezeigt mit einigen kubectl-Befehlen:
Schritt 8: Entfernen Sie die gesamte Einrichtung
Wenn Sie fertig sind, können Sie alle Ressourcen und den Stack entfernen:
Zusammenfassend haben Sie erfahren, wie Sie mit Pulumi die Snyk-Kubernetes-Integration installieren und konfigurieren können. Damit können Sie Ihre laufenden Workloads importieren und testen sowie Schwachstellen in den zugehörigen Images und Konfigurationen erkennen, die die Sicherheit dieser Workloads beeinträchtigen könnten.
Weitere Ressourcen
Sie wissen nun, wie einfach sich die Kubernetes-Integration mit Snyk mithilfe der Programmiersprache Python und Pulumi einrichten lässt. Die folgenden Links helfen Ihnen bei den ersten Schritten auf Ihrem Weg zur Container-Sicherheit.
Dokumentation zum Überblick über die Kubernetes-Integration
Dokumentation zum automatischen Import und Löschen von Kubernetes-Workload-Projekten
Lernen Sie Rego 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.
