Skip to main content

Schwachstellen in Ihrer CI/CD-Pipeline mit Snyk und Harness finden und beheben

Artikel von

Pas Apicella

Martin Ansong

blog feature snyk harness

10. Dezember 2021

0 Min. Lesezeit

Als DevOps vor mehr als zehn Jahren aufkam, lag der Schwerpunkt darauf, die Lücken zwischen Entwicklungs- und Betriebsteams zu schließen. Dazu wurden die Prozesse für das Konzipieren, Entwickeln, Testen und Bereitstellen von Anwendungen automatisiert.

Doch während Entwicklungsteams immer schneller und häufiger liefern, fällt es Sicherheitsteams schwer, Schritt zu halten. Oft werden sie zum Engpass in der Delivery-Pipeline. Deshalb ist es immer wichtiger geworden, Sicherheit frühzeitig in den DevOps-Prozess einzubinden und eine DevSecOps-Kultur zu etablieren.

Die Integration der entwicklerorientierten Sicherheitsplattform von Snyk in den einheitlichen Delivery-Pipeline-Workflow von Harness stellt sicher, dass Sicherheits- und Compliance-Tests Teil jedes Releases sind. So verhindern Sie, dass Anwendungen mit anfälligen Abhängigkeiten und Code in die Produktion gelangen. Mit modernen Tools wie Snyk und Harness können Sie Schwachstellen in einer CI/CD-Pipeline finden und beheben und Geschäftsrisiken minimieren, ohne Ihre Fähigkeit zu beeinträchtigen, Software schnell bereitzustellen.

Erste Schritte mit Snyk

Snyk ist eine Sicherheitsplattform für Entwickler, mit der Teams ganz einfach Schwachstellen in Code, Abhängigkeiten, Containern und Infrastructure as Code finden, priorisieren und beheben können. Die Plattform lässt sich direkt in Entwicklungstools, Workflows und Automatisierungs-Pipelines integrieren.

Dank branchenführender Anwendungs- und Sicherheitsinformationen stellt Snyk Sicherheitswissen in jedem Entwickler-Toolkit bereit.

Die ersten Schritte mit Snyk sind ganz einfach: Registrieren Sie sich für ein kostenloses Konto.

Erste Schritte mit Harness

Harness ist die branchenweit erste Software-Delivery-Plattform, die DevOps-Prozesse mithilfe von KI vereinfacht – CI, CD, Feature Flags, Cloud-Kostenmanagement und vieles mehr.

Mit Harness können Sie komplexe Deployments in wenigen Minuten mithilfe wiederverwendbarer Vorlagen erstellen und so Zeit und Stress sparen. Mit Harness erstellen Sie Pipelines in wenigen Minuten.

Um mit Harness loszulegen, besuchen Sie einfach harness.io und richten Sie ein kostenloses Testkonto ein.

Verhindern, dass Schwachstellen den Build- und Deployment-Prozess durchlaufen

Am besten lässt sich die gebündelte Leistung von Snyk und Harness in einer Anleitung demonstrieren, die Sie selbst einrichten und ausführen können. In diesem Beispiel zeigen wir mit Snyk, wie Sie verhindern können, dass Schwachstellen den Build- und Deployment-Prozess durchlaufen, indem Sie automatisierte Snyk-Tests in einen Harness-Workflow integrieren.

Wir verwenden das folgende GitHub-Repository: https://github.com/mansong1/springbootemployee-api

Wenn Sie mitmachen möchten, benötigen Sie Folgendes:

  1. Snyk-Konto

  2. Harness-Konto

Dieses Tutorial ist am sinnvollsten, wenn Sie zuvor die folgenden Schritte mit Harness abgeschlossen haben:

Wenn Sie die obigen Schritte abgeschlossen bzw. die Inhalte durchgearbeitet haben, wissen Sie, wie Sie einen Harness-CI-Workflow einrichten.

Sieben Schritte zum Ausführen von Snyk-Tests in Harness

Schritt 1: Snyk-API-Token-Secret erstellen

Für Snyk-CLI-Tests benötigen Sie ein Snyk-API-Token. Als Unternehmenskunde können Sie Servicekonten einrichten und über Snyk App ein Token erstellen. Bei Snyk-Konten ohne Enterprise-Tarif, einschließlich unseres kostenlosen Snyk-Tarifs, können Sie das Benutzer-Token verwenden.

Erstellen Sie anschließend in Harness ein Secret zum Speichern Ihres Snyk-API-Tokens. Folgen Sie dazu diesen Schritten.

Schritt 2: Neue Pipeline erstellen

1. Erstellen Sie zunächst ein neues Projekt in Harness, indem Sie auf +Project klicken.

Harness-Willkommensbildschirm mit Softwarebereitstellungsmodulen und einem Pfeil, der auf die Schaltfläche „+ Project“ zeigt.

2. Nachdem Sie Ihr Projekt erstellt haben, öffnen Sie das Modul Continuous Integration, um eine neue Pipeline zu erstellen.

