Skip to main content

Détectez et corrigez les vulnérabilités de votre pipeline CI/CD avec Snyk et Harness

Écrit par

Pas Apicella

Martin Ansong

blog feature snyk harness

10 décembre 2021

0 minutes de lecture

Il y a plus de dix ans, lorsque le DevOps a fait son apparition, l’objectif principal était de combler le fossé entre les équipes de développement et d’exploitation. Pour y parvenir, on a automatisé les processus de conception, de création, de test et de déploiement des applications.

Mais à mesure que les équipes de développement livrent plus rapidement et plus fréquemment, les équipes de sécurité peinent à suivre le rythme. Elles deviennent souvent le goulot d’étranglement du pipeline de livraison. C’est pourquoi il est de plus en plus important d’intégrer la sécurité en amont du processus DevOps et d’adopter une culture DevSecOps.

L’intégration de la plateforme de sécurité Snyk, conçue pour les développeurs, au workflow unifié de livraison de Harness garantit que les tests de sécurité et de conformité font partie de chaque mise en production. Vous pouvez ainsi empêcher les applications contenant du code et des dépendances vulnérables d’arriver en production. Avec des outils modernes comme Snyk et Harness, détectez, corrigez et éliminez les vulnérabilités tout au long d’un pipeline CI/CD, et réduisez les risques pour l’entreprise sans compromettre votre capacité à publier rapidement des logiciels.

Premiers pas avec Snyk

Snyk est une plateforme de sécurité pour les développeurs qui permet aux équipes de détecter, de hiérarchiser et de corriger facilement les vulnérabilités de sécurité dans le code, les dépendances, les conteneurs et l’infrastructure as code. Elle s’intègre directement aux outils, workflows et pipelines d’automatisation de développement.

Grâce à des renseignements de pointe sur les applications et la sécurité, Snyk met l’expertise en sécurité à la portée de tous les développeurs.

Pour commencer avec Snyk, il vous suffit de créer un compte gratuit.

Premiers pas avec Harness

Harness est la première plateforme de livraison de logiciels du secteur à utiliser l’IA pour simplifier vos processus DevOps : CI, CD, feature flags, gestion des coûts du cloud et bien plus encore.

Harness vous permet de créer des déploiements complexes en quelques minutes à l’aide de modèles réutilisables, pour gagner du temps et réduire le stress. Avec Harness, créez des pipelines en quelques minutes.

Pour commencer avec Harness, rendez-vous sur harness.io et créez un compte d’essai gratuit.

Empêcher les vulnérabilités de passer les étapes de compilation et de déploiement

La meilleure façon de montrer la puissance combinée de Snyk et Harness est de suivre une démonstration que vous pouvez configurer et réaliser vous-même. Dans cet exemple, nous utiliserons Snyk pour montrer comment empêcher les vulnérabilités de passer les étapes de compilation et de déploiement en ajoutant des tests Snyk automatisés à un workflow Harness.

Nous utilisons le dépôt GitHub suivant : https://github.com/mansong1/springbootemployee-api

Pour suivre les étapes, vous aurez besoin des éléments suivants :

  1. Compte Snyk

  2. Compte Harness

Ce tutoriel sera plus facile à suivre si vous avez déjà effectué les étapes suivantes avec Harness :

Si vous avez suivi ou consulté les ressources ci-dessus, vous savez désormais configurer un workflow CI Harness.

Sept étapes pour exécuter des tests Snyk dans Harness

Étape 1 : créer un secret de jeton API Snyk

Vous avez besoin d’un jeton API Snyk pour exécuter des tests Snyk CLI. Les clients Enterprise peuvent configurer des comptes de service et créer un jeton via Snyk App. Les comptes Snyk non-Enterprise, y compris notre offre gratuite, peuvent utiliser le jeton utilisateur principal.

Ensuite, créez un secret dans Harness pour stocker votre jeton API Snyk en suivant ces étapes.

