Brains4Cloud
ESEN
Practicar

Tema 9 de 10

D3 · Garantizar el funcionamiento de una solución en la nube

Cloud Logging y registros de auditoría

La segunda parte del apartado 3.4 trata de los registros: configurar los logs de auditoría, exportarlos con sinks, guardarlos en buckets, consultarlos y activar los logs de red. Las métricas basadas en logs están en el artículo de Cloud Monitoring.

Cada proyecto, carpeta, organización y cuenta de facturación tiene cuatro tipos de logs de auditoría. Sus entradas son inmutables.

TipoQué registra¿Se puede desactivar?
Actividad de administraciónLlamadas que cambian la configuración o los metadatos: crear una VM, cambiar permisos IAMNo. Se escriben aunque desactives la API de Cloud Logging
Acceso a datosLecturas de configuración o metadatos y llamadas que crean, modifican o leen datos del usuarioDesactivados por defecto (salvo BigQuery); hay que activarlos
Eventos del sistemaCambios hechos por sistemas de Google, no por usuarios; por ejemplo, el autoescalado de un MIGNo
Política denegadaAccesos denegados por una política de seguridadNo, pero se pueden excluir con filtros para no guardarlos
# Leer los logs de auditoría del proyecto
gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" \
  --project=PROJECT_ID --freshness=7d

# Nombres de log
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy

Los recursos públicos (allUsers o allAuthenticatedUsers) no generan logs de auditoría, para proteger la identidad de los usuarios finales. Por defecto gcloud logging read lee solo el último día; --freshness amplía el periodo.

Activar los logs de acceso a datos

Se activan por servicio en la página Audit Logs de IAM en la consola o en la sección auditConfigs de la política IAM del proyecto, carpeta u organización. Pueden generar mucho volumen y tienen coste. Google recomienda activarlos cuando sea posible porque ayudan al soporte.

ADMIN_READ

Lectura de metadatos o configuración.

DATA_READ

Lectura de datos del usuario.

DATA_WRITE

Escritura de datos del usuario.

Si se activan para Cloud Storage, las descargas autenticadas desde el navegador en storage.cloud.google.com pueden devolver 403, porque no se puede generar el log con autenticación por cookies.

Cada proyecto, carpeta, organización y cuenta de facturación tiene un Log Router que pasa cada entrada por los sinks del recurso. Cada sink evalúa la entrada por separado con su filtro de inclusión y sus filtros de exclusión, así que varios sinks pueden enrutar la misma entrada.

Sink _Required

Envía los logs de actividad de administración y de eventos del sistema al bucket _Required. No se puede modificar ni borrar.

Sink _Default

Envía todo lo demás al bucket _Default. Se puede editar, cambiar de destino, añadir exclusiones o desactivar.

# Sink de proyecto a un bucket de Cloud Storage
gcloud logging sinks create archive-sink storage.googleapis.com/my-log-archive \
  --log-filter='severity>=WARNING'

# Sink agregado de una carpeta (incluye los proyectos hijos)
gcloud logging sinks create folder-sink \
  bigquery.googleapis.com/projects/central-logs/datasets/all_logs \
  --folder=FOLDER_ID --include-children --log-filter='logName:"cloudaudit.googleapis.com"'
  • No son retroactivos: un sink solo enruta las entradas recibidas después de crearlo. Sí se pueden copiar logs ya guardados de un bucket de logs a Cloud Storage.
  • Sinks agregados en carpetas u organizaciones: los no interceptores no cambian el enrutado de los hijos; los interceptores (--intercept-children) impiden que la entrada llegue a los sinks de los hijos, salvo al _Required del recurso de origen.
  • Cada sink tiene una identidad de escritor (una cuenta de servicio) a la que hay que dar permiso en el destino, salvo si escribe en un bucket de logs del mismo proyecto.
  • Si un sink está mal configurado no enruta nada; se escriben logs con el error y se envía un correo a los contactos esenciales.

Destinos de un sink

DestinoPara quéRol de la identidad de escritor
Bucket de logsGuardar en Cloud Logging y usar Logs Explorer, Observability Analytics y Error Reportingroles/logging.bucketWriter
Cloud StorageAlmacenamiento a largo plazo, en archivos JSONroles/storage.objectCreator
BigQueryUnir los logs con otros datos de negocioroles/bigquery.dataEditor
Pub/SubExportar fuera de Google Cloud (Splunk, Datadog…)roles/pubsub.publisher
Otro proyectoLos sinks del proyecto de destino vuelven a enrutar las entradasroles/logging.logWriter

Google indica conceder además roles/logging.logWriter para todos los destinos. Si borras el destino de un sink, borra también el sink.

Buckets de logs y retención

BucketRetención
_Required400 días, no configurable
_Default (proyecto)30 días por defecto, configurable de 1 a 3650 días
_Default (carpeta u organización)30 días, no configurable
Definido por el usuario30 días por defecto, configurable de 1 a 3650 días
gcloud logging buckets create audit-bucket --location=global \
  --enable-analytics --retention-days=365
  • Guardar logs más tiempo que la retención por defecto tiene coste.
  • La región de un bucket no se puede cambiar después de crearlo.
  • Se puede bloquear la retención por cumplimiento normativo: después no se puede borrar el bucket hasta que todas las entradas cumplan su retención.
  • Si envías los logs de actividad de administración a otro proyecto, sus sinks del sistema los excluyen: para guardarlos allí hay que editar el _Default o crear un sink propio.

Logs Explorer, consultas y Observability Analytics

