Automatiser la sécurité des applications pour les dépôts GitHub avec Snyk
31 mars 2021
0 minutes de lectureSnyk propose un large éventail d’intégrations et une API complète pour vous permettre de déployer Snyk tout au long du cycle de vie du développement logiciel (SDLC) et de surveiller l’ensemble du code développé par votre organisation.
Bien sûr, ce n’est pas toujours simple.
À grande échelle, il devient plus difficile de s’assurer que Snyk surveille tous vos dépôts. À mesure que votre organisation se développe, de nouveaux dépôts viennent s’ajouter au code. Et les dépôts existants continuent d’évoluer. Les opérations de gestion de la sécurité, comme l’ajout de nouveaux projets dans Snyk et la mise à jour des projets existants, finissent alors par prendre trop de temps et deviennent inefficaces.
L’équipe AppSec de Snyk utilise elle aussi Snyk avec enthousiasme et a donc rencontré le même obstacle. Nous avons exploré d’autres méthodes de travail, notamment pour automatiser la sécurité des applications, et résolu rapidement nos problèmes de mise à l’échelle grâce à des outils basés sur l’API Snyk, conçus par l’équipe Tech Services.
Regardons cela de plus près.
1. Récupérer les données de GitHub
Le premier outil que je vais vous présenter est snyk-api-import. Extrêmement puissant, il permet d’importer automatiquement de nouveaux dépôts dans Snyk en tant que projets. Il utilise l’API Snyk pour importer automatiquement les dépôts à un rythme maîtrisé et régulier, grâce à l’importation par lots, à la gestion des erreurs et aux nouvelles tentatives automatiques.
L’outil lit une liste de cibles et les importe dans Snyk. Il utilise ensuite l’API pour vérifier l’état de l’importation.
Pour utiliser cet outil, nous devons d’abord générer une liste de cibles à importer. Chaque cible se compose de trois paramètres :
L’identifiant de l’organisation : l’organisation Snyk dans laquelle importer les cibles
L’identifiant de l’intégration : le type d’intégration à utiliser (GitHub, Bitbucket, Docker, etc.)
Les détails de la cible : dans le cas de GitHub, il s’agit du nom du dépôt, de son propriétaire et de la branche à analyser (pour en savoir plus sur les paramètres supplémentaires, consultez la documentation)
Nous devons donc écrire du code pour récupérer tous nos dépôts GitHub et générer une cible pour chacun d’eux. Résultat : quelques lignes de code :
Ce qui rend cet extrait particulièrement puissant, c’est sa grande flexibilité : vous pouvez choisir dans quelle organisation placer chaque dépôt (selon les règles de votre groupe), quels dépôts ignorer, etc. Et tout cela en quelques lignes de code seulement !
Nous pouvons maintenant lancer snyk-api-import. Selon le nombre de dépôts, l’opération peut prendre un certain temps, mais une fois terminée, tout votre code sera couvert par Snyk !
2. Suivre les changements
Nous avons effectué une importation ponctuelle, mais comment faire pour que nos dépôts restent surveillés en continu ? Nous pourrions exécuter le même outil tous les jours, mais cela prendrait trop de temps et serait plutôt inefficace.
Heureusement, snyk-api-import propose une solution : il peut générer la liste de tous les projets importés. Lors de son exécution suivante, il n’importera que les différences, ce qui prend beaucoup moins de temps (généralement quelques minutes, selon le nombre de dépôts ajoutés).
3. Actualiser les projets existants
Mais les changements ne concernent pas uniquement les nouveaux dépôts. Les dépôts existants évoluent fréquemment. Des fichiers manifest peuvent être ajoutés, supprimés ou simplement déplacés d’un dépôt à un autre. Ces changements doivent également être répercutés dans les projets correspondants gérés par Snyk.
C’est là qu’un autre outil s’avère utile : snyk-scm-refresh.
Cet outil a été conçu pour garantir la synchronisation de tous les projets dans Snyk avec les dépôts correspondants sur GitHub. Il détecte les nouveaux fichiers manifest, supprime les projets associés aux fichiers qui n’existent plus, met à jour les projets lorsqu’un dépôt est renommé et détecte les dépôts supprimés. Pratique !
4. Automatiser l’ensemble du processus de bout en bout avec CircleCI
Pour utiliser ces outils, nous avons créé une tâche CircleCI très simple qui s’exécute chaque nuit et effectue les opérations suivantes :
Générer toutes les cibles à partir de GitHub
Exécuter les outils d’importation pour générer la liste des projets déjà importés
Exécuter l’outil d’importation pour synchroniser les nouveaux dépôts
Exécuter l’outil scm refresh pour synchroniser les dépôts existants

Le prochain défi que nous comptons relever : le registre de conteneurs. Un problème similaire, mais un peu plus complexe !
La puissance de l’automatisation
Une API robuste est essentielle pour adapter les outils de sécurité aux besoins spécifiques de votre organisation. Dans notre cas, l’API Snyk nous a permis d’ajouter une automatisation pour relever un défi complexe : nous assurer que tous nos dépôts de code étaient bien couverts par Snyk. L’automatisation de l’importation et de la mise à jour des projets a non seulement garanti cette couverture de sécurité, mais nous a aussi fait gagner du temps en réduisant les étapes manuelles.
Mais surtout, l’API nous a aidés à intégrer Snyk à nos méthodes de travail existantes. Cette flexibilité nous a fait gagner un temps précieux, que nous aurions autrement consacré à trouver une solution de contournement plus complexe et plus gourmande en ressources.



