Close

Integration von Snyk und Bitbucket Pipelines für DevSecOps

Foto von Simon Maple
Simon Maple

Field CTO bei Snyk

Umsetzung von DevSecOps-Prinzipien durch die Integration von Snyk in Bitbucket Pipelines

Zeit

Lesedauer: 5 Minuten.

Zielpublikum

Entwickler, Sicherheits-/Anwendungs-Teams und DevOps-/DevSecOps-Engineers.

Voraussetzungen

Du hast ein Synk-Konto. Lege hier los.

Du hast ein Bitbucket-Konto von Atlassian. Melde dich hier an oder lege hier los.

In diesem Tutorial wird beschrieben, wie du deinen Build-Workflow mit Snyk auf Bitbucket Pipelines sichern kannst. Ein wichtiger Schritt zur Sicherung deiner Umgebung besteht darin, sowohl deine Anwendung als auch dein Linux-basiertes Containerprojekt auf bekannte Schwachstellen zu scannen. So kannst du Sicherheitsschwachstellen einfacher identifizieren und mildern. Die Übungen in diesem Tutorial helfen dabei, deine Anwendung und deinen Container zu sichern, indem du Snyk Pipe for Bitbucket Pipelines nutzt. Damit kannst du die Anwendungsmanifestdatei und das Container-Basisimage auf gegenseitige Abhängigkeiten hin untersuchen.

Der Schwerpunkt des Tutorials So unterstützen Snyk und Bitbucket Cloud DevSecOps waren Abhängigkeiten von Anwendungen. Wenn du jedoch dein Container-Basisimage scannst, kannst du Folgendes erkennen:

  • Die vom Paket-Manager installierten und verwalteten Betriebssystempakete
  • Schlüsselbinärdateien: Das sind Layer, die nicht über den Paket-Manager installiert wurden.

Basierend auf diesen Ergebnissen bietet Snyk unter anderem folgende Ratschläge und Hinweise:

  • Ursprung von Schwachstellen in Betriebssystempaketen und wichtigen Binärdateien
  • Details zum Basisimage-Upgrade oder eine Empfehlung zum Neuaufbau des Image
  • Dockerfile-Ebene, auf der das betroffene Paket eingeführt wurde
  • Feste Version des Betriebssystems und wichtige Binärdateipakete

Scannen von Anwendungen in Bitbucket Pipeline

Die Datei bitbucket-pipelines.yml definiert die Konfiguration deiner Builds für Bitbucket Pipelines. Wenn du erst mit Bitbucket Pipelines anfängst, kannst du hier mehr über die ersten Schritte erfahren.

Dieses Tutorial bietet die Beispieldatei bitbucket-pipelines.yml, die verschiedene Schritte im Zusammenhang mit dem Workflow enthält. Wir scannen zunächst die Anwendung, erstellen das Docker-Image und scannen dann das Container-Image. Im Folgenden gehen wir näher auf den Schritt zum Scannen der Anwendung ein:

scan-app: &scan-app
 - step:
     name: "Scan open source dependencies"
     caches:
       - node
     script:
       - pipe: snyk/snyk-scan:0.4.3
         variables:
           SNYK_TOKEN: $SNYK_TOKEN
           LANGUAGE: "npm"
           PROJECT_FOLDER: "app/goof"
           TARGET_FILE: "package.json"
           CODE_INSIGHTS_RESULTS: "true"
           SEVERITY_THRESHOLD: "high"
           DONT_BREAK_BUILD: "true"
           MONITOR: "false"


In diesem Beispiel wird die Snyk Scan-Pipe in der Pipeline verwendet, um einen Scan der Anwendung durchzuführen. Die Quelle enthält eine vollständige YAML-Definition aller unterstützten Variablen, für diesen Zweck sind aber nur die in diesem Ausschnitt enthaltenen erforderlich.

Hier sehen wir uns einige davon genauer an:

1. SNYK_TOKEN wird als Repository-Variable an die Pipe übergeben, die zuvor im Modul [Bitbucket-Konfiguration] definiert wurde.

2. PROJECT_FOLDER ist der Ordner, in dem sich das Projekt befindet und in den es normalerweise abgelegt wird. In diesem Beispiel setzen wir die Variable jedoch auf app/goof und übergeben das als Artefakt an andere Schritte in der Pipeline.

3. CODE_INSIGHTS_RESULTS ist standardmäßig als false (falsch) gesetzt. Da wir jedoch einen Code Insights-Bericht mit Snyk-Testergebnissen erstellen möchten, ändern wir den Wert auf true (wahr).

