Recopila registros de Apache Hadoop

Versión del analizador: 3.0

Compatible con:

En este documento, se explica cómo transferir registros de Apache Hadoop a Google Security Operations con el agente de Bindplane. Primero, el analizador extrae campos de los registros sin procesar de Hadoop con patrones de Grok basados en formatos de registro comunes de Hadoop. Luego, asigna los campos extraídos a los campos correspondientes en el esquema del modelo de datos unificado (UDM), realiza conversiones de tipos de datos y enriquece los datos con contexto adicional.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Un host de Windows 2016 o posterior, o Linux con systemd
  • Si se ejecuta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos según los requisitos del agente de Bindplane
  • Acceso con privilegios a los archivos de configuración del clúster de Apache Hadoop

Obtén credenciales de Google SecOps para el agente de Bindplane

Para autenticar el agente de Bindplane en Google SecOps, elige uno de los siguientes métodos:

  • Implementaciones nuevas: Usa la API de Chronicle (opción 1).
  • Implementaciones heredadas: Sigue usando el archivo de autenticación de transferencia (opción 2) hasta que se descontinúe la API de Ingestion el 20 de julio de 2027.
  1. Accede a la consola deGoogle Cloud y selecciona el proyecto de Google Cloud que está vinculado a tu instancia de Google SecOps.
  2. Ve a IAM y administración > Cuentas de servicio.
  3. Haga clic en Crear cuenta de servicio.
  4. Proporciona los siguientes detalles de configuración:
    • Nombre de la cuenta de servicio: Ingresa un nombre para la cuenta (por ejemplo, bindplane-ingest).
    • Descripción de la cuenta de servicio: Ingresa una descripción (por ejemplo, Bindplane agent log ingestion).
  5. Haz clic en Crear y continuar.
  6. En la sección Otorga a esta cuenta de servicio acceso al proyecto, haz clic en Seleccionar un rol y, luego, en Editor de Chronicle.
  7. Haz clic en Continuar y, luego, en Listo.
  8. Haz clic en la cuenta de servicio que creaste y, luego, ve a la pestaña Claves.
  9. Haz clic en Agregar clave > Crear clave nueva.
  10. Selecciona JSON y haz clic en Crear. El archivo de claves se descargará en tu computadora.
  11. Guarda el archivo de claves como ingestion-auth.json en el directorio del recopilador de Bindplane (/opt/observiq-otel-collector/ingestion-auth.json en Linux o C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json en Windows) o actualiza creds_file_path en config.yaml para que coincida con la ruta de acceso en la que lo guardas.
  12. Ve a IAM y administración > Configuración y copia el número de proyecto. Lo necesitarás para la configuración del exportador.

Opción 2: Descarga el archivo de autenticación de transferencia (heredado)

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia.
  4. Guarda el archivo de forma segura en el sistema en el que se instalará el agente de Bindplane.

Obtén el ID de cliente de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Instala el agente de Bindplane

Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.

Instalación en Windows

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el comando siguiente:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalación en Linux

  1. Abre una terminal con privilegios de raíz o sudo.
  2. Ejecuta el comando siguiente:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Recursos de instalación adicionales

Para obtener más opciones de instalación, consulta la guía de instalación del agente de Bindplane.

Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps

  1. Accede al archivo de configuración:

    • Ubica el archivo config.yaml. Por lo general, se encuentra en el directorio /opt/observiq-otel-collector/ en Linux o en el directorio de instalación en Windows.
    • Abre el archivo con un editor de texto (por ejemplo, nano, vi o Notepad).
  2. Edita el archivo config.yaml de la siguiente manera:

    receivers:
      udplog:
        # Replace the port and IP address as required
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/chronicle_w_labels:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        # Adjust the path to the credentials file you downloaded in Step 1
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        # Replace with your actual customer ID from Step 2
        customer_id: <CUSTOMER_ID>
        endpoint: chronicle.googleapis.com
        # Add optional ingestion labels for better organization
        log_type: 'HADOOP'
        raw_log_field: body
        ingestion_labels:
    
    service:
      pipelines:
        logs/source0__chronicle_w_labels-0:
          receivers:
            - udplog
          exporters:
            - chronicle/chronicle_w_labels
    
    • Reemplaza el puerto y la dirección IP según sea necesario en tu infraestructura.
    • Reemplaza <LOCATION> por la región de tu instancia de Google SecOps (por ejemplo, us, europe o asia-southeast1). El exportador antepone chronicle.googleapis.com con este valor.
    • Reemplaza <PROJECT_NUMBER> por el número de proyecto de IAM y administración > Configuración.
    • Reemplaza <CUSTOMER_ID> por el ID de cliente real.
    • Actualiza /path/to/ingestion-authentication-file.json a la ruta de acceso del archivo en la que se guardó el archivo de claves de la cuenta de servicio (opción 1) en el paso 1.

