Tipos de Cloud Audit Logs explicados y cómo exportarlos
Registros Admin Activity, Data Access, System Event y Policy Denied: qué registra cada uno, retención, campos clave y cuatro formas de exportarlos.
En resumen. Google Cloud escribe cuatro registros de auditoría por proyecto, carpeta y organización: Admin Activity (cambios de configuración, siempre activo, 400 días), System Event (cambios iniciados por Google, siempre activo, 400 días), Data Access (lecturas y escrituras de datos, desactivado por defecto salvo algunos servicios de BigQuery, 30 días) y Policy Denied (denegaciones por políticas de seguridad, activo por defecto, 30 días). Para una investigación, exporte los cuatro en JSON: Logs Explorer para periodos cortos, gcloud logging read para periodos más largos, o copie el bucket del sink si lo tiene.
Los Cloud Audit Logs son el registro de «quién hizo qué, dónde y cuándo» del plano de control de Google Cloud. Toda investigación de un proyecto de Google Cloud se apoya en ellos, así que saber exactamente qué captura cada tipo, y qué no, ahorra horas.
Los cuatro tipos de registros de auditoría
Google documenta cuatro tipos en la descripción general de Cloud Audit Logs. El nombre del registro le dice cuál está leyendo: projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2F<type>.
| Tipo | Sufijo del nombre | Registra | Por defecto | Retención por defecto |
|---|---|---|---|---|
| Admin Activity | activity | Llamadas a la API que modifican configuración o metadatos: políticas de IAM, VM, firewalls, sinks, claves | Siempre activo, no se puede desactivar | 400 días (_Required) |
| System Event | system_event | Cambios hechos por sistemas de Google, por ejemplo la migración en vivo de una VM | Siempre activo | 400 días (_Required) |
| Data Access | data_access | Lecturas de configuración (ADMIN_READ), lecturas de datos de usuario (DATA_READ), escrituras de datos de usuario (DATA_WRITE) | Desactivado, salvo algunos servicios de BigQuery | 30 días (_Default) |
| Policy Denied | policy | Accesos denegados por una política de seguridad, como VPC Service Controls | Activo; se puede excluir pero no desactivar | 30 días (_Default) |
La retención depende de los buckets de registros: el bucket _Required conserva sus registros 400 días y su sink no se puede modificar ni borrar; el bucket _Default conserva 30 días por defecto (descripción general del enrutamiento, cuotas y límites).
Dos consecuencias para la respuesta a incidentes:
- Todo lo que cambia el proyecto (una clave nueva, un Owner nuevo, un script de inicio, un sink borrado) está en Admin Activity durante más de un año, sea cual sea la configuración.
- Todo lo que lee datos (un bucket descargado objeto a objeto, un secreto consultado, un token emitido para una cuenta de servicio) solo existe si el registro Data Access estaba habilitado antes del incidente, y solo durante 30 días por defecto. El artículo sobre las limitaciones de Data Access trata este punto ciego.
Anatomía de una entrada de auditoría
Cada entrada es un LogEntry con un protoPayload de tipo google.cloud.audit.AuditLog (referencia de AuditLog). Estos son los campos que un investigador lee primero:
| Campo | Por qué importa |
|---|---|
timestamp | Cuándo ocurrió la llamada (UTC) |
protoPayload.methodName | Qué se hizo, por ejemplo SetIamPolicy, v1.compute.instances.setMetadata |
protoPayload.serviceName | Qué API, por ejemplo iam.googleapis.com |
protoPayload.authenticationInfo.principalEmail | Quién: un usuario, una cuenta de servicio, una cuenta de Gmail |
protoPayload.authenticationInfo.serviceAccountKeyName | Aparece cuando una cuenta de servicio se autenticó con una clave gestionada por el usuario; termina con el ID de la clave |
protoPayload.authenticationInfo.serviceAccountDelegationInfo | Aparece cuando se suplantó la cuenta de servicio; indica quién llamó realmente |
protoPayload.requestMetadata.callerIp / callerSuppliedUserAgent | Desde dónde y con qué cliente (gcloud, Terraform, un navegador) |
protoPayload.resourceName, resource.labels | Sobre qué |
protoPayload.status.code | Vacío si hubo éxito; 7 es PERMISSION_DENIED |
protoPayload.serviceData.policyDelta / metadata | La diferencia: bindingDeltas de IAM, auditConfigDeltas, claves de metadatos añadidas o eliminadas |
El user agent está infravalorado. Una cuenta de servicio que siempre llama desde Terraform/… y de repente llama desde google-cloud-sdk gcloud/… en una IP desconocida es por sí sola una pista sólida.
Cómo exportar los registros de auditoría para analizarlos
Exporte pronto. La guía de exportación de la página de la herramienta recoge los mismos pasos en versión corta; aquí está el razonamiento de cada vía.
Descarga desde Logs Explorer
Adecuada para unos días de un proyecto pequeño. En Logging → Logs Explorer, consulte:
logName:"cloudaudit.googleapis.com"
Añada OR logName:"vpc_flows" si también quiere los registros de flujo, elija el intervalo de tiempo y luego Actions → Download → JSON. Google documenta un límite de 10.000 entradas por descarga (interfaz de Logs Explorer): divida el periodo en varias descargas y conserve cada archivo. Elija JSON, no CSV; el CSV pierde la estructura anidada que necesitan las detecciones.
gcloud logging read
La vía más fiable para exportaciones grandes (referencia de gcloud logging):
gcloud logging read 'logName:"cloudaudit.googleapis.com"' \
--project=PROJECT_ID --freshness=30d --format=json > audit.json
gzip audit.json
Use --organization=ORG_ID o --folder=FOLDER_ID cuando un sink agregado a nivel de organización o los registros de carpeta entren en el alcance. Haga una segunda exportación para logName:"vpc_flows".
Copiar el bucket de un sink
Si un sink de registros ya enruta los registros de auditoría a Cloud Storage, tiene la mejor prueba posible: archivos organizados como cloudaudit.googleapis.com/activity/YYYY/MM/DD/…json, un objeto JSON por línea, que se remontan hasta la creación del sink. Cópielo con gcloud storage cp -r gs://BUCKET . y conserve la estructura de carpetas. Los sinks no rellenan el pasado: solo contienen entradas escritas después de su creación (configurar sinks). Para entradas más antiguas que aún estén en un bucket de registros, Google documenta cómo copiar entradas de registro a Cloud Storage.
Sink de BigQuery
Con un sink de BigQuery, consulte las tablas cloudaudit_googleapis_com_activity y cloudaudit_googleapis_com_data_access del periodo y guarde el resultado como JSON delimitado por saltos de línea. El analizador vuelve a mapear las columnas protopayload_auditlog a la forma de un LogEntry. No lee exportaciones Avro ni Parquet.
¿Y VPC Flow Logs?
VPC Flow Logs no son registros de auditoría: son registros muestreados de flujos de red (compute.googleapis.com/vpc_flows) que solo se escriben en las subredes donde se habilitaron. Expórtelos igual y analícelos junto con los registros de auditoría para poder cruzar las IP de origen con el tráfico. Vea el análisis de VPC Flow Logs.
Lista de comprobación antes de analizar
- El periodo cubre la intrusión sospechada más una referencia de actividad normal (una semana o más).
- Están los cuatro tipos de auditoría, de cada proyecto implicado, más los registros de la organización si las políticas de IAM o de organización pudieron cambiar.
- Los formatos son JSON o JSON lines, comprimidos con gzip o no. Deje intactos los archivos originales y trabaje con copias.
- Ha anotado si los registros Data Access estaban habilitados y para qué servicios. La ausencia de pruebas de lectura no significa nada sin esa nota.
Después, suelte los archivos en el analizador, como se describe en la guía paso a paso.
Preguntas frecuentes
¿Qué Cloud Audit Logs están habilitados por defecto?
Los registros de auditoría Admin Activity, System Event y Policy Denied se escriben siempre y no se pueden desactivar. Los registros Data Access están desactivados por defecto en todos los servicios, salvo algunos servicios de BigQuery (configurar los registros de auditoría Data Access).
¿Cómo exporto más de 10.000 entradas de registro?
La descarga de Logs Explorer se detiene en 10.000 entradas. Use gcloud logging read con --format=json, copie el bucket de Cloud Storage en el que escribe un sink o exporte desde un sink de BigQuery como JSON delimitado por saltos de línea.
Lecturas recomendadas
- Descripción general de Cloud Audit Logs — documentación de Google Cloud.
- Prácticas recomendadas para Cloud Audit Logs — documentación de Google Cloud.
- Respuesta a incidentes en Google Cloud: proyecto comprometido — dónde encajan estos registros en la investigación.