Skip to content

Esta herramienta no está afiliada a GitHub, Inc. ni a Microsoft Corporation, ni cuenta con su respaldo o patrocinio. GitHub y GitHub Actions son marcas comerciales de GitHub, Inc. Los demás nombres son marcas comerciales de sus respectivos propietarios.

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.

Publicado el 7 min de lectura

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

FuentePlanQué obtienesRetenciónFormato
Registro de auditoría de la organización, exportación desde la interfaz webTodas las organizacionesConfiguración, miembros, repositorios, workflows, metadatos de secretos180 díasArray JSON o CSV
REST GET /orgs/{org}/audit-logEnterprise CloudLo mismo, más los eventos Git con include=all180 días (eventos Git: 7)Páginas JSON
Exportación del registro de auditoría de la empresaEnterprise CloudTodas las organizaciones de la empresa180 díasJSON o CSV
"Export Git Events" de la empresaEnterprise Cloudgit.clone / git.fetch / git.push7 díasLíneas JSON comprimidas con gzip
Streaming del registro de auditoríaEnterprise CloudEventos de auditoría y Git, de forma continuaLa retención de tu bucketFicheros .json.log.gz
"Download log archive" de ActionsTodosSalida de cada paso de una ejecución90 días por defectoZIP de ficheros de texto
API de alertas de secret scanningDonde esté activado el secret scanningSecretos filtrados encontrados en el códigoHasta que se cierranJSON

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

  1. Ve a Settings → Archive → Logs → Audit log de la organización. Solo los propietarios pueden abrirlo.
  2. Filtra primero. El cuadro de búsqueda acepta created:>=2026-09-01, actor:, action:, repo: y country:.
  3. 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:

  • include vale web por defecto. Usa include=all para obtener también los eventos Git, o include=git para obtener solo esos.
  • Sin un phrase con el calificador created, 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.push no 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

Artículos relacionados

Analiza offline las exportaciones del audit log de GitHub: JSON, eventos Git y logs de Actions; lee el veredicto, prioriza hallazgos y exporta un informe.
Lo que no guarda el registro de auditoría de GitHub: retención de 180 y 7 días, límites de plan, IP ocultas, sin contenido de archivos ni lecturas de secretos.
Un ataque ficticio a la cadena de suministro de GitHub investigado paso a paso: PAT robado, 38 repos clonados, claves de AWS impresas y protección eliminada.

Esta herramienta no está afiliada a GitHub, Inc. ni a Microsoft Corporation, ni cuenta con su respaldo o patrocinio. GitHub y GitHub Actions son marcas comerciales de GitHub, Inc. Los demás nombres son marcas comerciales de sus respectivos propietarios.