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.
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
| Source | Offre | Contenu | Conservation | Format |
|---|---|---|---|---|
| Journal d'audit de l'organisation, export de l'interface web | Toutes les organisations | Paramètres, membres, dépôts, workflows, métadonnées des secrets | 180 jours | Tableau JSON ou CSV |
REST GET /orgs/{org}/audit-log | Enterprise Cloud | La même chose, plus les événements Git avec include=all | 180 jours (événements Git : 7) | Pages JSON |
| Export du journal d'audit de l'entreprise | Enterprise Cloud | Toutes les organisations de l'entreprise | 180 jours | JSON ou CSV |
| « Export Git Events » de l'entreprise | Enterprise Cloud | git.clone / git.fetch / git.push | 7 jours | Lignes JSON compressées en gzip |
| Streaming du journal d'audit | Enterprise Cloud | Événements d'audit et Git, en continu | Celle de votre bucket | Fichiers .json.log.gz |
| « Download log archive » d'Actions | Toutes | Sortie de chaque étape d'une exécution | 90 jours par défaut | ZIP de fichiers texte |
| API des alertes de secret scanning | Là où le secret scanning est activé | Secrets fuités trouvés dans le code | Jusqu'à clôture | JSON |
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
- Ouvrez les paramètres de l'organisation : Settings → Archive → Logs → Audit log. Seuls les propriétaires y ont accès.
- Filtrez d'abord. Le champ de recherche accepte
created:>=2026-09-01,actor:,action:,repo:etcountry:. - 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 :
includevautwebpar défaut. Utilisezinclude=allpour obtenir aussi les événements Git, ouinclude=gitpour n'avoir qu'eux.- Sans paramètre
phrasecontenant un qualificatifcreated, 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.pushne 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
- Analyse du journal d'audit GitHub, pas à pas
- Limites du journal d'audit GitHub : conservation, angles morts, offres
- La même liste figure sur la page de l'outil : comment exporter ces logs
- Glossaire : événements Git, journal d'audit GitHub