Étape 2 : créer un pipeline

1. Commencez par créer un projet dans Harness en cliquant sur +Projet

Écran d’accueil de Harness présentant des modules de livraison logicielle et une flèche pointant vers le bouton « + Project ».

2. Une fois le projet créé, accédez au module Intégration continue pour créer un pipeline.

Page Pipelines indiquant qu’aucun pipeline n’est présent dans le projet et mettant en évidence le bouton « Create a Pipeline ».

Étape 3 : ajouter la base de code

S’il s’agit de la première étape CI du pipeline, activez Cloner la base de code dans les paramètres de l’étape CI. Si votre pipeline comporte déjà une étape CI, cliquez sur Base de code. Consultez Modifier la configuration de la base de code.

Étape 4 : définir l’infrastructure de la ferme de compilation

Dans l’infrastructure de l’étape CI, définissez la ferme de compilation pour la base de code. Consultez Configuration de l’infrastructure de compilation d’un cluster Kubernetes.

Étape 5 : configurer un test Snyk

Dans l’exécution CI, cliquez sur Ajouter une étape, puis sur Exécuter.

Menu de compilation affichant les options Exécuter, Plugin et Restaurer le cache depuis S3

L’étape Exécuter exécute une ou plusieurs commandes sur une image de conteneur.

Snyk propose plusieurs images de conteneur qui intègrent la Snyk CLI et les outils adaptés à différents langages de programmation. Dans cet exemple, nous utilisons la version Maven, car c’est celle utilisée par l’application exemple.

Pour configurer une étape Exécuter, consultez Paramètres de l’étape Exécuter et ajoutez votre jeton API Snyk.

Panneau de configuration facultatif affichant l’option « Privilégié » activée, des chemins de rapport facultatifs et une variable d’environnement dont la clé est SNYK_TOKEN.

Vous pouvez maintenant référencer cette variable d’environnement dans la section Commande de la configuration.

Panneau Configure Run Step de Snyk Pipeline Studio affichant une image Docker Snyk Test et des commandes permettant de définir le jeton API et d’exécuter snyk test.

Étape 6 : exécuter le pipeline

Vous pouvez maintenant exécuter votre pipeline.

1. Cliquez sur Enregistrer et publier.

2. Cliquez sur Exécuter. Les paramètres Entrées du pipeline s’affichent.

3. Dans Base de code CI, cliquez sur Branche Git.

4. Dans le champ Branche Git, saisissez le nom de la branche contenant la base de code, par exemple master.

Fenêtre de dialogue « Exécuter le pipeline » affichant les paramètres de la base de code CI, avec « Branche Git » sélectionné et la branche définie sur master.

5. Cliquez sur Exécuter le pipeline.

Étape 7 : consulter l’exécution du pipeline

Lorsque le workflow s’exécute, l’étape Snyk Test échoue, car le projet contient des dépendances vulnérables. Vous pouvez également activer Vue de la console pour consulter le rapport complet.

Remarque : Pour mieux contrôler vos tests, vous pouvez transmettre l’option severity-threshold à la commande snyk test avec l’une des valeurs prises en charge (low|medium|high|critical). Seules les vulnérabilités correspondant au niveau indiqué ou à un niveau supérieur seront alors signalées.

Pipeline Snyk Test marqué comme ayant échoué, affichant les étapes Initialize, Git clone et Snyk Test, ainsi qu’un journal d’erreur de vulnérabilité.

L’intégralité du pipeline est également disponible au format YAML. Dans Builds :

  1. Cliquez sur Plus d’options.

  2. Sélectionnez Modifier le pipeline.

  3. Cliquez sur YAML.

Interface de Pipeline Studio affichant les onglets Visual et Yaml, avec l’onglet Yaml sélectionné

Vous pouvez voir ci-dessous l’intégralité du pipeline au format YAML. Vous pouvez modifier n’importe quel élément du pipeline, puis le réexécuter.

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.