Logs Explorer

Para solucionar problemas y explorar. Usa el lenguaje de consultas de Logging (el mismo que la API y gcloud). Muestra un histograma de errores. No hace agregaciones como contar entradas por patrón.

Observability Analytics

Consultas SQL que agrupan y agregan los logs, con tablas y gráficos, y unen logs con trazas. Requiere activar analytics en el bucket. Con un dataset de BigQuery vinculado (de solo lectura) se consultan los logs desde BigQuery sin exportarlos.

resource.type="gce_instance"
severity>=ERROR
jsonPayload.message:"timeout"
NOT logName:"cloudaudit.googleapis.com"
jsonPayload.message =~ "foo.*bar"
  • Los operadores booleanos AND, OR y NOT van en mayúsculas; en minúsculas se tratan como texto a buscar. Varias líneas se unen con AND.
  • : busca una subcadena; =~ y !~, expresiones regulares.
  • Campos siempre indexados (consultas más rápidas): resource.type, resource.labels.*, logName, severity, timestamp, httpRequest.status, labels.*…

VPC Flow Logs y logs de firewall

VPC Flow Logs

  • Muestrea paquetes de VMs (también nodos de GKE), Cloud Run o App Engine con salida directa a VPC, adjuntos de VLAN y túneles VPN, y los agrega por conexión. No captura todos los paquetes.
  • Para monitorizar la red, análisis forense, seguridad y optimizar costes de red.
  • Se activa a nivel de organización, red VPC, subred, adjunto de VLAN o túnel VPN.
  • Intervalo de agregación de 5 segundos por defecto; tasa de muestreo secundaria y filtros configurables.
  • Se guardan 30 días en Logging por defecto.

Logs de reglas de firewall

  • Se activan regla a regla, sea de permitir o denegar, de entrada o de salida.
  • Crean un registro por conexión (no por paquete) con IP, protocolo, puertos y la regla aplicada.
  • Solo TCP y UDP. No se admiten en las reglas implícitas de denegar entrada y permitir salida.
  • Sirven para comprobar que una regla de denegación funciona o cuántas conexiones afecta.
gcloud compute networks subnets update subnet-eu --region=europe-west1 \
  --enable-flow-logs --logging-aggregation-interval=interval-30-sec \
  --logging-flow-sampling=0.5

Roles de Cloud Logging

RolQué permite
Logs Viewer
roles/logging.viewer
Ver logs, incluidos los de actividad de administración, eventos del sistema y política denegada. No los de acceso a datos del bucket _Default
Private Logs Viewer
roles/logging.privateLogViewer
Lo anterior más los logs privados, como los de acceso a datos
Logs Writer
roles/logging.logWriter
Escribir entradas (lo usan el Ops Agent y las identidades de escritor)
Logs Configuration Writer
roles/logging.configWriter
Crear y editar sinks, buckets, exclusiones y métricas basadas en logs
Logging Admin
roles/logging.admin
Control total de Cloud Logging

El rol básico heredado Editor (roles/editor) no incluye permisos para ver los logs de acceso a datos.

Escenarios de examen

SituaciónRespuestaPor qué
Saber quién borró una VM la semana pasadaLogs de auditoría de actividad de administraciónSiempre activos; se guardan 400 días en _Required.
Registrar quién lee los objetos de un bucket de Cloud StorageActivar los logs de acceso a datos (DATA_READ)Desactivados por defecto salvo en BigQuery.
Guardar logs 7 años al menor costeSink a un bucket de Cloud StorageAlmacenamiento a largo plazo en archivos JSON.
Centralizar los logs de todos los proyectos de una carpetaSink agregado con --include-childrenEnruta los logs de la carpeta y sus hijos.
Enviar los logs a SplunkSink a un tema de Pub/SubDestino para integraciones de terceros.
Unir logs con datos de negocio en SQLSink a BigQuery o bucket con Observability Analytics y dataset vinculadoEl dataset vinculado es de solo lectura.
Un desarrollador necesita leer los logs de acceso a datosroles/logging.privateLogViewerLogs Viewer no los ve; Editor tampoco.
Analizar qué IP se comunicaron con una VM comprometidaVPC Flow Logs en la subredMuestreo agregado por conexión.

Trampas frecuentes del examen

❓ ¿Se pueden desactivar los logs de actividad de administración para ahorrar?

No. Siempre se escriben y se guardan en _Required, aunque desactives la API de Cloud Logging.

❓ ¿Los logs de acceso a datos están activos por defecto?

No, salvo en BigQuery. Hay que activarlos por servicio y tienen coste.

❓ ¿Un sink nuevo exporta los logs de la semana pasada?

No. Solo enruta las entradas que llegan después de crearlo.

❓ ¿Se puede cambiar la retención del bucket _Required?

No. Son 400 días fijos. La del _Default de un proyecto sí es configurable.

❓ ¿Logs Explorer sirve para contar entradas agrupadas por hora?

No admite agregaciones. Para eso está Observability Analytics con SQL.

❓ ¿VPC Flow Logs registra todos los paquetes?

No. Muestrea paquetes y estima el tráfico total.

¿Entendiste este tema?

Pon a prueba lo que acabas de aprender

Tu equipo de seguridad debe conservar los logs de auditoría de todos los proyectos de la organización durante 5 años en un único proyecto central y consultarlos con SQL. ¿Qué configuras?

¿Listo para poner a prueba "Cloud Logging y registros de auditoría"?

Preguntas originales, cada una con su explicación.

Empezar un simulacro