Exportador de la API de transferencia heredada

  • Si usas el archivo de autenticación de transferencia de la opción 2, reemplaza el bloque exporters por lo siguiente. Establece creds_file_path en la ruta de acceso al archivo de autenticación de la transferencia y, si tu instancia se encuentra fuera de EE.UU., reemplaza malachiteingestion-pa.googleapis.com por tu extremo regional (por ejemplo, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/chronicle_w_labels:
        compression: gzip
        # Adjust the path to the credentials file you downloaded in Step 1
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        # Replace with your actual customer ID from Step 2
        customer_id: <CUSTOMER_ID>
        endpoint: malachiteingestion-pa.googleapis.com
        # Add optional ingestion labels for better organization
        log_type: 'HADOOP'
        raw_log_field: body
        ingestion_labels:
    

Reinicia el agente de Bindplane para aplicar los cambios

  1. Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:

    sudo systemctl restart observiq-otel-collector
    
  2. Para reiniciar el agente de Bindplane en Windows, puedes usar la consola de Servicios o ingresar el siguiente comando:

    net stop observiq-otel-collector && net start observiq-otel-collector
    

Configura el reenvío de Syslog en Apache Hadoop

Apache Hadoop usa Log4j para el registro. Configura el agregador de Syslog adecuado según tu versión de Log4j para que los daemons de Hadoop (NameNode, DataNode, ResourceManager, NodeManager, etc.) reenvíen los registros directamente a tu receptor de syslog (host de Bindplane). Log4j se configura a través de archivos (sin IU web).

Opción 1: Configuración de Log4j 1.x

  1. Ubica el archivo log4j.properties (por lo general, en $HADOOP_CONF_DIR/log4j.properties).
  2. Agrega la siguiente configuración de SyslogAppender al archivo:

    # Syslog appender (UDP example)
    log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
    log4j.appender.SYSLOG.SyslogHost=<BINDPLANE_HOST_IP>:514
    log4j.appender.SYSLOG.Facility=LOCAL0
    log4j.appender.SYSLOG.FacilityPrinting=true
    log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
    log4j.appender.SYSLOG.layout.ConversionPattern=%d{ISO8601} level=%p logger=%c thread=%t msg=%m%n
    
    # Example: send NameNode logs to syslog
    log4j.logger.org.apache.hadoop.hdfs.server.namenode=INFO,SYSLOG
    log4j.additivity.org.apache.hadoop.hdfs.server.namenode=false
    
    # Or attach to root logger to send all Hadoop logs
    # log4j.rootLogger=INFO, SYSLOG
    
  3. Reemplaza <BINDPLANE_HOST_IP> por la dirección IP de tu host de Bindplane.

  4. Guarda el archivo.

  5. Reinicia los daemons de Hadoop para aplicar los cambios de configuración.

Opción 2: Configuración de Log4j 2.x

  1. Ubica el archivo log4j2.xml (por lo general, en $HADOOP_CONF_DIR/log4j2.xml).
  2. Agrega la siguiente configuración de adjuntador de Syslog al archivo:

    <Configuration status="WARN">
      <Appenders>
        <!-- UDP example; for TCP use protocol="TCP" -->
        <Syslog name="SYSLOG" format="RFC 5424"
                host="<BINDPLANE_HOST_IP>"
                port="514"
                protocol="UDP"
                facility="LOCAL0"
                appName="hadoop"
                enterpriseNumber="18060"
                mdcId="mdc">
          <PatternLayout pattern="%d{ISO8601} level=%p logger=%c thread=%t msg=%m %X%n"/>
        </Syslog>
      </Appenders>
    
      <Loggers>
        <!-- Send NameNode logs to syslog -->
        <Logger name="org.apache.hadoop.hdfs.server.namenode" level="info" additivity="false">
          <AppenderRef ref="SYSLOG"/>
        </Logger>
    
        <!-- Or send all Hadoop logs -->
        <Root level="info">
          <AppenderRef ref="SYSLOG"/>
        </Root>
      </Loggers>
    </Configuration>
    
  3. Reemplaza <BINDPLANE_HOST_IP> por la dirección IP de tu host de Bindplane.

  4. Guarda el archivo.

  5. Reinicia los daemons de Hadoop para aplicar los cambios de configuración.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
Permitido security_result.action Si es "false", la acción es "BLOCK". Si es "true", la acción es "ALLOW".
auth_type additional.fields.key = "auth_type", additional.fields.value.string_value Se extrajo del campo "ugi" con el patrón de grok "%{DATA:suser}@.*auth:%{WORD:auth_type}". Se quitan los paréntesis y "auth:".
call additional.fields.key = "Call#", additional.fields.value.string_value Asignación directa.
call_context additional.fields.key = "callerContext", additional.fields.value.string_value Asignación directa.
cliIP principal.ip Se asigna solo cuando existe el campo "json_data" y se analiza correctamente como JSON.
cmd principal.process.command_line Asignación directa.
cluster_name target.hostname Se usa como nombre de host de destino si está presente.
día metadata.event_timestamp.seconds Se usa con el mes, el año, las horas, los minutos y los segundos para construir event_timestamp.
descripción metadata.description Se asigna directamente.
conductor additional.fields.key = "driver", additional.fields.value.string_value Asignación directa.
DST target.ip O target.hostname O target.file.full_path Si se analiza correctamente como IP, se asigna a la IP de destino. Si el valor comienza con "/user", se asigna a la ruta de acceso del archivo de destino. De lo contrario, se asigna al nombre de host de destino.
dstport target.port Se asigna y convierte directamente en un número entero.
enforcer security_result.rule_name Asignación directa.
event_count additional.fields.key = "event_count", additional.fields.value.string_value Se asigna directamente y se convierte en una cadena.
fname src.file.full_path Asignación directa.
horas metadata.event_timestamp.seconds Se usa con el mes, el día, el año, los minutos y los segundos para construir event_timestamp.
id additional.fields.key = "id", additional.fields.value.string_value Asignación directa.
ip principal.ip Se asigna a la IP principal después de quitar cualquier carácter "/" inicial.
json_data Se analiza como JSON. Los campos extraídos se asignan a los campos de UDM correspondientes.
logType additional.fields.key = "logType", additional.fields.value.string_value Se asigna directamente.
mensaje Se usa para extraer varios campos con patrones de grok.
método network.http.method Se asigna directamente.
minutos metadata.event_timestamp.seconds Se usa con el mes, el día, el año, las horas y los segundos para construir event_timestamp.
mes metadata.event_timestamp.seconds Se usa con el día, el año, las horas, los minutos y los segundos para construir event_timestamp.
observador observer.hostname O observer.ip Si se analiza correctamente como IP, se asigna a la IP del observador. De lo contrario, se asigna al nombre de host del observador.
perm additional.fields.key = "perm", additional.fields.value.string_value Se asigna directamente.
política security_result.rule_id Se asigna y convierte directamente en una cadena.
producto metadata.product_name Asignación directa.
product_event metadata.product_event_type Asignación directa. Si es "rename", el campo "dst" se asigna a "target.file.full_path".
protocolo network.application_protocol Se asigna directamente y se convierte a mayúsculas si no es "webhdfs".
Reason security_result.summary Se asigna directamente.
repositorio additional.fields.key = "repo", additional.fields.value.string_value Asignación directa.
resType additional.fields.key = "resType", additional.fields.value.string_value Asignación directa.
result additional.fields.key = "result", additional.fields.value.string_value Se asigna y convierte directamente en una cadena.
Reintentar additional.fields.key = "Retry#", additional.fields.value.string_value Se asigna directamente.
segundos metadata.event_timestamp.seconds Se usa con el mes, el día, el año, las horas y los minutos para construir event_timestamp.
seq_num additional.fields.key = "seq_num", additional.fields.value.string_value Se asigna y convierte directamente en una cadena.
gravedad, security_result.severity Se asigna a diferentes niveles de gravedad según el valor: "INFO", "Info", "info" -> "INFORMATIONAL"; "Low", "low", "LOW" -> "LOW"; "error", "Error", "WARN", "Warn" -> "MEDIUM"; "High", "high", "HIGH" -> "HIGH"; "Critical", "critical", "CRITICAL" -> "CRITICAL".
shost principal.hostname Se usa como nombre de host principal si es diferente de "src".
src principal.ip OR principal.hostname OR observer.ip Si se analizó correctamente como IP, se asignó a la IP principal y a la del observador. De lo contrario, se asigna al nombre de host principal.
srcport principal.port Se asigna y convierte directamente en un número entero.
resumen security_result.summary Asignación directa.
suser principal.user.userid Se asigna directamente.
tags additional.fields.key = "tags", additional.fields.value.string_value Asignación directa.
hilo additional.fields.key = "thread", additional.fields.value.string_value Asignación directa.
propina target.ip Asignación directa.
ugi target.hostname Se usa como nombre de host de destino si el campo "log_data" no contiene "·".
url target.url Asignación directa.
vendor metadata.vendor_name Se asigna directamente.
versión metadata.product_version Asignación directa.
año metadata.event_timestamp.seconds Se usa con el mes, el día, las horas, los minutos y los segundos para construir event_timestamp.
N/A metadata.event_type Se configura de forma predeterminada en "NETWORK_CONNECTION". Se cambia a "STATUS_UPDATE" si no se identifica ningún objetivo.
N/A metadata.log_type Establécelo en "HADOOP".
N/A security_result.alert_state Se establece en "ALERTING" si la gravedad es "ALTA" o "CRÍTICA".
N/A is_alert Se establece en "true" si la gravedad es "ALTA" o "CRÍTICA".
N/A is_significant Se establece en "true" si la gravedad es "HIGH" o "CRITICAL".

Registro de cambios

Consulta el registro de cambios de este analizador

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