Skip to main content

Dépendances Gradle : analyse avec le nouveau plugin Gradle de Snyk

Écrit par
Blog illustrations gradle feature

23 octobre 2020

0 minutes de lecture

Gradle est l’un des principaux systèmes de build, aussi bien dans l’écosystème Java que pour le développement Android. Il vous permet de gérer les dépendances, de compiler et de tester votre projet.

Il est important d’analyser les dépendances de votre projet pour détecter les vulnérabilités de sécurité connues. Le moment idéal pour commencer à les analyser, c’est dès que vous les importez ! C’est pourquoi nous avons créé un plugin Gradle qui vous permet désormais d’analyser votre application à la recherche de vulnérabilités de sécurité dans les bibliothèques tierces, dans le cadre de votre cycle de build.

Plugin Gradle de Snyk

Le plugin Gradle de Snyk est publié sur le portail des plugins Gradle ; vous pouvez donc facilement l’inclure dans votre projet Gradle.

Page du plugin Gradle pour io.snyk.gradle.plugin.snykplugin, présentant les détails de l’analyse des vulnérabilités par Snyk, la version 0.4 et les balises de sécurité

Pour l’utiliser, il vous suffit de déclarer le plugin à l’aide de la DSL plugins.

Groovy :

plugins {
  id "io.snyk.gradle.plugin.snykplugin" version "0.4"
}

Kotlin :

plugins {
  id("io.snyk.gradle.plugin.snykplugin") version "0.4"
}

Configuration

Pour utiliser le plugin, vous avez besoin d’un compte Snyk. Si vous n’en avez pas encore, vous pouvez en créer un ici. Ai-je précisé qu’un compte Snyk est entièrement gratuit ?

Vous pouvez définir votre clé API de plusieurs façons :

Vous pouvez la définir directement dans votre fichier Gradle, comme je vais vous le montrer ci-dessous. Toutefois, si votre projet est open source, par exemple, vous voudrez peut-être éviter que ce jeton soit exposé publiquement.

Vous pouvez également définir la variable d’environnement SNYK_TOKEN avec la clé API. C’est aussi la méthode recommandée si vous souhaitez utiliser l’analyse Snyk dans votre pipeline CI.

Configuration du plugin Snyk

Si vous avez défini la clé API comme variable d’environnement, vous pouvez utiliser le plugin immédiatement. Voyons néanmoins comment modifier certains de ses paramètres.

Ajoutez un objet d’extension snyk à votre fichier Gradle.

Groovy :

snyk {
    api = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
    severity = 'low'
    autoDownload = true
    autoUpdate = true
    arguments = '--all-sub-projects'
}

Kotlin :

configure<io.snyk.gradle.plugin.SnykExtension> {
   setApi("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
   setSeverity("high")
   setAutoDownload(true)
   setAutoUpdate(true)
   setArguments("--all-sub-projects")
}
  • apiIl s’agit de la clé API Snyk. Vous pouvez la définir ici ou omettre ce paramètre et définir la variable d’environnement SNYK_TOKEN avec la clé API.

  • severityIl s’agit du niveau de gravité à partir duquel vous souhaitez recevoir des alertes. Vous avez le choix entre faible, moyen et élevé. Toutes les vulnérabilités correspondant au niveau choisi ou à un niveau supérieur seront affichées et feront échouer votre build. Si vous omettez le paramètre de gravité, toutes les vulnérabilités détectées seront affichées, mais votre build ne sera pas interrompu.

  • autoDownloadSnyk utilise le binaire CLI pour effectuer l’analyse. Si vous avez installé la CLI séparément, par exemple avec npm, le plugin Gradle utilisera cette version. Si aucune CLI n’est détectée sur votre système, le plugin Gradle téléchargera automatiquement la dernière version. Cette propriété est définie sur true par défaut ; vous n’avez donc pas besoin de la préciser. Pour désactiver le téléchargement automatique, indiquez cette propriété et définissez-la sur false.

  • autoUpdateSi la CLI Snyk n’est pas préinstallée et que le plugin la télécharge automatiquement, elle peut également être mise à jour lorsqu’une version plus récente est disponible. Par défaut, cette propriété est définie sur false. Notez que autoUpdate ne fonctionne pas si vous avez déjà installé manuellement la CLI Snyk, par exemple avec npm.

  • argumentsLe plugin Gradle utilise la CLI Snyk en arrière-plan. Cette propriété vous permet d’ajouter des arguments à la CLI si nécessaire. Consultez la référence de la CLI pour en savoir plus sur les options disponibles. Conseil : si vous utilisez des sous-projets Gradle, définissez la propriété arguments sur --all-sub-projects, comme dans l’exemple ci-dessus. Tous les sous-projets Gradle seront ainsi analysés.

Exécuter le plugin Snyk

Le plugin Snyk met à votre disposition deux nouvelles tâches :

  • snyk-test

  • snyk-monitor

Vous pouvez ajouter chacune de ces tâches séparément ou les chaîner :

$ gradle snyk-test
$ gradle clean build snyk-test

Snyk test

La tâche Snyk test analyse vos dépendances et vérifie si des vulnérabilités connues affectent les dépendances directes et transitives. Si des vulnérabilités correspondant au niveau de gravité choisi ou à un niveau supérieur sont détectées, elles s’affichent dans la console et le build échoue.

Si vous souhaitez recevoir des alertes concernant les dépendances sans faire échouer votre build, omettez le paramètre de gravité dans votre configuration.

Terminal affichant l’échec d’une tâche de test Gradle et un rapport de vulnérabilités des dépendances signalant un chemin vulnérable.

Snyk monitor

Snyk monitor collecte également toutes vos dépendances de la même manière que la tâche snyk-test. Toutefois, il enregistre un instantané de leur état dans votre compte Snyk et en assure la surveillance. Vous recevez automatiquement des notifications lorsque de nouvelles vulnérabilités sont découvertes ou que des vulnérabilités sont corrigées. C’est idéal lorsqu’une version est mise en production et que vous souhaitez continuer à la surveiller. Snyk monitor NE fait PAS échouer votre build : il assure uniquement la surveillance.

Chaînage

Vous pouvez chaîner les nouvelles tâches Snyk à d’autres tâches existantes afin d’automatiser vos analyses. Dans l’exemple suivant, je relie la tâche snyk-test à la tâche test habituelle dans le fichier Gradle.

Groovy :

test.finalizedBy('snyk-test')

Kotlin :

tasks.test {
   finalizedBy(tasks.`snyk-test`)
}

Désormais, chaque fois que la commande gradle test est exécutée, la tâche snyk-test s’exécute après les tests habituels. Cela signifie également que la tâche snyk-test est appelée chaque fois que l’application est (re)compilée. Selon votre contexte, cette stratégie peut vous aider à imposer les tests et la surveillance des vulnérabilités.


Gradle Tutorial - How to use the Snyk plugin for Gradle