Recopila registros de Gmail

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros de Gmail a Google Security Operations con Google Cloud Storage V2.

Gmail es el servicio de correo electrónico de Google Workspace que proporciona correo electrónico inteligente y seguro con protección integrada contra spam y phishing. Los registros de Gmail capturan información detallada sobre la entrega de correos electrónicos, los eventos de seguridad y el flujo de mensajes a través de la infraestructura de Gmail.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Proyecto de GCP con las APIs de Cloud Storage y BigQuery habilitadas
  • Cuenta de Google Workspace con la edición adecuada (Enterprise Standard, Enterprise Plus, Education Standard o Education Plus)
  • Acceso de administrador avanzado a la Consola del administrador de Google Workspace
  • Permisos para crear y administrar buckets de GCS
  • Permisos para administrar políticas de IAM en buckets de GCS
  • Permisos para crear consultas programadas de BigQuery
  • La cuenta de servicio gapps-reports@system.gserviceaccount.com debe tener el rol de editor en el proyecto de BigQuery.

Crea un bucket de Google Cloud Storage

Usa la consola de Google Cloud

  1. Ve a Google Cloud Console.
  2. Selecciona tu proyecto o crea uno nuevo.
  3. En el menú de navegación, ve a Cloud Storage > Buckets.
  4. Haz clic en Crear bucket.
  5. Proporciona los siguientes detalles de configuración:

    Configuración Valor
    Asigna un nombre a tu bucket Ingresa un nombre global único (por ejemplo, gmail-logs-export).
    Tipo de ubicación Elige según tus necesidades (región, birregional, multirregional)
    Ubicación Selecciona la ubicación (por ejemplo, us-central1).
    Clase de almacenamiento Estándar (recomendado para los registros a los que se accede con frecuencia)
    Control de acceso Uniforme (recomendado)
    Herramientas de protección Opcional: Habilita el control de versiones de objetos o la política de retención
  6. Haz clic en Crear.

Usa la herramienta de línea de comandos de gcloud

  • Como alternativa, crea un bucket con el comando gcloud:

    gcloud storage buckets create gs://gmail-logs-export \
        --location=us-central1 \
        --default-storage-class=STANDARD
    
    • Reemplaza:
      • gmail-logs-export: Es el nombre del bucket que deseas (único a nivel global).
      • us-central1: Tu región preferida (por ejemplo, us-central1, europe-west1).

Configura Google Workspace para exportar registros a BigQuery

Los registros de Google Workspace, incluidos los de Gmail, se exportan a BigQuery a través de la función unificada de registros e informes de Workspace.

Habilita la exportación a BigQuery para los registros de Workspace

  1. Accede a la Consola del administrador de Google con una cuenta de administrador avanzado.
  2. Ve a Menú > Informes > Integraciones de datos.
  3. Apunta a la tarjeta BigQuery Export y haz clic en Editar.
  4. Marca la casilla Habilita la exportación de datos de Google Workspace a Google BigQuery.
  5. En ID del proyecto de BigQuery, selecciona el proyecto en el que deseas almacenar los registros.
  6. En Nuevo conjunto de datos en el proyecto, ingresa el nombre del conjunto de datos que se usará para almacenar los registros (por ejemplo, workspace_logs).
  7. Opcional: Marca la casilla Restringir el conjunto de datos a una ubicación geográfica específica y selecciona la ubicación en el menú.
  8. Haz clic en Guardar.

Después de habilitar la exportación, los eventos del registro de actividad suelen estar disponibles en un plazo de 10 minutos. Los datos se exportan a tablas llamadas activity_YYYYMMDD en el conjunto de datos especificado.

Crea una consulta programada para exportar datos de BigQuery a GCS

Para exportar automáticamente los registros de Gmail de BigQuery a Cloud Storage según un programa recurrente, crea una consulta programada con la instrucción EXPORT DATA.

Usa BigQuery Console

  1. En la consola de Google Cloud, ve a BigQuery.
  2. En el panel de navegación izquierdo, haz clic en Consultas programadas.
  3. Haz clic en Crear una consulta programada.
  4. En el Editor de consultas, ingresa el siguiente código SQL:

    EXPORT DATA OPTIONS(
        uri='gs://gmail-logs-export/gmail-logs/*.json',
        format='JSON',
        overwrite=false
    ) AS
    SELECT 
        *
    FROM 
        `PROJECT_ID.workspace_logs.activity_*`
    WHERE 
        record_type = 'gmail'
        AND _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
    
    • Reemplaza:
      • gmail-logs-export: Es el nombre de tu bucket de GCS.
      • PROJECT_ID: Es el ID de tu proyecto de GCP.
      • workspace_logs: Es el nombre de tu conjunto de datos de BigQuery.
  5. En la sección Opciones de programación, haz lo siguiente:

    • Repetir: Selecciona Horas.
    • Cada: Ingresa 1.
    • Fecha de inicio y hora de ejecución: Selecciona la fecha y hora actuales.
  6. En la sección Destino de los resultados de la consulta, haz lo siguiente:

    • Conjunto de datos: Selecciona un conjunto de datos para los metadatos de la consulta (no los datos exportados).
  7. Haz clic en Guardar.

