Skip to content

Cet outil n'est ni affilié à GitHub, Inc. ou à Microsoft Corporation, ni approuvé ou sponsorisé par elles. GitHub et GitHub Actions sont des marques de GitHub, Inc. Les autres noms sont des marques de leurs propriétaires respectifs.

Exporter le journal d'audit GitHub (UI, API, streaming)

Exporter le journal d'audit GitHub pour l'investigation : JSON/CSV de l'UI, API REST include=all, streaming, événements Git et logs Actions, et leurs limites.

Publié le 7 min de lecture

En bref. Pour avoir des preuves complètes, il faut plusieurs sources, pas une seule : l'export de l'interface (JSON, toutes les offres), l'API REST avec include=all (Enterprise Cloud, seule façon d'obtenir les événements Git par organisation), les fichiers de streaming si vous en avez, l'export des événements Git (entreprise, conservation de 7 jours) et les archives de logs Actions des exécutions suspectes. Récupérez les événements Git en premier. Tous les formats ci-dessous peuvent être déposés tels quels dans l'analyseur dans le navigateur.

Ce guide couvre le côté pratique de chaque source : où cliquer, à quoi ressemble le fichier, quelle offre GitHub il faut et ce qu'il ne contient pas. Pour la suite, voir l'analyse du journal d'audit GitHub pas à pas.

Quelle source pour quelle question

SourceOffreContenuConservationFormat
Journal d'audit de l'organisation, export de l'interface webToutes les organisationsParamètres, membres, dépôts, workflows, métadonnées des secrets180 joursTableau JSON ou CSV
REST GET /orgs/{org}/audit-logEnterprise CloudLa même chose, plus les événements Git avec include=all180 jours (événements Git : 7)Pages JSON
Export du journal d'audit de l'entrepriseEnterprise CloudToutes les organisations de l'entreprise180 joursJSON ou CSV
« Export Git Events » de l'entrepriseEnterprise Cloudgit.clone / git.fetch / git.push7 joursLignes JSON compressées en gzip
Streaming du journal d'auditEnterprise CloudÉvénements d'audit et Git, en continuCelle de votre bucketFichiers .json.log.gz
« Download log archive » d'ActionsToutesSortie de chaque étape d'une exécution90 jours par défautZIP de fichiers texte
API des alertes de secret scanningLà où le secret scanning est activéSecrets fuités trouvés dans le codeJusqu'à clôtureJSON

Les conditions d'offre viennent de la documentation GitHub : la page organisation indique que l'API du journal d'audit exige GitHub Enterprise Cloud. Sur GitHub Free ou Team, l'export de l'interface est votre source principale.

1. Journal d'audit de l'organisation depuis l'interface web

  1. Ouvrez les paramètres de l'organisation : Settings → Archive → Logs → Audit log. Seuls les propriétaires y ont accès.
  2. Filtrez d'abord. Le champ de recherche accepte created:>=2026-09-01, actor:, action:, repo: et country:.
  3. Cliquez sur Export et choisissez JSON. Le CSV fonctionne aussi, mais le JSON conserve les champs imbriqués comme actor_location.country_code.

GitHub plafonne chaque export à 100 Mo compressés ou 10 minutes de traitement. Pour une longue période, exportez semaine par semaine. Les doublons entre tranches qui se chevauchent ne posent pas de problème à l'analyseur, qui déduplique sur _document_id.

Activez d'abord l'affichage des adresses IP. Par défaut, GitHub n'affiche pas l'IP source des événements. Un propriétaire peut activer l'affichage des adresses IP. Le réglage s'applique aux nouveaux événements et aux événements existants : l'activer en plein incident reste utile. Sans lui, actor_ip est absent et les détections de nouvelle IP et de nouveau pays ne peuvent pas se déclencher. Dans beaucoup de juridictions, les adresses IP sont des données personnelles : vérifiez vos obligations avant de les stocker.

2. API REST (Enterprise Cloud)

Le point d'accès de l'organisation est documenté dans la référence REST. Il faut être propriétaire, et un jeton classique doit avoir le scope read:audit_log.

curl -sSL -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/vnd.github+json" \
  "https://api.github.com/orgs/ORG/audit-log?include=all&per_page=100&phrase=created:%3E%3D2026-08-01" \
  -o page-001.json

Trois détails piègent souvent :

  • include vaut web par défaut. Utilisez include=all pour obtenir aussi les événements Git, ou include=git pour n'avoir qu'eux.
  • Sans paramètre phrase contenant un qualificatif created, l'API ne renvoie que les trois derniers mois.
  • Suivez l'en-tête Link: rel="next" jusqu'à ce qu'il disparaisse. Le point d'accès autorise 1 750 requêtes par heure par utilisateur et par adresse IP.

Enregistrez chaque page dans son propre fichier, ou concaténez-les. L'analyseur accepte les tableaux, les tableaux concaténés et les lignes JSON.