Pipeline-Seite mit dem Hinweis, dass es im Projekt keine Pipelines gibt, und hervorgehobener Schaltfläche „Pipeline erstellen“.

Schritt 3: Codebasis hinzufügen

Wenn dies die erste CI-Stage in der Pipeline ist, aktivieren Sie in den CI-Stage-Einstellungen die Option Clone Codebase. Wenn bereits eine Pipeline mit einer CI-Stage vorhanden ist, klicken Sie auf Codebase. Siehe Codebase-Konfiguration bearbeiten.

Schritt 4: Build-Farm-Infrastruktur definieren

Definieren Sie in der Infrastruktur der CI-Stage die Build-Farm für die Codebasis. Siehe Build-Infrastruktur für Kubernetes-Cluster einrichten.

Schritt 5: Run-Snyk-Test konfigurieren

Klicken Sie unter „CI Execution“ auf „Add Step“ und dann auf „Run“.

Build-Menü mit den Optionen „Run“, „Plugin“ und „Restore Cache From S3“

Mit dem Run-Schritt werden ein oder mehrere Befehle in einem Container-Image ausgeführt.

Snyk bietet mehrere Container-Images, die die Snyk CLI enthalten und mit den relevanten Tools für verschiedene Sprachen ausgestattet sind. In diesem Beispiel verwenden wir die Maven-Version, da sie auch in dieser Beispielanwendung zum Einsatz kommt.

Informationen zur Konfiguration eines Run-Schritts finden Sie unter Run-Step-Einstellungen. Fügen Sie dort Ihr Snyk-API-Token hinzu.

Optionales Konfigurationsfenster mit aktivierter Option „Privileged“, optionalen Berichtspfaden und einer Umgebungsvariable mit dem Schlüssel SNYK_TOKEN.

Sie können jetzt in der Konfiguration im Abschnitt Command auf diese Umgebungsvariable verweisen.

Snyk Pipeline Studio: Das Konfigurationsfenster für einen Ausführungsschritt zeigt ein Snyk-Test-Docker-Image sowie Befehle zum Festlegen des API-Tokens und Ausführen von snyk test.

Schritt 6: Pipeline ausführen

Jetzt können Sie Ihre Pipeline ausführen.

1. Klicken Sie auf Save and Publish.

2. Klicken Sie auf Run. Die Einstellungen für Pipeline Inputs werden angezeigt.

3. Klicken Sie unter „CI Codebase“ auf Git Branch.

4. Geben Sie unter Git Branch den Namen des Branches ein, in dem sich die Codebasis befindet, z. B. master.

Dialogfeld „Pipeline ausführen“ mit CI-Codebasis-Einstellungen, in dem „Git Branch“ ausgewählt und der Branch auf „master“ gesetzt ist.

5. Klicken Sie auf Run Pipeline.

Schritt 7: Pipeline-Ausführung anzeigen

Während der Workflow ausgeführt wird, schlägt der Snyk-Test-Schritt fehl, da das Projekt anfällige Abhängigkeiten enthält. Klicken Sie auf den Umschalter Console View, um den vollständigen Bericht anzuzeigen.

Hinweis: Um Ihre Tests besser zu steuern, können Sie dem Befehl snyk test das Flag severity-threshold mit einer der unterstützten Optionen (low|medium|high|critical) übergeben. Mit diesem Flag werden nur Schwachstellen auf der angegebenen oder einer höheren Stufe gemeldet.

Snyk-Test-Pipeline als fehlgeschlagen markiert, mit den Phasen Initialize, Git clone und Snyk Test sowie einem Fehlerprotokoll zu einer Sicherheitslücke.

Die gesamte Pipeline ist auch als YAML verfügbar. Öffnen Sie dazu unter Builds:

  1. Klicken Sie auf More Options.

  2. Wählen Sie Edit Pipeline aus.

  3. Klicken Sie auf YAML.

Pipeline-Studio-Oberfläche mit den Tabs „Visual“ und „Yaml“, wobei „Yaml“ ausgewählt ist

Unten sehen Sie die gesamte Pipeline als YAML. Sie können alles in der Pipeline bearbeiten und sie erneut ausführen.

pipeline:
  stages:
      - stage:
            type: CI
            spec:
                infrastructure:
                    type: KubernetesDirect
                    spec:
                        connectorRef: org.GKE
                        namespace: harness-builds
                execution:
                    steps:
                        - step:
                              type: Run
                              spec:
                                  connectorRef: org.Dockerhub
                                  image: snyk/snyk-cli:1.745.0-maven-3.5.4
                                  command: |-
                                      snyk config set api=$SNYK_TOKEN
                                      snyk test
                                  privileged: true
                                  envVariables:
                                      SNYK_TOKEN:  <+secrets.getValue("org.SNYK_TOKEN")>
                                  resources:
                                      limits:
                                          memory: 1Gi
                                          cpu: "1.0"
                              name: Snyk Test
                              identifier: Snyk_Test
                cloneCodebase: true
            name: CI
            identifier: CI
  properties:
      ci:
          codebase:
              repoName: springbootemployee-api
              connectorRef: org.Github
              build: <+input>
  projectIdentifier: Snyk
  orgIdentifier: default
  name: Snyk Test
  identifier: Snyk_Test
  description: Test local project for vulnerabilities.