Usa la herramienta de línea de comandos de bq

  • Como alternativa, crea una consulta programada con el comando bq:

    bq mk \
        --transfer_config \
        --project_id=PROJECT_ID \
        --data_source=scheduled_query \
        --display_name='Gmail Logs Export to GCS' \
        --schedule='every 1 hours' \
        --params='{
            "query":"EXPORT DATA OPTIONS(uri=\"gs://gmail-logs-export/gmail-logs/*.json\", format=\"JSON\", overwrite=false) AS SELECT * FROM `PROJECT_ID.workspace_logs.activity_*` WHERE record_type = \"gmail\" AND _TABLE_SUFFIX = FORMAT_DATE(\"%Y%m%d\", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))",
            "destination_table_name_template":"gmail_export_metadata",
            "write_disposition":"WRITE_TRUNCATE"
        }'
    
    • Reemplaza:
      • PROJECT_ID: Es el ID de tu proyecto de GCP.
      • gmail-logs-export: Es el nombre de tu bucket de GCS.
      • workspace_logs: Es el nombre de tu conjunto de datos de BigQuery.

Recupera la cuenta de servicio de Google SecOps

Las Operaciones de seguridad de Google usan una cuenta de servicio única para leer datos de tu bucket de GCS. Debes otorgar acceso a tu bucket a esta cuenta de servicio.

Configura un feed en Google SecOps para transferir registros de Gmail

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. Haz clic en Configura un feed único.
  4. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Gmail Logs).
  5. Selecciona Google Cloud Storage V2 como el Tipo de fuente.
  6. Selecciona Registros de GMAIL como el Tipo de registro.

  7. Haz clic en Obtener cuenta de servicio. Se muestra un correo electrónico único de la cuenta de servicio, por ejemplo:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Copia esta dirección de correo electrónico para usarla en el siguiente paso.

  9. Haz clic en Siguiente.

  10. Especifica valores para los siguientes parámetros de entrada:

    • URL del bucket de almacenamiento: Ingresa el URI del bucket de GCS con la ruta de acceso del prefijo:

       gs://gmail-logs-export/gmail-logs/
      
      • Reemplaza:
        • gmail-logs-export: Es el nombre de tu bucket de GCS.
        • gmail-logs: Es el prefijo o la ruta de acceso de la carpeta en la que se almacenan los registros.
    • Opción de borrado de la fuente: Selecciona la opción de borrado según tu preferencia:

      • Nunca: Nunca borra ningún archivo después de las transferencias (se recomienda para las pruebas).
      • Borrar archivos transferidos: Borra los archivos después de la transferencia exitosa.
      • Borrar los archivos transferidos y los directorios vacíos: Borra los archivos y los directorios vacíos después de la transferencia exitosa.

    • Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada. El valor predeterminado es de 180 días.

    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.

    • Etiquetas de transmisión: Es la etiqueta que se aplicará a los eventos de este feed.

  11. Haz clic en Siguiente.

  12. Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Otorga permisos de IAM a la cuenta de servicio de Google SecOps

La cuenta de servicio de Google SecOps necesita el rol de visualizador de objetos de almacenamiento en tu bucket de GCS.

Usa la consola de Google Cloud

  1. Ve a Cloud Storage > Buckets.
  2. Haz clic en el nombre de tu bucket.
  3. Ve a la pestaña Permisos.
  4. Haz clic en Otorgar acceso.
  5. Proporciona los siguientes detalles de configuración:
    • Agregar principales: Pega el correo electrónico de la cuenta de servicio de Google SecOps.
    • Asignar roles: Selecciona Visualizador de objetos de Storage.
  6. Haz clic en Guardar.

Usa la herramienta de línea de comandos de gcloud

  • Como alternativa, otorga permisos con el comando gcloud:

    gcloud storage buckets add-iam-policy-binding gs://gmail-logs-export \
        --member="serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL" \
        --role="roles/storage.objectViewer"
    
    • Reemplaza:
      • gmail-logs-export: Es el nombre de tu bucket.
      • SECOPS_SERVICE_ACCOUNT_EMAIL: Es el correo electrónico de la cuenta de servicio de Google SecOps.

