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 contenedor 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 la configuración 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-namepor 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 nueva configuración del feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.
Formatos de registro de hosts de AWS EC2 admitidos
El analizador de hosts de AWS EC2 admite registros en formato JSON.
Registros de ejemplo de hosts de AWS EC2 admitidos
JSON
{ "AllocationTime": "2018-01-23T12:33:31.692Z", "AllowsMultipleInstanceTypes": "", "AssetID": "", "AutoPlacement": "off", "AvailabilityZone": "us-east-1a", "AvailabilityZoneID": "", "AvailableCapacity": { "VCPUs": 96, "Instance": { "Available": 48, "Total": 48, "Type": "m5.large" } }, "ClientToken": "", "ID": "h-05abcdd12ee9ca123", "Maintenance": "", "Properties": { "Cores": 48, "InstanceFamily": "", "InstanceType": "m5.large", "Sockets": 2, "TotalVCPUs": 96 }, "Recovery": "off", "ReservationID": "", "Instances": null, "MemberOfServiceLinkedResourceGroup": false, "OutpostARN": "", "OwnerID": "", "ReleaseTime": "", "State": "available", "TagSet": null }
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 cambiar 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 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.