Aperçu
[!TIP] Vous utilisez Azure DevOps ? Consultez le Lab 06-ADO — Sortie SARIF et ADO Advanced Security pour la variante ADO de ce lab.
Objectifs d’apprentissage
À la fin de ce lab, vous serez capable de :
- Expliquer le schéma SARIF v2.1.0 incluant les sections runs, tool, rules, results et locations
- Téléverser des résultats SARIF vers GitHub Code Scanning via l’API REST
- Naviguer dans l’onglet Sécurité GitHub pour visualiser les alertes FinOps
- Filtrer, trier et rejeter les alertes dans l’onglet Sécurité
Exercices
Exercice 6.1 : Exploration approfondie du schéma SARIF
Vous allez examiner le format SARIF v2.1.0 que les quatre outils d’analyse produisent.
-
Ouvrez n’importe quel fichier SARIF que vous avez généré dans un lab précédent (par exemple,
reports/psrule-001.sarifoureports/custodian.sarif). -
Examinez la structure de haut niveau. Chaque fichier SARIF suit ce schéma :
{ "version": "2.1.0", "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json", "runs": [ { "tool": { "driver": { "name": "CloudCustodian", "version": "1.0.0", "informationUri": "https://cloudcustodian.io", "rules": [ { "id": "check-required-tags", "name": "check-required-tags", "shortDescription": { "text": "Cloud Custodian policy violation" }, "defaultConfiguration": { "level": "warning" } } ] } }, "results": [ { "ruleId": "check-required-tags", "level": "warning", "message": { "text": "Resource rg-finops-demo-001 violates policy check-required-tags" }, "locations": [ { "physicalLocation": { "artifactLocation": { "uri": "infra/main.bicep" }, "region": { "startLine": 1 } } } ] } ] } ] } -
Comprenez les quatre sections principales :
Section Objectif version/$schemaDéclare la conformité SARIF v2.1.0 runs[].tool.driverIdentifie l’outil d’analyse, la version et les définitions de règles runs[].tool.driver.rules[]Définit les identifiants de règles, les descriptions, la sévérité et les URL d’aide runs[].results[]Contient les résultats individuels avec l’identifiant de règle, la sévérité, le message et l’emplacement -
Notez comment
physicalLocationlie un résultat à un fichier et un numéro de ligne spécifiques. GitHub Code Scanning utilise cela pour annoter les fichiers source dans les pull requests.

[!TIP] SARIF (Static Analysis Results Interchange Format) est un standard OASIS. GitHub, Azure DevOps et de nombreuses extensions d’IDE peuvent consommer des fichiers SARIF. En produisant du SARIF à partir des 4 outils, vous obtenez une vue unifiée des violations FinOps sur l’ensemble de votre plateforme d’analyse.
Exercice 6.2 : Téléverser manuellement un SARIF
Vous allez téléverser un fichier SARIF vers l’API GitHub Code Scanning en utilisant GitHub CLI.
-
Choisissez un fichier SARIF d’un lab précédent. Cet exemple utilise la sortie PSRule pour l’application 001 :
SARIF_FILE="reports/psrule-001.sarif" -
Compressez et encodez en base64 le fichier SARIF (requis par l’API) :
cat $SARIF_FILE | gzip | base64 > /tmp/sarif-base64.txtSous Windows PowerShell :
$bytes = [System.IO.File]::ReadAllBytes("reports/psrule-001.sarif") $ms = New-Object System.IO.MemoryStream $gz = New-Object System.IO.Compression.GZipStream($ms, [System.IO.Compression.CompressionMode]::Compress) $gz.Write($bytes, 0, $bytes.Length) $gz.Close() $encoded = [Convert]::ToBase64String($ms.ToArray()) $encoded | Out-File /tmp/sarif-base64.txt -NoNewline -
Téléversez vers le point de terminaison Code Scanning :
gh api -X POST /repos/{owner}/{repo}/code-scanning/sarifs \ -f "commit_sha=$(git rev-parse HEAD)" \ -f "ref=refs/heads/main" \ -f "sarif=$(cat /tmp/sarif-base64.txt)" \ -f "tool_name=PSRule"Remplacez
{owner}et{repo}par le propriétaire et le nom de votre fork. -
L’API retourne une réponse avec un champ
url. Vous pouvez interroger cette URL pour vérifier le statut du traitement :gh api /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id} -
Le traitement prend quelques secondes. Une fois terminé, les résultats apparaissent dans l’onglet Sécurité.

[!IMPORTANT] L’API Code Scanning nécessite que le dépôt ait GitHub Advanced Security activé. Si vous recevez une erreur 403, vérifiez que GHAS est activé dans les paramètres de votre dépôt sous Settings → Code security and analysis.
Exercice 6.3 : Visualiser l’onglet Sécurité
Vous allez naviguer vers l’onglet Sécurité GitHub pour visualiser les alertes FinOps téléversées.
-
Ouvrez votre dépôt sur GitHub.
-
Cliquez sur l’onglet Security dans la barre de navigation supérieure.
-
Cliquez sur Code scanning dans la barre latérale gauche.
- Vous devriez voir les alertes du fichier SARIF que vous avez téléversé. Chaque alerte affiche :
- Rule ID — l’identifiant de règle spécifique à l’outil d’analyse
- Severity — error, warning ou note
- File — le fichier source où la violation a été détectée
- Tool — l’outil d’analyse qui a produit le résultat (PSRule, Checkov, Cloud Custodian ou Infracost)
- Cliquez sur une alerte individuelle pour voir la vue détaillée :
- La description du résultat et les conseils de remédiation
- L’emplacement dans le code source mis en surbrillance
- Les métadonnées de la règle SARIF