Usa la herramienta de línea de comandos de gsutil (heredada)

  • Otorga a la cuenta de servicio de SecOps acceso de visualizador de objetos al bucket de exportación de registros de Gmail.

    gsutil iam ch serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL:objectViewer \
        gs://gmail-logs-export
    

Verifica los permisos

  • Para verificar que los permisos se hayan otorgado correctamente, haz lo siguiente:

    gcloud storage buckets get-iam-policy gs://gmail-logs-export \
        --flatten="bindings[].members" \
        --filter="bindings.role:roles/storage.objectViewer"
    

Deberías ver el correo electrónico de la cuenta de servicio de Google SecOps en el resultado.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
attachment.file_extension_type, attachment.sha256, attachment.file_name, domains acerca de Se combinó con los detalles del adjunto y los dominios de vínculos
message_info.post_delivery_info.action_type, gmail.message_info.post_delivery_info.action_type, event_info.mail_event_type, gmail.event_info.mail_event_type, tok.product_bucket, tok.scope_name, record_type, token.client_type, message_info.num_message_attachments, gmail.message_info.num_message_attachments additional.fields Se combinó con varios campos de metadatos adicionales.
action_type, description, rule_id metadata.description Se establece en descripciones específicas según los valores de action_type, o bien a partir de la descripción, o en "Contenido censurable" si rule_id == 7
metadata.event_type Se establece en "EMAIL_TRANSACTION".
event_name metadata.product_event_type Valor copiado directamente
metadata.product_name Se establece en "GMAIL".
metadata.vendor_name Se establece en "Google".
__incoming_message, __outcoming_message network.direction Se establece en "INBOUND" si se detecta un mensaje entrante y en "OUTBOUND" si se detecta un mensaje saliente.
destination.address network.email.cc Se combinaron las direcciones de destino en las que el índice es mayor que 0.
message_info.source.from_header_address, message_info.source.address network.email.from Valor de from_header_address si no está vacío; de lo contrario, se toma de source.address
message_info.rfc2822_message_id, gmail.message_info.rfc2822_message_id network.email.mail_id Se extrajo de rfc2822_message_id, se quitaron < y > y se usó grok.
message_info.subject, gmail.message_info.subject network.email.subject Valor de message_info.subject si no está vacío; de lo contrario, gmail.message_info.subject
destination.address network.email.to Se combinó desde la primera dirección de destino
network.ip_protocol Establece el valor en "TCP".
_payload_size network.received_bytes Se establece en _payload_size si es un mensaje entrante.
_payload_size network.sent_bytes Se establece en _payload_size si es un mensaje saliente.
token.app_name, message_info.source.service, message_info.source.selector, gmail.message_info.source.service, gmail.message_info.source.selector principal.application Valor de token.app_name si no está vacío; de lo contrario, se concatena de source.service y source.selector
message_info.connection_info.client_host_zone, gmail.message_info.connection_info.client_host_zone principal.asset.hostname Valor de client_host_zone
client_ip principal.asset.ip Valor copiado directamente
message_info.connection_info.client_host_zone, gmail.message_info.connection_info.client_host_zone principal.hostname Valor de client_host_zone
client_ip principal.ip Valor copiado directamente
message_info.connection_info.ip_geo_country, gmail.message_info.connection_info.ip_geo_country principal.location.country_or_region Valor de ip_geo_country
correo electrónico, source_address principal.user.email_addresses Se combinó de email_address y source_address
token.client_id principal.user.group_identifiers Valor copiado directamente
message_info.source.from_header_displayname, gmail.message_info.source.from_header_displayname principal.user.user_display_name Valor de from_header_displayname
source_address principal.user.userid Valor copiado directamente
acción security_result.action Valor copiado directamente
category security_result.category Valor copiado directamente
category_details security_result.category_details Valor copiado directamente
message_info.connection_info.smtp_response_reason, gmail.message_info.connection_info.smtp_response_reason, rule_description, reason security_result.description Se establece en el motivo de respuesta SMTP, la descripción de la regla o el motivo de clasificación.
stringMatch.predefined_detector_name, stringMatch.matched_string, stringMatch.match_expression, stringMatch.source, stringMatch.type security_result.detection_fields Se combinó con objetos de campos de detección
rule_id security_result.rule_id Valor copiado directamente
rule_name security_result.rule_name Valor copiado directamente
_err_summary, rule_id, description security_result.summary Se establece en el resumen del error, el resumen específico de la regla o la descripción.
_target_host target.administrative_domain Valor copiado directamente
message_info.destination.0.service, message_info.destination.0.selector, gmail.message_info.destination.0.service, gmail.message_info.destination.0.selector target.application Se concatena a partir del servicio y el selector.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.