Workflow CI/CD

Outre l’analyse des dépendances des applications, le choix du conteneur utilisé peut également introduire des vulnérabilités. Par ailleurs, les erreurs de configuration des ressources cloud sont à l’origine de la plupart des vulnérabilités cloud exploitées pour accéder aux données et aux services du cloud.

Dans cet exemple, nous allons compiler et déployer notre application sur Kubernetes, puis la surveiller avec Snyk.

Pour compiler et envoyer un conteneur dans Harness, suivez simplement ces étapes. L’ajout d’une étape d’analyse Snyk Container est similaire à l’étape Snyk Test présentée ci-dessus.

Pour déployer le conteneur sur notre cluster Kubernetes, consultez la documentation Harness. Dans notre pipeline CD, nous allons exécuter le test Snyk sur notre manifeste Kubernetes avant le déploiement. Pour ajouter une étape snyk iac test, utilisez une étape Script Shell.

Configuration de Pipeline Studio Shell Script montrant un script Bash qui clone un dépôt et exécute des tests Snyk Infrastructure as Code

Voici le script exécuté à l’étape Snyk IaC :

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

Voici à quoi ressemble le workflow CI/CD complet :

Écran Snyk Pipelines montrant un pipeline réussi pour une API SpringBoot Employee, avec des étapes d’intégration continue, de déploiement en préproduction et de tests de sécurité.
Tableau de bord du pipeline Harness montrant le déploiement réussi de l’API SpringBoot Employee en préproduction, avec les étapes d’intégration continue et de déploiement

Comme précédemment, ce pipeline peut être affiché au format YAML. Il se trouve dans ce dépôt GitHub.

Snyk s’intègre à Kubernetes pour vous permettre d’importer et de tester vos workloads en cours d’exécution, et d’identifier les vulnérabilités dans les images et les configurations associées. Après leur importation, Snyk continue de surveiller ces workloads et détecte les nouveaux problèmes de sécurité à mesure que de nouvelles images sont déployées et que leur configuration évolue.

Un déploiement réussi via notre workflow CD Harness s’affiche comme suit dans l’interface Snyk :

Tableau de bord du projet répertoriant api/deployment.apps/snyk-employee-api, avec le nombre de vulnérabilités par niveau de gravité et les images de conteneur associées
Tableau de bord Snyk affichant des vulnérabilités dans un déploiement Kubernetes, des vérifications de configuration de sécurité ayant échoué et une injection XXE de gravité moyenne.

Essayez dès maintenant

Lorsque vous choisissez une plateforme technologique, il est important d’en sélectionner une qui place les besoins des développeurs au cœur de ses solutions. Elle doit également privilégier la correction des problèmes plutôt que leur simple signalement. Les plateformes qui privilégient les développeurs peuvent intégrer la sécurité à l’ensemble du pipeline et offrir une vision globale aux différentes parties prenantes, notamment aux équipes de développement, de sécurité et d’exploitation.Cela favorise une culture DevSecOps partagée et permet de proposer aux utilisateurs des logiciels plus sûrs.

Merci d’avoir suivi ce tutoriel. N’oubliez pas d’essayer Snyk et Harness dès aujourd’hui !

Sécurisez votre infrastructure dès la source

Snyk automatise la sécurité et la conformité de l’IaC dans vos workflows, et détecte les ressources dont la configuration a dérivé ou qui sont manquantes.

À propos des auteurs

Martin Ansong est ingénieur solutions au sein de l’organisation commerciale de Harness. Il aide les clients à accélérer la compilation et la livraison de leurs logiciels.

Pas Apicella est ingénieur solutions principal APJ chez Snyk. Il travaille sur la plateforme Snyk pour aider les clients à sécuriser leurs applications cloud natives et à instaurer une culture DevSecOps, tout en répondant aux besoins de l’entreprise.