Aller au contenu

Guide

Export SARIF et intégration avec GitHub code scanning

Exportez un audit vetkit au format SARIF 2.1.0, faites correspondre le rapport au commit du dépôt et envoyez-le depuis votre workflow GitHub Actions.

· 5 min de lecture · Par l’équipe vetkit

Un robot insère des feuilles de papier disparates dans une machine qui les transforme en une pile bien rangée de rapports identiques pour un développeur.Un robot insère des feuilles de papier disparates dans une machine qui les transforme en une pile bien rangée de rapports identiques pour un développeur.

Exportez un audit vetkit terminé via son endpoint de rapport avec format=sarif, puis envoyez le fichier SARIF 2.1.0 depuis votre workflow GitHub Actions. Faites correspondre l’audit au dépôt et au commit analysés avant l’envoi. Télécharger le rapport ne publie pas d’alertes sur GitHub à lui seul : l’envoi est une étape distincte, que vous configurez.

1. Vérifier les prérequis

  • Munissez-vous de l’identifiant de l’organisation, de l’identifiant de l’audit et d’une clé d’API vetkit disposant du scope reports:read. Un workflow automatisé qui lance et interroge aussi des audits a besoin de audits:write et audits:read.
  • Vérifiez le dépôt et le SHA du commit de l’audit. En CI, demandez ou réutilisez un audit portant sur le commit exact du workflow et attendez qu’il soit terminé avant d’exporter.
  • Examinez le rapport JSON pour repérer d’éventuels résultats partiels et le périmètre réel du scan. Un document SARIF valide peut tout de même refléter une analyse incomplète.

GitHub prend en charge le code scanning pour les dépôts publics et pour les dépôts d’organisation éligibles sur lesquels GitHub Code Security est activé. Vérifiez l’éligibilité de votre dépôt et les droits en écriture dans la documentation de GitHub sur l’envoi de fichiers SARIF.

2. Exporter l’audit

Définissez les variables ci-dessous dans votre shell local ou votre environnement de CI. VETKIT_API_URL est l’origine de votre API vetkit, sans /v1. Stockez la clé dans un gestionnaire de secrets ou un secret de CI, et non dans le fichier de workflow, le dépôt ou un script shell. Cette commande nécessite curl et jq :

Télécharger le SARIF d’un audit existant
set -euo pipefail: "${VETKIT_API_URL:?Set the API origin}": "${VETKIT_ORG_ID:?Set the organization ID}": "${VETKIT_AUDIT_ID:?Set the completed audit ID}": "${VETKIT_API_KEY:?Set a reports:read key}" curl --fail-with-body --silent --show-error --max-time 30 \  "$VETKIT_API_URL/v1/orgs/$VETKIT_ORG_ID/audits/$VETKIT_AUDIT_ID/report?format=sarif" \  -H "Authorization: Bearer $VETKIT_API_KEY" \  -o vetkit.sarifjq -e '.version == "2.1.0" and (.runs | type == "array")' vetkit.sarif >/dev/null

L’endpoint renvoie du application/sarif+json avec un nom de fichier en pièce jointe fondé sur le commit audité. La commande l’enregistre volontairement sous vetkit.sarif pour l’étape d’envoi. Le contrôle jq est une vérification de format élémentaire, pas une validation complète du schéma ni une confirmation que le scan est complet. Traitez le rapport téléchargé comme une information sur le dépôt et contrôlez qui y a accès.

3. Envoyer depuis votre workflow

Dans un workflow du dépôt scanné, faites un checkout du code source correspondant, récupérez l’audit terminé et exécutez la commande de téléchargement ci-dessus. Gardez VETKIT_API_KEY dans un secret Actions. Le fragment suivant montre les permissions et l’étape finale d’envoi ; ce n’est pas un workflow de scan autonome. Ajoutez le téléchargement entre le checkout et l’envoi :

