Recopilar registros de la zona 1

Disponible en:

En este documento se explica cómo ingerir registros de Area 1 Email Security (de Cloudflare) en Google Security Operations mediante AWS S3. El analizador procesa los registros en formato JSON. Extrae los campos relevantes de la estructura JSON anidada, los asigna al modelo de datos unificado (UDM) y enriquece los datos con información geográfica y detalles de seguridad, como los hashes y la disposición de los archivos adjuntos.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

  • Instancia de Google SecOps
  • Un host Windows 2016 o posterior, o un host Linux con systemd
  • Si se ejecuta a través de un proxy, los puertos del cortafuegos están abiertos
  • Acceso privilegiado a Area 1 Email Security (de Cloudflare)

Configurar AWS IAM y el segmento de S3

  1. Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
  2. Inicia sesión en la consola de AWS.
  3. Ve a S3 > Crear segmento.
  4. Escribe un nombre para el segmento (por ejemplo, area1-security-logs).
  5. Deja los demás valores predeterminados (o configura el cifrado y el control de versiones si es necesario).
  6. Haz clic en Crear.
  7. Guarda el nombre y la región del contenedor para consultarlos más adelante.
  8. Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
  9. Selecciona el usuario creado.
  10. Selecciona la pestaña Credenciales de seguridad.
  11. En la sección Claves de acceso, haz clic en Crear clave de acceso.
  12. Selecciona Servicio de terceros como Caso práctico.
  13. Haz clic en Siguiente.
  14. Opcional: añade una etiqueta de descripción.
  15. Haz clic en Crear clave de acceso.
  16. Haz clic en Descargar archivo CSV y guarda la clave de acceso y la clave de acceso secreta para futuras consultas.
  17. Haz clic en Listo.
  18. Selecciona la pestaña Permisos.
  19. En Políticas de permisos, haga clic en Añadir permisos.
  20. Seleccione Adjuntar políticas directamente.
  21. Busca la política AmazonS3FullAccess.
  22. Selecciona la política.
  23. Haz clic en Siguiente.
  24. Haz clic en Añadir permisos.

Obtener credenciales de la API Area 1

  1. Inicia sesión en el panel de control de Area 1 Security (Cloudflare).
  2. Ve a Configuración > Acceso a la API.
  3. Genera la clave de API (token).
  4. Copia y guarda el token en un lugar seguro.

Configurar los paquetes de Python necesarios

  1. Inicia sesión en el host de recogida de registros (por ejemplo, una VM de AWS) y ejecuta lo siguiente para configurar las credenciales de AWS:

    pip install boto3 requests
    aws configure
    

Crear la secuencia de comandos Area 1 Log Puller

  1. Crea el siguiente archivo introduciendo sudo vi area1_to_s3.py y, a continuación, copia el siguiente código:

    • Ajusta lo siguiente:
    #!/usr/bin/env python3
    import os
    import requests
    import boto3
    import datetime
    import json
    
    # Configuration
    AREA1_API_TOKEN = os.environ.get("AREA1_API_TOKEN")  # Load securely from env
    AWS_PROFILE = os.environ.get("AWS_PROFILE", None)    # Optional, for named profiles
    S3_BUCKET_NAME = "area1-security-logs"
    LOG_TYPE = "events"
    
    # Time range
    end_time = datetime.datetime.utcnow()
    start_time = end_time - datetime.timedelta(days=1)
    
    def fetch_area1_logs():
        url = f"https://api.area1security.com/v1/{LOG_TYPE}"
        headers = {
            "Authorization": f"Bearer {AREA1_API_TOKEN}",
            "Accept": "application/json"
        }
        params = {
            "startDate": start_time.strftime("%Y-%m-%dT%H:%M:%SZ"),
            "endDate": end_time.strftime("%Y-%m-%dT%H:%M:%SZ")
        }
        response = requests.get(url, headers=headers, params=params)
        response.raise_for_status()
        return response.json()
    
    def upload_to_s3(data):
        filename = f"area1_{LOG_TYPE}_{start_time.strftime('%Y%m%d')}.json"
    
        session = boto3.Session(profile_name=AWS_PROFILE) if AWS_PROFILE else boto3.Session()
        s3 = session.client("s3")
    
        s3.put_object(
            Bucket=S3_BUCKET_NAME,
            Key=f"logs/{filename}",
            Body=json.dumps(data).encode("utf-8"),
            ContentType="application/json"
        )
        print(f"[✓] Uploaded {filename} to s3://{S3_BUCKET_NAME}/logs/")
    
    if __name__ == "__main__":
        logs = fetch_area1_logs()
        upload_to_s3(logs)
    
  2. Guardar y salir de vi: haz clic en esc y, a continuación, escribe :wq.

Almacena las variables de entorno.

  1. Crea un archivo seguro para almacenar variables de entorno en /etc/area1.env (o /home/user/.area1.env).

    export AREA1_API_TOKEN="your_actual_area1_api_token"
    export AWS_PROFILE="<your_aws_programmatic_username>"
    
  2. Asegúrate de que el archivo sea seguro:

    chmod 600 /etc/area1.env
    

Ejecutar y probar la secuencia de comandos

  1. Ejecuta la siguiente secuencia de comandos:

    python3 area1_to_s3.py
    
  2. Deberías ver lo siguiente:

    Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
    

