Cómo exportar el registro de auditoría de GitHub
Exporta el registro de auditoría de GitHub para análisis forense: JSON/CSV, API REST con include=all, streaming, eventos Git y logs de Actions, y sus límites.
En resumen. Para tener evidencias completas necesitas varias fuentes, no una. Toma la exportación de la interfaz (JSON, todos los planes), la API REST con include=all (Enterprise Cloud, y la única forma de obtener los eventos Git por organización), los ficheros de streaming si los tienes, la exportación de eventos Git (empresa, retención de 7 días) y los archivos de logs de Actions de las ejecuciones sospechosas. Recupera primero los eventos Git. Todos los formatos que se describen abajo se pueden soltar tal cual en el analizador en el navegador.
Esta guía cubre la parte práctica de cada fuente: dónde hacer clic, qué aspecto tiene el fichero, qué plan necesitas y qué no contiene. Para saber qué hacer después con los ficheros, consulta el análisis del registro de auditoría de GitHub, paso a paso.
Qué fuente para qué pregunta
| Fuente | Plan | Qué obtienes | Retención | Formato |
|---|---|---|---|---|
| Registro de auditoría de la organización, exportación desde la interfaz web | Todas las organizaciones | Configuración, miembros, repositorios, workflows, metadatos de secretos | 180 días | Array JSON o CSV |
REST GET /orgs/{org}/audit-log | Enterprise Cloud | Lo mismo, más los eventos Git con include=all | 180 días (eventos Git: 7) | Páginas JSON |
| Exportación del registro de auditoría de la empresa | Enterprise Cloud | Todas las organizaciones de la empresa | 180 días | JSON o CSV |
| "Export Git Events" de la empresa | Enterprise Cloud | git.clone / git.fetch / git.push | 7 días | Líneas JSON comprimidas con gzip |
| Streaming del registro de auditoría | Enterprise Cloud | Eventos de auditoría y Git, de forma continua | La retención de tu bucket | Ficheros .json.log.gz |
| "Download log archive" de Actions | Todos | Salida de cada paso de una ejecución | 90 días por defecto | ZIP de ficheros de texto |
| API de alertas de secret scanning | Donde esté activado el secret scanning | Secretos filtrados encontrados en el código | Hasta que se cierran | JSON |
Los requisitos de plan proceden de la documentación de GitHub: la página de la organización indica que la API del registro de auditoría requiere GitHub Enterprise Cloud. En GitHub Free o Team, la exportación de la interfaz es tu fuente principal.
1. Registro de auditoría de la organización desde la interfaz web
- Ve a Settings → Archive → Logs → Audit log de la organización. Solo los propietarios pueden abrirlo.
- Filtra primero. El cuadro de búsqueda acepta
created:>=2026-09-01,actor:,action:,repo:ycountry:. - Haz clic en Export y elige JSON. CSV también sirve, pero JSON conserva los campos anidados, como
actor_location.country_code.
GitHub limita cada exportación a 100 MB comprimidos o 10 minutos de procesamiento. Para una ventana larga, expórtala semana a semana. Los duplicados entre tramos que se solapan no son un problema para el analizador, que deduplica por _document_id.
Activa antes las direcciones IP. GitHub no muestra por defecto las direcciones IP de origen. Un propietario puede activar la visualización de las direcciones IP. El ajuste se aplica a los eventos nuevos y a los ya existentes, así que activarlo en pleno incidente sigue siendo útil. Sin él, falta actor_ip y las detecciones de IP nueva y país nuevo no pueden activarse. Las direcciones IP son datos personales en muchas jurisdicciones: revisa tus obligaciones antes de almacenarlas.
2. API REST (Enterprise Cloud)
El endpoint de la organización está documentado en la referencia REST. Tienes que ser propietario, y un token clásico necesita el ámbito 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
Hay tres detalles que suelen pillar desprevenido a más de uno:
includevalewebpor defecto. Usainclude=allpara obtener también los eventos Git, oinclude=gitpara obtener solo esos.- Sin un
phrasecon el calificadorcreated, la API solo devuelve los tres últimos meses. - Sigue la cabecera
Link: rel="next"hasta que desaparezca. El endpoint admite 1.750 consultas por hora por usuario y dirección IP.
Guarda cada página en su propio fichero, o concaténalas. El analizador acepta arrays, arrays concatenados y líneas JSON.
3. Exportación de eventos Git (empresa)
Los propietarios de la empresa tienen un menú aparte, Export Git Events, en el registro de auditoría de la empresa. Elige el rango de fechas y descarga el resultado. GitHub lo describe en la página de exportación de la empresa. El fichero contiene líneas JSON comprimidas, con un nombre del tipo export-<enterprise>-<timestamp>.json.gz, y no hace falta descomprimirlo.
En una investigación importan dos límites:
- La retención es de siete días. Exporta el mismo día en que abres el incidente.
- Las operaciones web y de API quedan excluidas. Una pull request fusionada desde el navegador hace un push a la rama base, pero ese push no aparece como evento Git. Que no haya
git.pushno significa que no haya habido cambios.
Como el registro de auditoría puede incluir datos del token en los eventos Git, las filas git.clone pueden llevar un hashed_token. Agrupar por ese campo es la forma de distinguir al desarrollador de alguien que está reutilizando su token.
4. Streaming del registro de auditoría
Si tu empresa hace streaming de su registro de auditoría, ya tienes la fuente más completa. Contiene los eventos de auditoría y los eventos Git de todas las organizaciones, y tu almacenamiento los conserva todo el tiempo que decidas. Los destinos admitidos son Amazon S3, Azure Blob Storage, Azure Event Hubs, Datadog, Google Cloud Storage y Splunk. El almacenamiento de objetos usa la estructura YYYY/MM/DD/HH/MM/<uuid>.json.log.gz.
Descarga las carpetas que cubren la ventana y suelta el árbol completo, o un ZIP del mismo. Cada .json.log.gz se descomprime al vuelo. Comprueba también si alguien modificó el stream. Un audit_log_streaming.destroy o .update durante el incidente es un hallazgo en sí mismo (consulta toma de control de la organización). La entrada del glosario sobre el streaming explica cómo GitHub almacena los eventos en búfer mientras un stream está en pausa.
5. Archivos de logs de las ejecuciones de Actions
Para cada ejecución sospechosa: repositorio → Actions → la ejecución → ⋯ → Download log archive. Obtienes un ZIP que contiene el log combinado de cada job y una carpeta con un fichero por paso. Cualquiera con acceso de lectura puede descargarlo.
Hazlo pronto. Los logs siguen la política de retención (90 días por defecto) y cualquiera con acceso de escritura puede borrarlos. Si una ejecución se relanzó parcialmente, el archivo solo contiene los jobs relanzados, así que descarga también los intentos anteriores.
6. Alertas de secret scanning
GET /orgs/{org}/secret-scanning/alerts devuelve las alertas en JSON (consulta la referencia REST). Suelta ese fichero junto al registro de auditoría. Cuando una alerta se refiere a una credencial de AWS, Google Cloud o Azure, la herramienta muestra el siguiente paso en el cloud. El artículo sobre el salto al cloud explica por qué es importante.
Cadena de custodia, en pocas palabras
Anota quién exportó qué, cuándo y con qué filtro. Calcula un SHA-256 de cada fichero y conserva los originales en solo lectura. Trabaja sobre copias. Nada de esto es específico de GitHub, pero la corta retención de los eventos Git hace que no vayas a tener una segunda oportunidad de repetir la misma exportación.
Preguntas frecuentes
¿Por qué falta git.clone en mi exportación del registro de auditoría?
La exportación desde la interfaz web no incluye los eventos Git. Los obtienes mediante la API REST con include=git o include=all, el menú Export Git Events de la empresa o el streaming del registro de auditoría, y todas estas opciones requieren GitHub Enterprise Cloud. Los eventos Git se conservan siete días.
¿Hay un límite de tamaño en las exportaciones del registro de auditoría?
Sí. GitHub detiene una exportación al llegar a 100 MB comprimidos o 10 minutos de procesamiento. Filtra por fecha con el calificador created y exporta en varios tramos, o usa la API o el streaming para volúmenes grandes.
Artículos relacionados
- Análisis del registro de auditoría de GitHub, paso a paso
- Limitaciones del registro de auditoría de GitHub: retención, lagunas, planes
- La misma lista de comprobación está en la página de la herramienta: cómo exportar estos logs
- Glosario: eventos Git, registro de auditoría de GitHub