Fragment GitHub Actions pour l’envoi
permissions:  contents: read  actions: read  security-events: write # Inside the job's steps, after choosing the matching audit:steps:  - uses: actions/checkout@v6    with:      persist-credentials: false  # Insert the authenticated download step here.  - name: Upload vetkit results    uses: github/codeql-action/upload-sarif@v4    with:      sarif_file: vetkit.sarif      category: vetkit

L’action d’envoi de GitHub utilise sarif_file pour le chemin du rapport et category pour distinguer les analyses. Réutiliser un même couple outil/catégorie pour le même commit peut remplacer les résultats précédents ; utilisez des catégories distinctes pour des analyses distinctes. Les permissions et les versions d’actions ci-dessus suivent l’exemple de GitHub.

L’exemple d’intégration de dépôt de vetkit conditionne l’envoi SARIF, facultatif, à VETKIT_UPLOAD_SARIF=true. Son workflow de scan complet demande un audit sur le commit exact et rejette les résultats en échec, partiels ou sans score avant l’envoi facultatif. Ce contrôle d’achèvement n’impose aucun seuil de sévérité des résultats ni de score : définissez votre politique de release séparément. Les checks de la GitHub App et l’envoi SARIF sont deux voies d’intégration distinctes.

4. Interpréter les résultats importés

vetkit exporte un seul run SARIF avec vetkit comme driver. Les résultats comprennent les identifiants de règles, les emplacements dans les fichiers lorsqu’ils sont disponibles, le texte de correction et les empreintes vetkit. Les versions des analyseurs sont enregistrées sous forme d’extensions, et la provenance dépôt/commit est incluse. La correspondance des sévérités utilise les niveaux SARIF en plus des propriétés de sévérité de vetkit ; ces correspondances numériques ne sont pas des scores CVSS calculés indépendamment.

Les résultats au niveau du dépôt utilisent un emplacement synthétique (repository) et peuvent donc ne pas pointer vers une vraie ligne de code. Les résultats masqués restent dans l’export, avec les métadonnées de suppression SARIF. Ne partez pas du principe que le nombre de résultats exportés est égal au nombre d’alertes actives affichées par GitHub. Conservez le rapport vetkit d’origine pour la couverture, le contexte du score et les détails de revue.

Dépannage

  • Le téléchargement échoue : vérifiez l’origine de l’API, les identifiants de l’organisation et de l’audit, la validité de la clé et le scope reports:read. N’affichez pas la clé pendant le débogage.
  • Emplacements erronés dans le code : comparez le commit de l’audit avec le commit et le checkout du workflow. N’envoyez pas un ancien rapport comme preuve pour une révision plus récente.
  • L’envoi est rejeté : vérifiez l’éligibilité GitHub, les permissions du workflow et la sortie d’erreur de l’action d’envoi. GitHub applique ses propres propriétés SARIF prises en charge et ses propres limites de taille.
  • Aucune alerte visible : examinez les résultats du fichier, les métadonnées de suppression, l’analyse sélectionnée et la couverture de l’audit d’origine. Un transfert réussi ne prouve pas que le scan est vierge.

Sources et limites

Vérifié le 1er novembre 2026 par rapport au contrôleur et au service de rapports de vetkit, à son sérialiseur SARIF et à l’exemple d’intégration GitHub Actions du dépôt. Consultez la référence de l’API et les exigences d’envoi de GitHub pour les deux côtés de l’intégration. L’éligibilité GitHub et le comportement des actions peuvent évoluer. L’export SARIF transfère des résultats existants ; il n’exécute pas CodeQL, n’ajoute pas de contrôles à l’audit d’origine et ne garantit pas que chaque détail du rapport vetkit apparaisse dans l’interface de GitHub.

Demander un accès anticipé

Parlez-nous de votre équipe et des dépôts que vous souhaitez auditer. Nous ouvrons l’accès par petits groupes et vous répondrons par e-mail.

Nous utilisons ces informations uniquement pour répondre à votre demande. Politique de confidentialité