[!NOTE] Si vous avez téléversé des SARIF provenant de plusieurs outils, utilisez le filtre Tool pour voir les résultats d’un outil spécifique. Cela facilite le tri lorsque vous souhaitez vous concentrer sur une catégorie de violations à la fois.
Exercice 6.4 : Trier les alertes
Vous allez pratiquer le workflow de tri pour les alertes FinOps.
-
Dans la liste des alertes Code Scanning, cliquez sur n’importe quelle alerte.
- Utilisez le menu déroulant Dismiss alert pour explorer les options de tri :
- False positive — l’alerte ne s’applique pas à cette ressource
- Won’t fix — reconnu mais ne vaut pas la peine d’être corrigé
- Used in tests — la violation est intentionnelle à des fins de test
-
Rejetez une alerte comme Used in tests (puisque ces applications de démonstration sont intentionnellement mal configurées).
- Utilisez les contrôles de filtre pour affiner la liste des alertes :
- Filtrer par Tool — afficher uniquement les résultats PSRule, Checkov ou Cloud Custodian
- Filtrer par Severity — afficher uniquement les erreurs, avertissements ou notes
- Filtrer par State — afficher les alertes ouvertes, rejetées ou corrigées
- Marquez une alerte comme Closed pour simuler un workflow de remédiation. En pratique, vous corrigeriez le template Bicep et relanceriez l’analyse pour confirmer la résolution de l’alerte.

[!TIP] Dans un programme FinOps en production, assignez le tri des alertes à des membres d’équipe spécifiques. Utilisez les webhooks de l’API GitHub Code Scanning pour créer des notifications automatiques lorsque de nouvelles alertes FinOps de haute sévérité apparaissent.
Exercice 6.5 : Téléversement inter-dépôts
Vous allez comprendre comment le pipeline automatisé téléverse les SARIF vers le dépôt de chaque application de démonstration.
-
Ouvrez
.github/workflows/finops-scan.ymlet trouvez le jobcross-repo-upload. -
Examinez la configuration du job :
cross-repo-upload: needs: [psrule-scan, checkov-scan, custodian-scan] if: always() && (needs.psrule-scan.result == 'success' || needs.checkov-scan.result == 'success') runs-on: ubuntu-latest strategy: matrix: app: ['001', '002', '003', '004', '005']Le job s’exécute après que les trois jobs d’analyse sont terminés et utilise une matrice pour traiter chaque application de démonstration.
- Comprenez les étapes de téléversement :
- Download artifacts — récupère tous les fichiers SARIF pour l’application courante en utilisant
actions/download-artifact@v4avec une correspondance par motif - Upload SARIF — itère sur chaque fichier SARIF et le POSTe vers le point de terminaison Code Scanning du dépôt cible
- Download artifacts — récupère tous les fichiers SARIF pour l’application courante en utilisant
-
Le script de téléversement compresse chaque fichier SARIF, recherche le dernier SHA de commit sur la branche
maindu dépôt cible, et appelle l’API Code Scanning — les mêmes étapes que vous avez effectuées manuellement dans l’Exercice 6.2 :SARIF_CONTENT=$(gzip -c "$sarif_file" | base64 -w0) COMMIT_SHA=$(gh api repos/{org}/finops-demo-app-{app}/commits/main --jq '.sha') gh api --method POST \ repos/{org}/finops-demo-app-{app}/code-scanning/sarifs \ -f "commit_sha=$COMMIT_SHA" \ -f "ref=refs/heads/main" \ -f "sarif=$SARIF_CONTENT" - Ce modèle pousse les résultats d’analyse depuis un dépôt d’analyse centralisé vers chaque dépôt d’application individuel, pour que les équipes voient les alertes FinOps directement dans leur propre onglet Sécurité.

[!NOTE] Le téléversement inter-dépôts nécessite un secret
ORG_ADMIN_TOKENavec la permissionsecurity_events: writesur tous les dépôts cibles. Le scriptsetup-oidc.ps1du Lab 07 ne couvre pas ce jeton — il doit être créé comme un jeton d’accès personnel GitHub ou un jeton à granularité fine.
Point de vérification
Avant de continuer, vérifiez :
- Pouvez décrire les 4 sections principales du SARIF (schema, runs, tool/rules, results)
- Avez téléversé avec succès un fichier SARIF via
gh api - Avez visualisé les alertes FinOps dans l’onglet Sécurité GitHub
- Avez trié au moins 1 alerte (rejetée ou marquée comme corrigée)
Étapes suivantes
Passez au Lab 07 — Pipelines GitHub Actions et contrôles de coûts.