Skip to main content

Automatiser la sécurité des applications pour les dépôts GitHub avec Snyk

Snyk API

31 mars 2021

0 minutes de lecture

Snyk 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 :

import {Octokit} from '@octokit/rest';
import { paginateRest } from '@octokit/plugin-paginate-rest'
import * as fs from 'fs/promises'
const MyOctokit = Octokit.plugin(paginateRest);
const octokit = new MyOctokit({
 auth: process.env['GITHUB_TOKEN']
}) as Octokit;

(async () => {

 let response = await octokit.paginate("GET /orgs/{org}/repos", {
   Org: <your GitHub org>
 }, res =>
   res.data.filter(repo => !repo.fork && !repo.archived).map(repo => {
     return {
       orgId: <>,
       integrationId: <>,
       target: {
         name: repo.name,
         owner: <Your GitHUb Org>,
         branch: repo.default_branch ?? "master"
       }
   }})
 )

 console.log(`found: ${response.length} potential targets`)

 await fs.writeFile('targets.json', JSON.stringify({
   targets: response
 }))
})().catch(e => {
 console.error(e)
})

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

Workflow build_and_push de CircleCI montrant un pipeline réussi, avec les tâches terminées et leur durée

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.

Lire la suite

feature insights context
Blog

Les attaques autonomes sont déjà là. La défense doit suivre leur rythme.

Les attaquants autonomes réduisent la fenêtre de défense. Découvrez comment la découverte, la correction, la validation et la prévention continues peuvent aider les équipes de sécurité à suivre le rythme.

Blog

Pourquoi les agents de codage IA créent-ils sans cesse des failles de contrôle d’accès ?

Les agents de codage IA peuvent générer une logique d’autorisation qui compile et passe la revue, tout en exposant les données d’un tenant à un autre. Découvrez pourquoi les failles de contrôle d’accès sont difficiles à détecter et comment les prévenir.

Blog

Evo ADS : la gouvernance des comportements des agents est disponible : maîtrisez l’utilisation de MCP

La gouvernance des comportements des agents Evo ADS est désormais disponible, avec MCP Governance en première étape. Découvrez, approuvez, surveillez, consignez et bloquez l’utilisation des serveurs MCP par les principaux agents de programmation IA.