Recoger registros de AWS Elastic MapReduce
En este documento se explica cómo ingerir registros de AWS Elastic MapReduce (EMR) en Google Security Operations. AWS EMR es una plataforma de Big Data nativa de la nube que procesa grandes cantidades de datos rápidamente. Al integrar los registros de EMR en Google SecOps, puedes analizar la actividad del clúster y detectar posibles amenazas de seguridad.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps
- Acceso privilegiado a AWS
Configurar un segmento de Amazon S3
- Crea un segmento de Amazon S3 siguiendo esta guía del usuario: Crear un segmento.
- Guarda el nombre y la región del bucket para usarlos más adelante.
- Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
- Selecciona el Usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- En la sección Claves de acceso, haz clic en Crear clave de acceso.
- Selecciona Servicio de terceros como Caso práctico.
- Haz clic en Siguiente.
- Opcional: añade una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para usarlas más adelante.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- En la sección Políticas de permisos, haz clic en Añadir permisos.
- Selecciona Añadir permisos.
- Seleccione Adjuntar políticas directamente.
- Busca y selecciona las políticas AmazonS3FullAccess y CloudWatchLogsFullAccess.
- Haz clic en Siguiente.
- Haz clic en Añadir permisos.
Cómo configurar AWS EMR para reenviar registros
- Inicia sesión en la consola de administración de AWS.
- En la barra de búsqueda, escribe EMR y selecciona Amazon EMR en la lista de servicios.
- Haz clic en Clusters.
- Busca y selecciona el clúster de EMR para el que quieras habilitar el registro.
- En la página Detalles del clúster, haga clic en Editar.
- En la pantalla Editar clúster, ve a la sección Registro.
- Selecciona Habilitar registro.
- Especifica el segmento de S3 en el que se almacenarán los registros.
- Especifica el URI de S3 con el formato
s3://your-bucket-name/
(de esta forma, todos los registros de EMR se almacenarán en la raíz del bucket). - Selecciona los siguientes tipos de registro:
Step logs
Application logs
YARN logs
System logs
HDFS Logs
(si usas Hadoop)
- Haz clic en Guardar.
Configurar feeds
Hay dos puntos de entrada diferentes para configurar feeds en la plataforma Google SecOps:
- Configuración de SIEM > Feeds > Añadir nuevo feed
- Centro de contenido > Paquetes de contenido > Empezar
Cómo configurar el feed de AWS EMR
- Haz clic en el paquete Amazon Cloud Platform.
- Busca el tipo de registro AWS EMR.
Especifique los valores en los campos siguientes.
- Tipo de fuente: Amazon SQS V2
- Nombre de la cola: el nombre de la cola de SQS de la que se va a leer.
- URI de S3: el URI del segmento.
s3://your-log-bucket-name/
- Sustituye
your-log-bucket-name
por el nombre real de tu segmento de S3.
- Sustituye
Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras según tus preferencias de ingesta.
Antigüedad máxima del archivo: incluye los archivos modificados en los últimos días. El valor predeterminado es 180 días.
ID de clave de acceso a la cola de SQS: una clave de acceso de cuenta que es una cadena alfanumérica de 20 caracteres.
Clave de acceso secreta de la cola de SQS: una clave de acceso de cuenta que es una cadena alfanumérica de 40 caracteres.
Opciones avanzadas
- Nombre del feed: un valor rellenado automáticamente que identifica el feed.
- Espacio de nombres del recurso: espacio de nombres asociado al feed.
- Etiquetas de ingestión: etiquetas aplicadas a todos los eventos de este feed.
Haga clic en Crear feed.
Para obtener más información sobre cómo configurar varios feeds para diferentes tipos de registros en esta familia de productos, consulta el artículo Configurar feeds por producto.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
app_id |
additional.fields[].key |
El valor "APP" se asigna a través del analizador. |
app_id |
additional.fields[].value.string_value |
Se asigna directamente desde el campo APP del registro sin procesar. |
app_name |
additional.fields[].key |
El valor "APPNAME" se asigna a través del analizador |
app_name |
additional.fields[].value.string_value |
Se asigna directamente desde el campo APPNAME del registro sin procesar. |
blockid |
additional.fields[].key |
El valor "blockid" se asigna a través del analizador. |
blockid |
additional.fields[].value.string_value |
Se asigna directamente desde el campo blockid del registro sin procesar. |
bytes |
network.received_bytes |
Se asigna directamente desde el campo bytes del registro sin procesar y se convierte en un entero sin signo. |
cliID |
additional.fields[].key |
El valor "cliID" se asigna a través del analizador. |
cliID |
additional.fields[].value.string_value |
Se asigna directamente desde el campo cliID del registro sin procesar. |
cmd |
target.process.command_line |
Se asigna directamente desde el campo cmd del registro sin procesar. |
comp_name |
additional.fields[].key |
El valor "COMP" se asigna a través del analizador. |
comp_name |
additional.fields[].value.string_value |
Se asigna directamente desde el campo COMP del registro sin procesar. |
configuration_version |
additional.fields[].key |
El valor "configuration_version" se asigna a través del analizador. |
configuration_version |
additional.fields[].value.string_value |
Se asigna directamente desde el campo configuration_version del registro sin procesar y se convierte en una cadena. |
containerID |
additional.fields[].key |
El valor "containerID" se asigna a través del analizador. |
containerID |
additional.fields[].value.string_value |
Se asigna directamente desde el campo CONTAINERID del registro sin procesar. |
description |
security_result.description |
Se asigna directamente desde el campo description del registro sin procesar. |
dfs.FSNamesystem.* |
additional.fields[].key |
La clave se genera concatenando "dfs.FSNamesystem." con la clave de los datos JSON. |
dfs.FSNamesystem.* |
additional.fields[].value.string_value |
El valor se asigna directamente desde el valor correspondiente del objeto JSON dfs.FSNamesystem , convertido en una cadena. |
duration |
additional.fields[].key |
El valor "duration" se asigna a través del analizador. |
duration |
additional.fields[].value.string_value |
Se asigna directamente desde el campo duration del registro sin procesar. |
duration |
network.session_duration.seconds |
Se asigna directamente desde el campo duration del registro sin procesar y se convierte en un número entero. |
environment |
additional.fields[].key |
El valor "environment" se asigna a través del analizador. |
environment |
additional.fields[].value.string_value |
Se asigna directamente desde el campo environment del registro sin procesar. Se extrae del campo ip_port mediante grok y la manipulación de cadenas. Se extrae del campo ip_port mediante grok y la manipulación de cadenas, y se convierte en un número entero. |
event_type |
metadata.event_type |
Se determina mediante la lógica del analizador en función de la presencia de información de principal y target . Puede ser NETWORK_CONNECTION , USER_RESOURCE_ACCESS , STATUS_UPDATE o GENERIC_EVENT . |
file_path |
target.file.full_path |
Se asigna directamente desde el campo file_path del registro sin procesar. |
host |
principal.hostname |
Se asigna directamente desde el campo host del registro sin procesar. |
host |
target.hostname |
Se asigna directamente desde el campo host del registro sin procesar. |
host_ip |
principal.ip |
Se asigna directamente desde el campo host_ip del registro sin procesar. |
host_port |
principal.port |
Se asigna directamente desde el campo host_port del registro sin procesar y se convierte en un número entero. |
http_url |
target.url |
Se asigna directamente desde el campo http_url del registro sin procesar. |
index |
additional.fields[].key |
El valor "index" se asigna a través del analizador. |
index |
additional.fields[].value.string_value |
Se asigna directamente desde el campo index del registro sin procesar. |
kind |
metadata.product_event_type |
Se asigna directamente desde el campo kind del registro sin procesar. El valor "AWS_EMR" se asigna mediante el analizador El valor "AWS EMR" se asigna mediante el analizador El valor "AMAZON" se asigna mediante el analizador |
offset |
additional.fields[].key |
El valor "offset" se asigna a través del analizador. |
offset |
additional.fields[].value.string_value |
Se asigna directamente desde el campo offset del registro sin procesar. |
op |
metadata.product_event_type |
Se asigna directamente desde el campo op o OPERATION del registro sin procesar. |
proto |
network.application_protocol |
Se extrae del campo http_url mediante grok y se convierte a mayúsculas. |
puppet_version |
additional.fields[].key |
El valor "puppet_version" se asigna a través del analizador |
puppet_version |
additional.fields[].value.string_value |
Se asigna directamente desde el campo puppet_version del registro sin procesar. |
queue_name |
additional.fields[].key |
El valor "queue_name" se asigna a través del analizador. |
queue_name |
additional.fields[].value.string_value |
Se asigna directamente desde el campo queue_name del registro sin procesar. |
report_format |
additional.fields[].key |
El valor "report_format" se asigna a través del analizador. |
report_format |
additional.fields[].value.string_value |
Se asigna directamente desde el campo report_format del registro sin procesar y se convierte en una cadena. |
resource |
additional.fields[].key |
El valor "resource" se asigna a través del analizador. |
resource |
additional.fields[].value.string_value |
Se asigna directamente desde el campo resource del registro sin procesar. |
result |
security_result.action_details |
Se asigna directamente desde el campo RESULT del registro sin procesar. |
security_id |
additional.fields[].key |
El valor "security_id" se asigna a través del analizador. |
security_id |
additional.fields[].value.string_value |
Se asigna directamente desde el campo security_id del registro sin procesar. |
severity |
security_result.severity |
Se asigna desde el campo severity del registro sin procesar. INFO se ha asignado a INFORMATIONAL y WARN a MEDIUM . |
srvID |
additional.fields[].key |
El valor "srvID" se asigna a través del analizador. |
srvID |
additional.fields[].value.string_value |
Se asigna directamente desde el campo srvID del registro sin procesar. |
status |
additional.fields[].key |
El valor "status" se asigna a través del analizador. |
status |
additional.fields[].value.string_value |
Se asigna directamente desde el campo status del registro sin procesar. |
summary |
security_result.summary |
Se asigna directamente desde el campo summary del registro sin procesar. |
target_app |
target.application |
Se asigna directamente desde el campo TARGET del registro sin procesar. |
target_ip |
target.ip |
Se asigna directamente desde el campo target_ip o IP del registro sin procesar. |
target_port |
target.port |
Se asigna directamente desde el campo target_port del registro sin procesar y se convierte en un número entero. |
timestamp |
metadata.event_timestamp |
Se asigna directamente desde el campo timestamp del registro sin procesar y se analiza como una marca de tiempo ISO8601. |
timestamp |
event.timestamp |
Se asigna directamente desde el campo timestamp del registro sin procesar y se analiza como una marca de tiempo ISO8601. |
trade_date |
additional.fields[].key |
El valor "trade_date" se asigna a través del analizador. |
trade_date |
additional.fields[].value.string_value |
Se asigna directamente desde el campo trade_date del registro sin procesar. |
transaction_uuid |
additional.fields[].key |
El valor "transaction_uuid" se asigna a través del analizador. |
transaction_uuid |
additional.fields[].value.string_value |
Se asigna directamente desde el campo transaction_uuid del registro sin procesar. |
type |
additional.fields[].key |
El valor "type" se asigna a través del analizador. |
type |
additional.fields[].value.string_value |
Se asigna directamente desde el campo type del registro sin procesar. |
user |
target.user.userid |
Se asigna directamente desde el campo USER o ugi del registro sin procesar. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.