Cómo recopilar registros de AWS Elastic MapReduce
En este documento, se explica cómo transferir registros de AWS Elastic MapReduce (EMR) a Google Security Operations. AWS EMR es una plataforma de big data nativa de la nube que procesa grandes cantidades de datos con rapidez. La integración de los registros de EMR en Google SecOps te permite analizar la actividad del clúster y detectar posibles amenazas de seguridad.
Antes de comenzar
- Asegúrate de tener una instancia de Google SecOps.
- Asegúrate de tener acceso con privilegios a AWS.
Configura el bucket de Amazon S3
- Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Cómo crear un bucket
- Guarda el Nombre y la Región del bucket para usarlos más adelante.
- Crea un usuario siguiendo esta guía: Cómo crear un usuario de IAM.
- Selecciona el Usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- Haz clic en Crear clave de acceso en la sección Claves de acceso.
- Selecciona Servicio de terceros como Caso de uso.
- Haz clic en Siguiente.
- Opcional: Agrega 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 tarde.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Agregar permisos en la sección Políticas de permisos.
- Selecciona Agregar permisos.
- Selecciona Adjuntar políticas directamente.
- Busca y selecciona las políticas AmazonS3FullAccess y CloudWatchLogsFullAccess.
- Haz clic en Siguiente.
- Haz clic en Agregar permisos.
Configura AWS EMR para reenviar registros
- Accede a 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 Clústeres.
- Busca y selecciona el clúster de EMR para el que deseas habilitar el registro.
- Haz clic en Editar en la página Detalles del clúster.
- En la pantalla Editar clúster, ve a la sección Registro.
- Selecciona Habilitar el registro.
- Especifica el bucket de S3 en el que se almacenarán los registros.
- Especifica el URI de S3 en el formato
s3://your-bucket-name/
(esto almacenará todos los registros de EMR 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.
Configura un feed en Google SecOps para transferir registros de AWS EMR
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de AWS EMR).
- Selecciona Amazon S3 como el Tipo de fuente.
- Selecciona AWS EMR como el Tipo de registro.
- Haz clic en Siguiente.
Especifica valores para los siguientes parámetros de entrada:
- Región: Es la región en la que se encuentra el bucket de Amazon S3.
- URI de S3: Es el URI del bucket.
s3://your-log-bucket-name/
- Reemplaza
your-log-bucket-name
por el nombre real del bucket.
- Reemplaza
- El URI es un: Selecciona Directorio o Directorio que incluye subdirectorios.
Opciones de eliminación de fuentes: Selecciona la opción de eliminación según tus preferencias.
ID de clave de acceso: Es la clave de acceso del usuario con acceso al bucket de S3.
Clave de acceso secreta: Es la clave secreta del usuario con acceso al bucket de S3.
Espacio de nombres de recursos: Es el espacio de nombres de recursos.
Etiquetas de transferencia: Es la etiqueta que se aplicará a los eventos de este feed.
Haz clic en Siguiente.
Revisa la configuración de tu nuevo feed en la pantalla Finalizar y, luego, haz clic en Enviar.
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 en el registro sin formato. |
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 en el registro sin formato. |
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 en el registro sin formato. |
bytes |
network.received_bytes |
Se asigna directamente desde el campo bytes en el registro sin procesar y se convierte en un número 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 en el registro sin formato. |
cmd |
target.process.command_line |
Se asigna directamente desde el campo cmd en el registro sin formato. |
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 en el registro sin formato. |
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 en el 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 en el registro sin formato. |
description |
security_result.description |
Se asigna directamente desde el campo description en el registro sin formato. |
dfs.FSNamesystem.* |
additional.fields[].key |
Para generar la clave, se concatena "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 en el 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 en el registro sin formato. |
duration |
network.session_duration.seconds |
Se asignan directamente desde el campo duration en el registro sin procesar y se convierten 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 en el registro sin formato. Se extrae del campo ip_port con grok y manipulación de cadenas. Se extrae del campo ip_port con grok y manipulación de cadenas, y se convierte en un número entero. |
event_type |
metadata.event_type |
Se determina según 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 en el registro sin formato. |
host |
principal.hostname |
Se asigna directamente desde el campo host en el registro sin formato. |
host |
target.hostname |
Se asigna directamente desde el campo host en el registro sin formato. |
host_ip |
principal.ip |
Se asigna directamente desde el campo host_ip en el registro sin formato. |
host_port |
principal.port |
Se asignan directamente desde el campo host_port en el registro sin procesar y se convierten en un número entero. |
http_url |
target.url |
Se asigna directamente desde el campo http_url en el registro sin formato. |
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 en el registro sin formato. |
kind |
metadata.product_event_type |
Se asigna directamente desde el campo kind en el registro sin formato. El valor "AWS_EMR" se asigna a través del analizador. El valor "AWS EMR" se asigna a través del analizador. El valor "AMAZON" se asigna a través del 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 en el registro sin formato. |
op |
metadata.product_event_type |
Se asignan directamente desde el campo op o OPERATION en el registro sin formato. |
proto |
network.application_protocol |
Se extrae del campo http_url con 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 en el registro sin formato. |
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 en el registro sin formato. |
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 en el 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 en el registro sin formato. |
result |
security_result.action_details |
Se asigna directamente desde el campo RESULT en el registro sin formato. |
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 en el registro sin formato. |
severity |
security_result.severity |
Se asigna desde el campo severity en el registro sin procesar. INFO se asigna a INFORMATIONAL y WARN se asigna 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 en el registro sin formato. |
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 en el registro sin formato. |
summary |
security_result.summary |
Se asigna directamente desde el campo summary en el registro sin formato. |
target_app |
target.application |
Se asigna directamente desde el campo TARGET en el registro sin formato. |
target_ip |
target.ip |
Se asignan directamente desde el campo target_ip o IP en el registro sin formato. |
target_port |
target.port |
Se asignan directamente desde el campo target_port en el registro sin procesar y se convierten en un número entero. |
timestamp |
metadata.event_timestamp |
Se asigna directamente desde el campo timestamp en el registro sin procesar y se analiza como una marca de tiempo ISO8601. |
timestamp |
event.timestamp |
Se asigna directamente desde el campo timestamp en el 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 en el registro sin formato. |
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 en el registro sin formato. |
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 en el registro sin formato. |
user |
target.user.userid |
Se asignan directamente desde el campo USER o ugi en el registro sin formato. |
Cambios
2023-12-19
- Corrección de errores: Se corrigieron los resultados inestables del patrón Grok.
2023-10-30
- Sin embargo, el analizador se creó recientemente.
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.