3. Export des événements Git (entreprise)

Les propriétaires d'entreprise disposent d'un menu Export Git Events distinct dans le journal d'audit de l'entreprise. Choisissez la période et téléchargez le résultat. GitHub le décrit sur la page d'export de l'entreprise. Le fichier contient des lignes JSON compressées, nommé du type export-<enterprise>-<timestamp>.json.gz, et il n'est pas nécessaire de le décompresser.

Deux limites comptent en investigation :

  • La conservation est de sept jours. Exportez le jour même où vous ouvrez l'incident.
  • Les opérations faites par le web ou l'API sont exclues. Une pull request fusionnée dans le navigateur pousse sur la branche de base, mais ce push n'apparaît pas comme événement Git. L'absence de git.push ne prouve donc pas l'absence de modification.

Comme le journal d'audit peut inclure des données de jeton pour les événements Git, les lignes git.clone peuvent porter un hashed_token. Regrouper sur ce champ permet de distinguer le développeur de quelqu'un qui rejoue son jeton.

4. Streaming du journal d'audit

Si votre entreprise diffuse son journal d'audit en streaming, vous avez déjà la source la plus complète : elle contient les événements d'audit et les événements Git de toutes les organisations, et votre stockage les garde aussi longtemps que vous le décidez. Les destinations prises en charge sont Amazon S3, Azure Blob Storage, Azure Event Hubs, Datadog, Google Cloud Storage et Splunk. Le stockage objet utilise l'arborescence YYYY/MM/DD/HH/MM/<uuid>.json.log.gz.

Téléchargez les dossiers qui couvrent la fenêtre et déposez l'arborescence entière, ou un ZIP de celle-ci. Chaque .json.log.gz est décompressé à la volée. Vérifiez aussi si quelqu'un a modifié le flux : un audit_log_streaming.destroy ou .update pendant l'incident est un constat à part entière (voir la prise de contrôle d'organisation). L'entrée de glossaire sur le streaming explique comment GitHub met les événements en tampon quand un flux est en pause.

5. Archives de logs des exécutions Actions

Pour chaque exécution suspecte : dépôt → Actions → l'exécution → ⋯ → Download log archive. Vous obtenez un ZIP qui contient le log combiné de chaque job et un dossier avec un fichier par étape. Toute personne ayant un accès en lecture peut le télécharger.

Faites-le tôt. Les logs suivent la politique de conservation (90 jours par défaut) et toute personne ayant un accès en écriture peut les supprimer. Si une exécution a été partiellement relancée, l'archive ne contient que les jobs relancés : téléchargez aussi les tentatives précédentes.

6. Alertes de secret scanning

GET /orgs/{org}/secret-scanning/alerts renvoie les alertes en JSON (voir la référence REST). Déposez ce fichier à côté du journal d'audit. Quand une alerte concerne un identifiant AWS, Google Cloud ou Azure, l'outil affiche l'étape suivante côté cloud. L'article sur le rebond vers le cloud explique pourquoi c'est important.

Chaîne de conservation, en bref

Notez qui a exporté quoi, quand, avec quel filtre. Calculez un SHA-256 de chaque fichier et gardez les originaux en lecture seule. Travaillez sur des copies. Rien de tout cela n'est propre à GitHub, mais avec la courte conservation des événements Git, vous n'aurez pas de seconde chance pour le même export.

FAQ

Pourquoi git.clone n'apparaît-il pas dans mon export du journal d'audit ?

L'export de l'interface web n'inclut pas les événements Git. On les obtient par l'API REST avec include=git ou include=all, par le menu Export Git Events de l'entreprise ou par le streaming du journal d'audit, qui exigent tous GitHub Enterprise Cloud. Les événements Git sont conservés sept jours.

Les exports du journal d'audit ont-ils une taille maximale ?

Oui. GitHub interrompt un export à 100 Mo compressés ou après 10 minutes de traitement. Filtrez par date avec le qualificatif created et exportez en plusieurs tranches, ou passez par l'API ou le streaming pour les gros volumes.

À lire aussi

Articles liés

Analyser hors ligne un export du journal d'audit GitHub : déposer JSON, événements Git et logs Actions, lire le verdict, trier les constats, pivoter, exporter.
Ce que le journal d'audit GitHub n'enregistre pas : rétention de 180 et 7 jours, API et événements Git selon l'offre, IP masquées, ni contenus ni secrets lus.
Attaque supply chain GitHub fictive analysée de bout en bout : PAT volé, 38 dépôts clonés, clés AWS affichées par un workflow, protection de branche retirée.

Cet outil n'est ni affilié à GitHub, Inc. ou à Microsoft Corporation, ni approuvé ou sponsorisé par elles. GitHub et GitHub Actions sont des marques de GitHub, Inc. Les autres noms sont des marques de leurs propriétaires respectifs.