CI/CD-Workflow

Neben Abhängigkeiten von Anwendungen können auch die verwendeten Container Schwachstellen mit sich bringen. Fehlkonfigurationen von Cloud-Ressourcen zählen zudem zu den häufigsten Ursachen für Cloud-Schwachstellen, die zum Zugriff auf Cloud-Daten und -Dienste ausgenutzt werden.

In diesem Beispiel erstellen wir unsere Anwendung, stellen sie in Kubernetes bereit und überwachen sie anschließend mit Snyk.

Um einen Container in Harness zu erstellen und hochzuladen, folgen Sie einfach diesen Schritten. Einen Snyk Container-Scan-Schritt fügen Sie ähnlich wie den oben beschriebenen Snyk-Test-Schritt hinzu.

Informationen zum Deployment des Containers in unserem Kubernetes-Cluster finden Sie in der Harness-Dokumentation. In unserer CD-Pipeline führen wir zuvor einen Snyk-Test unseres Kubernetes-Manifests aus. Dazu fügen Sie einen Schritt vom Typ Shell Script mit dem Befehl snyk iac test hinzu.

Pipeline Studio Shell-Script-Konfiguration mit einem Bash-Skript zum Klonen eines Repositorys und Ausführen von Snyk Infrastructure as Code-Tests

Das im Snyk-IaC-Schritt ausgeführte Skript sieht wie folgt aus:

rm -rf springbootemployee-api || true

git clone https://github.com/mansong1/springbootemployee-api
cd springbootemployee-api

SNYK_TOKEN=<+secrets.getValue("org.SNYK_TOKEN")>
snyk config set api=$SNYK_TOKEN
snyk iac test manifests/<+infra.namespace>/templates/*.yaml

Der vollständige CI/CD-Workflow sieht so aus:

Snyk-Pipelineansicht mit einer erfolgreichen SpringBoot-Employee-API-Pipeline mit CI-, Staging-Deployment- und Sicherheitstestphasen.
Harness-Pipeline-Dashboard mit erfolgreichem Deployment einer SpringBoot Employee API in die Staging-Umgebung und CI- und Deployment-Phasen

Wie zuvor lässt sich diese Pipeline als YAML anzeigen. Sie befindet sich in diesem GitHub-Repository.

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. Nach dem Import überwacht Snyk diese Workloads kontinuierlich und erkennt weitere Sicherheitsprobleme, wenn neue Images bereitgestellt werden oder sich die Workload-Konfiguration ändert.

Ein erfolgreiches Deployment über unseren Harness-CD-Workflow wird in der Snyk-Benutzeroberfläche wie folgt angezeigt:

Projekt-Dashboard mit api/deployment.apps/snyk-employee-api, nach Schweregrad aufgeschlüsselten Zählwerten und verknüpften Container-Images
Snyk-Dashboard mit Sicherheitslücken in einer Kubernetes-Bereitstellung, fehlgeschlagenen Sicherheitskonfigurationsprüfungen und einem XXE-Injection-Problem mittlerer Schwere.

Jetzt ausprobieren

Bei der Wahl einer Technologieplattform ist es wichtig, eine Lösung auszuwählen, bei der die Bedürfnisse von Entwicklern im Mittelpunkt stehen. Außerdem sollte sie den Schwerpunkt auf die Behebung von Problemen legen, statt sie nur zu melden. Plattformen mit einem entwicklerorientierten Ansatz können Sicherheit in die gesamte Pipeline integrieren und verschiedenen Beteiligten wie Entwicklungs-, Sicherheits- und Betriebsteams einen ganzheitlichen Überblick verschaffen.So wird ein gemeinsames DevSecOps-Mindset verankert und sicherere Software erreicht die Nutzer.

Vielen Dank, dass Sie an diesem Tutorial teilgenommen haben. Probieren Sie noch heute Snyk und Harness aus!

Sichern Sie Ihre Infrastruktur an der Quelle

Snyk automatisiert die IaC-Sicherheit und Compliance in Workflows und erkennt abweichende sowie fehlende Ressourcen.

Über die Autoren

Martin Ansong ist Solutions Engineer im Bereich Commercial Sales bei Harness. Er unterstützt Kunden dabei, den Build- und Delivery-Lebenszyklus ihrer Software zu beschleunigen.

Pas Apicella ist Principal Solution Engineer APJ bei Snyk. Er arbeitet an der Snyk-Plattform, um Kunden dabei zu unterstützen, ihre Cloud-Native-Anwendungen zu schützen und eine DevSecOps-Kultur zu etablieren – und gleichzeitig die geschäftlichen Anforderungen zu erfüllen.