4. SEVERITY_THRESHOLD meldet Probleme, die der angegebenen Ebene oder den Ebenen darüber entsprechen. Die Standardeinstellung ist low (niedrig). In diesem Fall sind wir jedoch nur an Ergebnissen für high (hoch) interessiert, daher definieren wir diese Variable entsprechend.

5. Der Standardwert DONT_BREAK_BUILD ist false (falsch), was zu erwarten ist. Unter normalen Umständen will man den Build-Vorgang unterbrechen, wenn Probleme erkannt werden. Zu Übungszwecken stellen wir den Wert aber auf true (wahr).

Ausrufezeichen

Du kannst die neue Snyk Security Connect-App aus dem Atlassian Marketplace nutzen, um Snyk-Sicherheitsscans für deine Pull-Anfragen auszuführen und die Ergebnisse in Code Insights anzeigen lassen. Der Einstieg ist ganz einfach und du kannst die App mit nur wenigen Klicks installieren.

Scannen der Container-Images

Diagramm des Bitbucket-Prozesses

Bis 2022 werden mehr als 75 % der globalen Unternehmen containerisierte Anwendungen in der Produktion ausführen (Gartner). Infolge der breiten Übernahme hat sich die Anzahl der Sicherheitslücken in Containern erhöht. Im Jahr 2018 wurde ein vierfacher Anstieg der Sicherheitslücken in Betriebssystemen gemeldet. Trotzdem geben 80 % der Entwickler zu, dass sie ihre Container-Images während der Entwicklung nicht testen. Entweder betrachten sie es nicht als ihre Aufgabe oder sie gehen davon aus, dass andere zu einem späteren Zeitpunkt Probleme entdecken. Das macht die Skalierung der Containersicherheit zu einer Herausforderung für schnell wachsende Unternehmen.

Scannen von Container-Images in deiner Pipeline

Ähnlich wie im vorherigen Abschnitt über Anwendungsscans konzentriert sich dieser Abschnitt auf die Konfiguration der Datei bitbucket-pipelines.yml, mit der das Docker-Image für die Anwendung erstellt, gescannt und dann an die Registry übertragen wird. Im Folgenden betrachten wir den Schritt zum Scannen von Container-Images etwas genauer:

scan-push-image: &scan-push-image
 - step:
     name: "Scan and push container image"
     services:
       - docker
     script:
       - docker build -t $IMAGE ./app/goof/
       - docker tag $IMAGE $IMAGE:${BITBUCKET_COMMIT}
       - pipe: snyk/snyk-scan:0.4.3
         variables:
           SNYK_TOKEN: $SNYK_TOKEN
           LANGUAGE: "docker"
           IMAGE_NAME: $IMAGE
           PROJECT_FOLDER: "app/goof"
           TARGET_FILE: "Dockerfile"
           CODE_INSIGHTS_RESULTS: "true"
           SEVERITY_THRESHOLD: "high"
           DONT_BREAK_BUILD: "true"
           MONITOR: "false"


Hierdurch wird das Container-Image erstellt und gekennzeichnet. Dann wird die Snyk Scan-Pipe in der Pipeline genutzt, um einen Scan des Container-Images durchzuführen. Behalte dieselben Werte für CODE_INSIGHTS_RESULTS, SEVERITY_THRESHOLD und DONT_BREAK_BUILD bei. Dadurch werden einige zusätzliche unterstützte Variablen übergeben, die für die Snyk-Pipe relevant sind, weil damit die Anforderung eines Container-Image-Scans anstelle eines Anwendungsscans nachvollzogen werden kann. Dazu wird LANGUAGE (Sprache) auf docker gesetzt, ein IMAGE_NAME (Image-Name) angegeben, die entsprechende Repository-Variable übergeben und die Variable TARGET_FILE (Zieldatei) als Dockerfile festgelegt.

Deine Pipeline durchsucht jetzt das Container-Image und deinen Anwendungscode nach bekannten Schwachstellen.

Weitere Integrationen für Atlassian Open DevOps anzeigen

Simon Maple
Simon Maple

Simon Maple is the Field CTO at Snyk, a Java Champion since 2014, Virtual JUG founder, and London Java Community co-leader. He is an experienced speaker, with a passion for community. When not traveling, Simon enjoys spending quality time with his family, cooking and eating great food.


Diesen Artikel teilen
Nächstes Thema

Lesenswert

Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.

Abbildung: DevOps

DevOps-Community

Abbildung: DevOps

DevOps-Lernpfad

Abbildung: Karte

Kostenlos loslegen

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up