Recoger registros de hosts de AWS EC2
En este documento se explica cómo integrar los registros de hosts de AWS EC2 en Google Security Operations para monitorizarlos y analizarlos. La integración implica analizar y asignar registros de host de EC2 al modelo de datos unificado (UDM), transformar los datos y crear relaciones entre los hosts y las instancias de EC2. Los registros proporcionan información valiosa sobre las instancias, las propiedades del host, los tipos de instancia y las métricas de rendimiento que se pueden usar para la monitorización de la seguridad, la auditoría y el cumplimiento.
Antes de empezar
- Asegúrate de que tienes una instancia de Google SecOps.
- Asegúrate de que tienes acceso con privilegios a AWS.
Configurar AWS IAM y S3
- Crea un segmento de Amazon S3 siguiendo esta guía de 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 la política AmazonS3FullAccess.
- Haz clic en Siguiente.
- Haz clic en Añadir permisos.
Configurar CloudTrail para AWS KMS
- Inicia sesión en la consola de administración de AWS.
- En la barra de búsqueda, escriba y seleccione CloudTrail en la lista de servicios.
- Haz clic en Crear recorrido.
- Proporciona un nombre de ruta; por ejemplo,
EC2-Activity-Trail
. - Selecciona la casilla Habilitar en todas las cuentas de mi organización.
- Escribe el URI del segmento de S3 que has creado antes (el formato debe ser
s3://your-log-bucket-name/
) o crea un segmento de S3. - Si SSE-KMS está habilitado, proporciona un nombre para el alias de KMS de AWS o elige una clave de KMS de AWS.
- Puedes dejar el resto de los ajustes como predeterminados.
- Haz clic en Siguiente.
- Seleccione Eventos de gestión y Eventos de datos en Tipos de eventos para registrar la actividad del host de EC2.
- Haz clic en Siguiente.
- Revisa los ajustes en Revisar y crear.
- Haz clic en Crear recorrido.
- Opcional: Si has creado un nuevo contenedor, sigue estos pasos:
- Ve a S3.
- Identifica y selecciona el segmento de registro que acabas de crear.
- Selecciona la carpeta AWSLogs.
- Haz clic en Copiar URI de S3 y guárdalo.
Configurar un feed en Google SecOps para ingerir hosts de AWS EC2
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Añadir nuevo.
- En el campo Nombre del feed, introduce un nombre para el feed. Por ejemplo, Registros de hosts de AWS EC2.
- Selecciona Amazon S3 V2 como Tipo de fuente.
- Seleccione AWS EC2 Hosts (Hosts de AWS EC2) como Log type (Tipo de registro).
- Haz clic en Siguiente.
Especifique los valores de los siguientes parámetros de entrada:
- URI de S3: el URI del segmento.
s3://your-log-bucket-name/
- Sustituye
your-log-bucket-name
por el nombre real del segmento.
- Sustituye
Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
Antigüedad máxima del archivo: incluye los archivos modificados en los últimos días. El valor predeterminado es de 180 días.
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.
Espacio de nombres de recursos: el espacio de nombres de recursos.
Etiquetas de ingestión: etiqueta que se aplicará a los eventos de este feed.
- URI de S3: el URI del segmento.
Haz clic en Siguiente.
Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
AllocationTime |
entity.metadata.creation_timestamp |
El campo AllocationTime se analiza como una marca de tiempo y se asigna al campo creation_timestamp . El analizador intenta usar varios formatos (aaaa-MM-dd HH:mm:ss, RFC 3339, UNIX e ISO8601). |
AllowsMultipleInstanceTypes |
entity.entity.asset.attribute.labels.value |
El valor de AllowsMultipleInstanceTypes del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es allows_multiple_instance_types . |
AutoPlacement |
entity.entity.asset.attribute.labels.value |
El valor de AutoPlacement del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es auto_placement . |
AvailabilityZone |
entity.entity.asset.attribute.cloud.availability_zone |
El campo AvailabilityZone se asigna directamente al campo availability_zone . |
AvailabilityZoneID |
entity.entity.asset.attribute.labels.value |
El valor de AvailabilityZoneID del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es availability_zone_id . |
AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity |
entity.entity.asset.attribute.labels.value |
El valor de AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity (o AvailableCapacity.Instance.Available después de cambiarle el nombre) se convierte en una cadena y se usa como valor de una etiqueta. La tecla está configurada como available_instance_capacity_available_capacity . |
AvailableCapacity.AvailableInstanceCapacity.InstanceType |
entity.entity.asset.attribute.labels.value |
El valor de AvailableCapacity.AvailableInstanceCapacity.InstanceType (o AvailableCapacity.Instance.Type después de cambiarle el nombre) se usa como valor de una etiqueta. La tecla está configurada como available_instance_capacity_instance_type . |
AvailableCapacity.AvailableInstanceCapacity.TotalCapacity |
entity.entity.asset.attribute.labels.value |
El valor de AvailableCapacity.AvailableInstanceCapacity.TotalCapacity (o AvailableCapacity.Instance.Total después de cambiarle el nombre) se convierte en una cadena y se usa como valor de una etiqueta. La tecla está configurada como total_capacity . |
AvailableCapacity.AvailableVCpus |
entity.entity.asset.attribute.labels.value |
El valor de AvailableCapacity.AvailableVCpus (o AvailableCapacity.VCPUs después de cambiarle el nombre) se convierte en una cadena y se usa como valor de una etiqueta. La tecla está configurada como available_v_cpus . |
ClientToken |
entity.entity.asset.attribute.labels.value |
El valor de ClientToken del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es client_token . |
HostID |
entity.metadata.product_entity_id |
El campo HostID (o ID después de cambiarle el nombre) se asigna directamente al campo product_entity_id . |
HostID |
entity.entity.asset.asset_id |
El campo HostID (o ID después de cambiarle el nombre) se asigna directamente al campo asset_id . |
HostMaintenance |
entity.entity.asset.attribute.labels.value |
El valor de HostMaintenance (o Maintenance después de cambiar el nombre) del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es host_maintenance . |
HostProperties.Cores |
entity.entity.asset.hardware.cpu_number_cores |
El valor de HostProperties.Cores se convierte en un número entero sin signo y se asigna a cpu_number_cores . |
HostProperties.InstanceFamily |
entity.entity.asset.attribute.labels.value |
El valor de HostProperties.InstanceFamily del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es host_properties_instance_family . |
HostProperties.InstanceType |
entity.entity.asset.attribute.labels.value |
El valor de HostProperties.InstanceType del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es host_properties_instance_type . |
HostProperties.Sockets |
entity.entity.asset.attribute.labels.value |
El valor de HostProperties.Sockets se convierte en una cadena y se usa como valor de una etiqueta. La tecla está configurada como host_properties_sockets . |
HostProperties.TotalVCpus |
entity.entity.asset.attribute.labels.value |
El valor de HostProperties.TotalVCpus (o HostProperties.TotalVCPUs después de cambiarle el nombre) se convierte en una cadena y se usa como valor de una etiqueta. La tecla está configurada como host_properties_total_v_cpus . |
HostRecovery |
entity.entity.asset.attribute.labels.value |
El valor de HostRecovery (o Recovery después de cambiar el nombre) del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es host_recovery . |
HostReservationID |
entity.entity.asset.attribute.labels.value |
El valor de HostReservationID (o ReservationID después de cambiar el nombre) del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es host_reservation_id . |
MemberOfServiceLinkedResourceGroup |
entity.entity.asset.attribute.labels.value |
El valor de MemberOfServiceLinkedResourceGroup se convierte en una cadena y se usa como valor de una etiqueta. La tecla está configurada como member_of_service_linked_resource_group . |
OwnerID |
entity.entity.asset.attribute.labels.value |
El valor de OwnerID del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es owner_id . |
ReleaseTime |
entity.entity.asset.attribute.labels.value |
El valor de ReleaseTime del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es release_time . |
State |
entity.entity.asset.attribute.labels.value |
El valor de State del registro sin procesar se usa como valor de una etiqueta. La clave de esta etiqueta es state . |
TagSet |
entity.entity.asset.attribute.labels |
Se itera sobre la matriz TagSet y se usan los elementos Key y Value de cada etiqueta como clave y valor de una etiqueta, respectivamente. El analizador asigna el valor AMAZON_WEB_SERVICES a este campo. El collection_time del registro sin procesar se asigna al campo collected_timestamp . El analizador asigna el valor ASSET a este campo. El analizador asigna el valor AWS EC2 HOSTS a este campo. El analizador asigna el valor AWS a este campo. Las relaciones se derivan de los campos Instances y OutpostArn , pero estos campos no se asignan directamente al objeto IDM. La lógica del analizador crea objetos de relación basados en estos campos y los combina en la matriz relations . |
collection_time |
entity.metadata.collected_timestamp |
El collection_time del registro se usa como collected_timestamp del evento. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.