Tema 9 de 10
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.
Contenido
Cada proyecto, carpeta, organización y cuenta de facturación tiene cuatro tipos de logs de auditoría. Sus entradas son inmutables.
| Tipo | Qué registra | ¿Se puede desactivar? |
|---|---|---|
| Actividad de administración | Llamadas que cambian la configuración o los metadatos: crear una VM, cambiar permisos IAM | No. Se escriben aunque desactives la API de Cloud Logging |
| Acceso a datos | Lecturas de configuración o metadatos y llamadas que crean, modifican o leen datos del usuario | Desactivados por defecto (salvo BigQuery); hay que activarlos |
| Eventos del sistema | Cambios hechos por sistemas de Google, no por usuarios; por ejemplo, el autoescalado de un MIG | No |
| Política denegada | Accesos denegados por una política de seguridad | No, 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.
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"'
--intercept-children) impiden que la entrada llegue a los sinks de los hijos, salvo al _Required del recurso de origen.| Destino | Para qué | Rol de la identidad de escritor |
|---|---|---|
| Bucket de logs | Guardar en Cloud Logging y usar Logs Explorer, Observability Analytics y Error Reporting | roles/logging.bucketWriter |
| Cloud Storage | Almacenamiento a largo plazo, en archivos JSON | roles/storage.objectCreator |
| BigQuery | Unir los logs con otros datos de negocio | roles/bigquery.dataEditor |
| Pub/Sub | Exportar fuera de Google Cloud (Splunk, Datadog…) | roles/pubsub.publisher |
| Otro proyecto | Los sinks del proyecto de destino vuelven a enrutar las entradas | roles/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.
| Bucket | Retención |
|---|---|
| _Required | 400 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 usuario | 30 días por defecto, configurable de 1 a 3650 días |
gcloud logging buckets create audit-bucket --location=global \ --enable-analytics --retention-days=365
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"
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.resource.type, resource.labels.*, logName, severity, timestamp, httpRequest.status, labels.*…VPC Flow Logs
Logs de reglas de firewall
gcloud compute networks subnets update subnet-eu --region=europe-west1 \ --enable-flow-logs --logging-aggregation-interval=interval-30-sec \ --logging-flow-sampling=0.5
| Rol | Qué permite |
|---|---|
Logs Viewerroles/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 Viewerroles/logging.privateLogViewer | Lo anterior más los logs privados, como los de acceso a datos |
Logs Writerroles/logging.logWriter | Escribir entradas (lo usan el Ops Agent y las identidades de escritor) |
Logs Configuration Writerroles/logging.configWriter | Crear y editar sinks, buckets, exclusiones y métricas basadas en logs |
Logging Adminroles/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.
| Situación | Respuesta | Por qué |
|---|---|---|
| Saber quién borró una VM la semana pasada | Logs de auditoría de actividad de administración | Siempre activos; se guardan 400 días en _Required. |
| Registrar quién lee los objetos de un bucket de Cloud Storage | Activar los logs de acceso a datos (DATA_READ) | Desactivados por defecto salvo en BigQuery. |
| Guardar logs 7 años al menor coste | Sink a un bucket de Cloud Storage | Almacenamiento a largo plazo en archivos JSON. |
| Centralizar los logs de todos los proyectos de una carpeta | Sink agregado con --include-children | Enruta los logs de la carpeta y sus hijos. |
| Enviar los logs a Splunk | Sink a un tema de Pub/Sub | Destino para integraciones de terceros. |
| Unir logs con datos de negocio en SQL | Sink a BigQuery o bucket con Observability Analytics y dataset vinculado | El dataset vinculado es de solo lectura. |
| Un desarrollador necesita leer los logs de acceso a datos | roles/logging.privateLogViewer | Logs Viewer no los ve; Editor tampoco. |
| Analizar qué IP se comunicaron con una VM comprometida | VPC Flow Logs en la subred | Muestreo agregado por conexión. |
❓ ¿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?
Preguntas originales, cada una con su explicación.
Empezar un simulacro