Application-Security-Automatisierung für GitHub-Repositories mit Snyk
31. März 2021
0 Min. LesezeitSnyk bietet zahlreiche Integrationen und eine umfassende API, mit der Sie Snyk im gesamten SDLC bereitstellen und den gesamten Code überwachen können, den Ihr Unternehmen entwickelt.
Natürlich ist das nicht immer einfach.
Bei einer großen Anzahl von Repositories wird es zunehmend schwieriger, sicherzustellen, dass Snyk alle überwacht. Mit dem Wachstum kommt weiterer Code in Form neuer Repositories hinzu. Gleichzeitig ändern sich bestehende Repositories fortlaufend. Plötzlich dauern Sicherheitsmanagement-Aufgaben wie das Hinzufügen neuer Projekte zu Snyk und das Aktualisieren bestehender Projekte zu lange und sind ineffizient.
Auch das AppSec-Team von Snyk nutzt Snyk gerne und stieß daher ebenfalls auf diese Herausforderung. Wir begannen, alternative Workflows zu untersuchen, insbesondere im Bereich der Application-Security-Automatisierung, und lösten unsere Skalierungsprobleme schnell mit API-basierten Tools von Snyk, die das Tech-Services-Team entwickelt hatte.
Sehen wir uns das genauer an.
1. GitHub auslesen
Das erste Tool, das ich vorstellen möchte, ist snyk-api-import. Es ist äußerst leistungsstark, denn damit lassen sich neue Repositories automatisch als Projekte in Snyk importieren. Das Tool nutzt die Snyk API, um Repositories kontrolliert und zuverlässig in Snyk zu importieren – mit Batch-Import, Fehlerbehandlung und automatischen Wiederholungsversuchen.
Das Tool liest eine Liste von Zielen ein und importiert sie in Snyk. Anschließend prüft es mithilfe der API den Importstatus.
Um das Tool zu verwenden, müssen wir zunächst eine Liste der zu importierenden Ziele erstellen. Ein Ziel besteht aus drei Parametern:
Die Organisations-ID – die Snyk-Organisation, in die die Ziele importiert werden sollen
Die Integrations-ID – der zu verwendende Integrationstyp (GitHub/Bitbucket/Docker usw.)
Die Zieldetails – bei GitHub sind das der Repository-Name, der Eigentümer und der zu scannende Branch (Informationen zu weiteren Parametern finden Sie in der Dokumentation).
Wir müssen also Code schreiben, der alle unsere GitHub-Repositories ausliest und für jedes Repository ein Ziel erstellt. Das Ergebnis: ein paar Zeilen Code:
Besonders leistungsstark ist dieser Codeausschnitt, weil er so anpassbar ist: Sie können festlegen, welcher Organisation jedes Repository zugeordnet wird (entsprechend Ihren Gruppenrichtlinien), welche Repositories ignoriert werden sollen usw. Und das alles mit nur wenigen Zeilen Code!
Nun können wir snyk-api-import ausführen. Je nach Anzahl der Repositories kann das eine Weile dauern. Sobald der Vorgang abgeschlossen ist, wird Ihr gesamter Code von Snyk abgedeckt!
2. Änderungen im Blick behalten
Wir haben also einmalig importiert. Doch wie stellen wir kontinuierlich sicher, dass unsere Repositories überwacht werden? Eine Möglichkeit wäre, dasselbe Tool täglich auszuführen – das würde jedoch zu lange dauern und wäre ziemlich ineffizient.
Zum Glück bietet snyk-api-import eine Lösung: Das Tool kann eine Liste aller importierten Projekte erstellen. Bei einem erneuten Lauf importiert es nur die Änderungen – das geht deutlich schneller (in der Regel dauert es nur wenige Minuten, je nachdem, wie viele Repositories hinzugekommen sind).
3. Bestehende Projekte aktualisieren
Doch Änderungen betreffen nicht nur neue Repositories. Auch bestehende Repositories werden häufig angepasst. Manifest-Dateien werden mitunter hinzugefügt, entfernt oder einfach zwischen Repositories verschoben. Diese Änderungen müssen auch in den entsprechenden von Snyk verwalteten Projekten übernommen werden.
Hier kommt ein weiteres nützliches Tool ins Spiel: snyk-scm-refresh.
Dieses Tool wurde entwickelt, um sicherzustellen, dass alle Projekte in Snyk mit den entsprechenden Repositories auf GitHub synchron sind. Es erkennt neue Manifest-Dateien, entfernt Projekte für nicht mehr vorhandene Manifeste, aktualisiert Projekte, wenn ein Repository umbenannt wurde, und erkennt gelöschte Repositories. Praktisch!
4. Den gesamten Prozess mit CircleCI von Anfang bis Ende automatisieren
Für die Verwendung dieser Tools haben wir einen sehr einfachen CircleCI-Job eingerichtet, der jede Nacht ausgeführt wird und Folgendes erledigt:
Alle Ziele aus GitHub erstellen
Die Import-Tools ausführen, um eine Liste der bereits importierten Projekte zu erstellen
Das Import-Tool ausführen, um neue Repositories zu synchronisieren
Das SCM-Refresh-Tool ausführen, um bestehende Repositories zu synchronisieren

Die nächste Herausforderung, die wir angehen möchten: Container-Registries. Ein ähnliches Problem, aber etwas komplexer!
Die Vorteile der Automatisierung
Eine leistungsfähige API ist entscheidend, um Sicherheitstools an die spezifischen Anforderungen Ihres Unternehmens anzupassen. In diesem Fall ermöglichte uns die Snyk API, Automatisierungen einzurichten und so eine komplexe Herausforderung zu bewältigen: sicherzustellen, dass tatsächlich alle unsere Code-Repositories von Snyk abgedeckt wurden. Durch die Automatisierung des Imports und der Aktualisierung von Projekten konnten wir nicht nur die Sicherheitsabdeckung gewährleisten, sondern auch effizienter arbeiten und Zeit sparen, die sonst für manuelle Schritte aufgewendet worden wäre.
Vielleicht noch wichtiger: Mit der API konnten wir Snyk in unsere bestehenden Workflows integrieren. Diese Flexibilität hat uns wertvolle Zeit gespart, die wir sonst für die Entwicklung einer komplizierteren und ressourcenintensiveren Umgehungslösung gebraucht hätten.