Automatizar con Cron

  1. Crea un script de envoltorio para Cron ejecutando sudo vi /usr/local/bin/run_area1.sh y, a continuación, copia el siguiente código:

    #!/usr/bin/env bash
    set -euo pipefail
    
    source /etc/area1.env
    /usr/bin/python3 /opt/scripts/area1_to_s3.py
    
  2. Haz que el archivo sea ejecutable:

    chmod +x /usr/local/bin/run_area1.sh
    
  3. Se ha configurado para que se ejecute todos los días a las 01:00 UTC:

    crontab -e
    0 1 * * * /usr/local/bin/run_area1.sh >> /var/log/area1_to_s3.log 2>&1
    

Configurar feeds

Hay dos puntos de entrada diferentes para configurar feeds en la plataforma Google SecOps:

  • Configuración de SIEM > Feeds
  • Centro de contenido > Paquetes de contenido

Configurar feeds desde Configuración de SIEM > Feeds

Para configurar un feed, sigue estos pasos:

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Añadir feed.
  3. En la página siguiente, haga clic en Configurar un solo feed.
  4. En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Area1 Logs).
  5. Selecciona Amazon S3 como Tipo de fuente.
  6. Seleccione Area1 Security como Tipo de registro.
  7. Haz clic en Siguiente.
  8. Especifique los valores de los siguientes parámetros de entrada:

    • Región: la región en la que se encuentra el segmento de Amazon S3.
    • URI de S3: el URI del contenedor (el formato debe ser s3://<your-log-bucket-name>). Sustituye lo siguiente:
      • your-log-bucket-name: el nombre del segmento.
    • El URI es un: selecciona Directorio que incluye subdirectorios.
    • Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
    • ID de clave de acceso: la clave de acceso del usuario con acceso al segmento de S3.
    • Clave de acceso secreta: la clave secreta del usuario con acceso al segmento de S3.
  9. Haz clic en Siguiente.

  10. Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.

Configurar feeds desde el Centro de contenido

Especifique los valores de los siguientes campos:

  • Región: la región en la que se encuentra el segmento de Amazon S3.

    • URI de S3: el URI del contenedor (el formato debe ser s3://<your-log-bucket-name>). Sustituye lo siguiente:
      • your-log-bucket-name: el nombre del segmento.
    • El URI es un: selecciona Directorio que incluye subdirectorios.
    • Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
    • ID de clave de acceso: la clave de acceso del usuario con acceso al segmento de S3.
    • Clave de acceso secreta: la clave secreta del usuario con acceso al segmento de S3.§

Opciones avanzadas

  • Nombre del feed: valor rellenado automáticamente que identifica el feed.
  • Tipo de fuente: método usado para recoger registros en Google SecOps.
  • Espacio de nombres del recurso: espacio de nombres asociado al feed.
  • Etiquetas de ingestión: etiquetas aplicadas a todos los eventos de este feed.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
alert_id security_result.rule_id El valor se toma del campo alert_id.
alert_reasons security_result.description El valor se toma del campo alert_reasons.
attachments.att_size security_result.about.file.size El valor se toma del campo attachments.att_size y se convierte en un número entero sin signo.
attachments.disposition security_result.about.user.attribute.labels.value El valor se toma del campo attachments.disposition.
attachments.extension security_result.about.file.mime_type El valor se toma del campo attachments.extension.
attachments.md5 security_result.about.file.md5 El valor se toma del campo attachments.md5.
attachments.name security_result.about.file.full_path El valor se toma del campo attachments.name.
attachments.sha1 security_result.about.file.sha1 El valor se toma del campo attachments.sha1.
attachments.sha256 security_result.about.file.sha256 El valor se toma del campo attachments.sha256.
attachments.ssdeep security_result.about.file.ssdeep El valor se toma del campo attachments.ssdeep.
delivery_mode security_result.detection_fields.value El valor se toma del campo delivery_mode.
envelope_from principal.user.email_addresses, network.email.from El valor se toma del campo envelope_from.
envelope_to network.email.to, target.user.email_addresses El valor se toma del campo envelope_to.
final_disposition security_result.category_details El valor se toma del campo final_disposition.
message_id metadata.product_log_id El valor se toma del campo message_id después de eliminar los caracteres "<" y ">".
replyto network.email.bounce_address El valor se toma del campo replyto.
smtp_helo_server_ip principal.ip El valor se toma del campo smtp_helo_server_ip.
smtp_helo_server_ip_as_name principal.location.name El valor se toma del campo smtp_helo_server_ip_as_name.
smtp_helo_server_ip_as_number principal.asset_id El valor se toma del campo smtp_helo_server_ip_as_number y se le añade el prefijo asset_id:.
smtp_helo_server_ip_geo principal.location.country_or_region, principal.location.state, principal.location.city El valor se extrae del campo smtp_helo_server_ip_geo mediante un patrón Grok.
smtp_helo_server_name principal.administrative_domain El valor se toma del campo smtp_helo_server_name.
fuente metadata.vendor_name El valor se toma del campo source. Si el campo está vacío, el valor es area1security.
subject network.email.subject El valor se toma del campo subject.
Tiempo metadata.event_timestamp El valor se toma del campo time y se convierte en una marca de tiempo.
metadata.event_type El valor se ha definido como EMAIL_TRANSACTION.
metadata.product_name El valor se ha definido como AREA1.
metadata.log_type El valor se ha definido como AREA1.
security_result.about.user.attribute.labels.key El valor se ha definido como disposition.
security_result.category El valor se ha definido como SOFTWARE_MALICIOUS.
security_result.detection_fields.key El valor se ha definido como delivery_mode.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.