Recopila registros de flujo de VPC de AWS

Versión del analizador: 17.0

Compatible con:

En este documento, se explica cómo transferir registros de flujo de VPC de AWS a Google Security Operations con tres métodos diferentes: Amazon S3 (formato de texto), registros de Amazon CloudWatch con Kinesis Data Firehose y formato CSV en Amazon S3. Los registros de flujo de VPC de AWS son una función que te permite capturar información sobre el tráfico de IP que entra y sale de las interfaces de red de tu VPC. Esta integración te permite enviar estos registros a Google SecOps para su análisis y supervisión.

Formatos de registros de flujo de VPC de AWS compatibles

Google SecOps admite la transferencia de registros de flujo de VPC de AWS en dos formatos de texto principales:

  • Formato JSON: El tipo de registro AWS_VPC_FLOW analiza los registros en formato JSON. En este formato, cada entrada de registro incluye una clave y su valor correspondiente, lo que hace que los datos se describan a sí mismos.
  • Formato CSV: Google SecOps también proporciona un analizador para los registros de flujo de VPC de AWS en formato CSV. En este formato, las claves de campo se indican solo una vez en la fila de encabezado, y las filas siguientes contienen solo valores separados por comas.

Debido a que el formato CSV no incluye claves de campo en cada entrada de registro, el analizador AWS_VPC_FLOW_CSV se basa en un orden estricto y predefinido de valores. Tus archivos CSV deben cumplir con el siguiente orden de campos para que se analicen correctamente:

   Version,Account_id,Interface_id,Srcaddr,Dstaddr,Srcport,Dstport,Protocol,Packets,Bytes,Start,End,Action,Log_status,Vpc_id,Subnet_id,Instance_id,Tcp_flags,Type,Pkt_srcaddr,Pkt_dstaddr,Region,Az_id,Sublocation_type,Sublocation_id,Pkt_src_aws_service,Pkt_dst_aws_service,Flow_direction,Traffic_path,Ecs_cluster_arn,Ecs_cluster_name,Ecs_container_instance_arn,Ecs_container_instance_id,Ecs_container_id,Ecs_second_container_id,Ecs_service_name,Ecs_task_definition_arn,Ecs_task_arn,Ecs_task_id

A continuación, se muestra un ejemplo de una línea de registro CSV:

   7,369096419186,eni-0520bb5efed19d33a,10.119.32.34,10.119.223.3,51256,16020,6,14,3881,1723542839,1723542871,ACCEPT,OK,vpc-0769a6844ce873a6a,subnet-0cf9b2cb32f49f258,i-088d6080f45f5744f,0,IPv4,10.119.32.34,10.119.223.3,ap-northeast-1,apne1-az4,-,-,-,-,ingress,,-,-,-,-,-,-,-,-,-,-

En el caso de los campos en los que no haya un valor disponible, se debe pasar un valor vacío (por ejemplo, , ,) para mantener el orden posicional correcto dentro de la fila del archivo CSV.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Instancia de Google SecOps.
  • Acceso con privilegios a AWS

Opción 1: Configura la exportación de registros de flujo de VPC de AWS con AWS S3 (formato de texto)

En la siguiente sección, se describe cómo configurar los permisos de Amazon S3 y de Identity and Access Management para habilitar la exportación de registros de flujo de VPC para que Google SecOps los analice.

Configura el bucket de AWS S3 y la IAM para Google SecOps

  1. Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Cómo crear un bucket.
  2. Guarda el Nombre y la Región del bucket para consultarlos en el futuro (por ejemplo, aws-vpc-flowlogs).
  3. Crea un usuario siguiendo esta guía del usuario: Crea un usuario de IAM.
  4. Selecciona el usuario creado.
  5. Selecciona la pestaña Credenciales de seguridad.
  6. Haz clic en Crear clave de acceso en la sección Claves de acceso.
  7. Selecciona Servicio de terceros como Caso de uso.
  8. Haz clic en Siguiente.
  9. Opcional: Agrega una etiqueta de descripción.
  10. Haz clic en Crear clave de acceso.
  11. Haz clic en Download CSV file para guardar la Access Key y la Secret Access Key para consultarlas en el futuro.
  12. Haz clic en Listo.
  13. Selecciona la pestaña Permisos.
  14. Haz clic en Agregar permisos en la sección Políticas de permisos.
  15. Selecciona Agregar permisos.
  16. Selecciona Adjuntar políticas directamente.
  17. Busca la política AmazonS3FullAccess.
  18. Selecciona la política.
  19. Haz clic en Siguiente.
  20. Haz clic en Agregar permisos.

Crea registros de flujo de VPC (destino: Amazon S3, formato de texto)

  1. Abre AWS Console > VPC > Your VPCs/Subnets/Network interfaces y selecciona el permiso que deseas registrar.
  2. Haz clic en Acciones > Crear registro de flujo.
  3. Proporciona los siguientes detalles de configuración:
    • Filtro: Elige Todos (o Aceptar/Rechazar) según tu política.
    • Intervalo de agregación máximo: Selecciona 1 minuto (recomendado) o 10 minutos.
    • Destino: Enviar a un bucket de Amazon S3.
    • ARN del bucket de S3: Ingresa el nombre del bucket creado en la sección anterior con el siguiente formato: arn:aws:s3:::<your-bucket>.
    • Formato de registro de registro: Selecciona Formato predeterminado de AWS.
    • Formato del archivo de registro: Selecciona Texto (sin formato).
    • Opcional: Inhabilita los prefijos compatibles con Hive y las particiones por hora, a menos que los necesites.
  4. Haz clic en Crear registro de flujo.

Configura un feed en Google SecOps para transferir registros de flujo de VPC de AWS (texto de S3)

  1. Ve a Configuración > Administración de datos > Feeds. Si estás en una plataforma solo de SIEM, ve a Configuración > Feeds.
  2. Haz clic en + Agregar feed nuevo.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, AWS VPC Flow Logs - S3 (Text)).
  4. Selecciona Amazon S3 V2 como el Tipo de fuente.
  5. Selecciona Flujo de VPC de AWS como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:
    • URI de S3: Ingresa la dirección del bucket de S3 (por ejemplo, s3://<your-bucket>/AWSLogs/<account-id>/vpcflowlogs/<region>/).
    • Opciones de eliminación de la fuente: Selecciona la opción de eliminación según tu preferencia.
    • Antigüedad máxima del archivo: 180 días de forma predeterminada.
    • 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 del recurso: Es el espacio de nombres del recurso.
    • Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
  8. Haz clic en Siguiente.
  9. Revisa la configuración de tu feed de noticias nuevo en la pantalla Finalizar y, luego, haz clic en Enviar.

Opción 2: Configura la exportación de registros de flujo de VPC de AWS con Amazon CloudWatch Logs y Kinesis Data Firehose

Después de configurar los registros de flujo para que se envíen a CloudWatch, esta opción proporciona una capa adicional de exportación de datos, ya que transmite esos datos de registro a un destino de tu elección con Kinesis Data Firehose.

Crea registros de flujo de VPC (destino: Amazon CloudWatch Logs)

  1. Abre Consola de AWS > VPC > Tus VPCs/Subredes/Interfaces de red.
  2. Haz clic en Acciones > Crear registro de flujo.
  3. Proporciona los siguientes detalles de configuración:
    • Filtro: Elige Todos (o Aceptar/Rechazar) según tu política.
    • Intervalo de agregación máximo: Selecciona 1 minuto (recomendado) o 10 minutos.
    • Destino: Selecciona Enviar a CloudWatch Logs.
    • Grupo de registros de destino: Selecciona o crea un grupo de registros (por ejemplo, /aws/vpc/flowlogs).
    • Rol de IAM: Selecciona un rol que pueda escribir en CloudWatch Logs.
    • Formato del registro de flujo: Selecciona Predeterminado de AWS (versión 2) o Personalizado (incluye campos adicionales).
  4. Haz clic en Crear registro de flujo.

Crea un feed en Google SecOps para obtener la URL del extremo y la clave secreta

  1. Ve a Configuración > Administración de datos > Feeds. Si estás en una plataforma solo de SIEM, ve a Configuración > Feeds.
  2. Haz clic en + Agregar feed nuevo.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, AWS VPC Flow Logs - CloudWatch via Firehose).
  4. Selecciona Amazon Data Firehose como el Tipo de fuente.
  5. Selecciona Flujo de VPC de AWS como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:
    • Delimitador de división: n opcional.
    • Espacio de nombres del recurso: Es el espacio de nombres del recurso (por ejemplo, aws.vpc.flowlogs.cwl).
    • Etiquetas de transferencia: Es la etiqueta que se aplicará a los eventos de este feed (por ejemplo, source=vpc_flow_firehose).
  8. Haz clic en Siguiente.
  9. Revisa la configuración del feed y haz clic en Enviar.
  10. Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
  11. Copia y guarda la clave secreta, ya que no podrás volver a verla.
  12. Ve a la pestaña Detalles.
  13. Copia la URL del extremo del feed del campo Información del extremo.
  14. Haz clic en Listo.

Crea una clave de API para el feed de Amazon Data Firehose

  1. Ve a la página Credenciales de la consola de Google Cloud.
  2. Haz clic en Crear credenciales y, luego, selecciona Clave de API.
  3. Copia y guarda la clave en una ubicación segura.
  4. Restringe el acceso de la clave de API a la API de Google SecOps.

Configura los permisos de IAM para los registros de CloudWatch en Firehose

  1. En la consola de AWS, ve a IAM > Políticas > Crear política > JSON.
  2. Pega el siguiente JSON de política y reemplaza <region> y <account-id> por tu región y el ID de cuenta de AWS:

    {
    "Version": "2012-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Action": [
          "firehose:PutRecord",
          "firehose:PutRecordBatch"
          ],
          "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/cwlogs-to-secops"
       }
    ]
    }
    
  3. Asigna el nombre CWLtoFirehoseWrite a la política y haz clic en Crear política.

  4. Ve a IAM > Roles > Crear rol.

  5. Selecciona Política de confianza personalizada y pega lo siguiente:

    {
    "Version": "2012-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Principal": {
          "Service": "logs.<region>.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
       }
    ]
    }
    
  6. Adjunta la política CWLtoFirehoseWrite al rol.

  7. Asigna el nombre CWLtoFirehoseRole al rol y haz clic en Crear rol.

Configura Amazon Kinesis Data Firehose para Google SecOps

  1. En la consola de AWS, ve a Kinesis > Data Firehose > Create delivery stream.
  2. Proporciona los siguientes detalles de configuración:
    • Fuente: Selecciona PUT directo o de otras fuentes.
    • Destino: Elige Extremo HTTP.
    • Nombre: cwlogs-to-secops
    • URL del extremo HTTP: Ingresa la URL del extremo HTTPS del feed de Google SecOps con la clave de API adjunta: <ENDPOINT_URL>?key=<API_KEY>
    • Método HTTP: Selecciona POST.
  3. En Clave de acceso, haz lo siguiente:
    • Ingresa la clave secreta generada en el feed de Google SecOps (se convierte en el encabezado X-Amz-Firehose-Access-Key).
    • Sugerencias de almacenamiento en búfer: Establece Tamaño del búfer = 1 MiB, Intervalo de almacenamiento en búfer = 60 segundos.
    • Compresión: Selecciona Inhabilitada.
    • Copia de seguridad de S3: selecciona Inhabilitada.
    • Deja los parámetros de configuración de reintento y registro como predeterminados.
  4. Haz clic en Crear flujo de entrega.

Suscribe el grupo de registros de CloudWatch al flujo de Firehose

  1. Ve a CloudWatch > Registros > Grupos de registros.
  2. Selecciona el grupo de registros de destino (por ejemplo, /aws/vpc/flowlogs).
  3. Abre la pestaña Filtros de suscripción y haz clic en Crear.
  4. Elige Crear filtro de suscripción de Amazon Kinesis Data Firehose.
  5. Proporciona los siguientes detalles de configuración:
    • Destino: Selecciona el flujo de publicación cwlogs-to-secops.
    • Otorgar permiso: Elige el rol CWLtoFirehoseRole.
    • Nombre del filtro: Ingresa all-events.
    • Patrón de filtro: Deja este campo vacío para enviar todos los eventos.
  6. Haz clic en Iniciar transmisión.

Opción 3: Configura los registros de flujo de VPC de AWS en formato CSV con Amazon S3

Transforma los registros al formato CSV (opcional)

  1. Asegúrate de que las filas de tu CSV sigan un orden de columnas estricto y coherente que coincida con los campos que seleccionaste en el formato personalizado de tu registro de flujo de VPC (por ejemplo, el conjunto de campos canónico v2 o tu conjunto v5/v7). No incluyas una fila de encabezado en los archivos de producción, a menos que la opción del analizador espere una.
  2. Escribe archivos CSV con un prefijo estable, por ejemplo: s3://<your-bucket>/vpcflowlogs-csv/<region>/year=<year>/month=<month>/day=<day>/.

Configura un feed en Google SecOps para transferir registros de flujo de VPC de AWS (CSV)

  1. Ve a Configuración > Administración de datos > Feeds. Si estás en una plataforma solo de SIEM, ve a Configuración > Feeds.
  2. Haz clic en + Agregar feed nuevo.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, AWS VPC Flow Logs - S3 (CSV)).
  4. Selecciona Amazon S3 V2 como el Tipo de fuente.
  5. Selecciona AWS VPC Flow (CSV) como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:
    • URI de S3: Ingresa la dirección del bucket de S3 (por ejemplo, s3://<your-bucket>/vpcflowlogs-csv/<region>/).
    • Opciones de eliminación de la fuente: Selecciona la opción de eliminación según tu preferencia.
    • Antigüedad máxima del archivo: 180 días de forma predeterminada.
    • 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 del recurso: Es el espacio de nombres del recurso.
    • Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
  8. Haz clic en Siguiente.
  9. Revisa la configuración de tu feed de noticias nuevo en la pantalla Finalizar y, luego, haz clic en Enviar.

Tabla de asignación de UDM

Muestra de registro Campo de registro Asignación de UDM
"entries: { data: ""7,11111111111,eni-11aa1a1a1a1aa1a,1.1.1.1,2.2.2.2,51256,16020,6,14,3881,1723542839,1723542871,ACCEPT,OK,vpc-1aa1a1a1a1aa1aa,subnet-1aa1a1a1a1aa1a1,i-1aa1a1a1a1aa1a,0,IPv4,1.1.1.1,2.2.2.2,ap-northeast-1,masked_zone,-,-,-,-,ingress,,-,-,-,-,-,-,-,-,-,-"" collection_time: { seconds: 1741159282 nanos: 254633949 } }" 7 metadata.product_version
11111111111 metadata.product_log_id
eni-11aa1a1a1a1aa1a principal.user.product_object_id
1.1.1.1 principal.ip
2.2.2.2 target.ip
51256 principal.port
16020 target.port
6 network.ip_protocol
14 network.sent_packets
3881 network.received_bytes
1723542839 metadata.event_timestamp about.resource.attribute.labels(start_time)
1723542871 metadata.ingested_timestamp about.resource.attribute.labels(end_time)
ACCEPT security_result.action security_result.action_details
OK about.resource.attribute.labels (log-status)
vpc-1aa1a1a1a1aa1a principal.resource.attribute.labels (vpcID)
subnet-a1a1a1a1a1 principal.asset_id
i-1aa1a1a1a1aa1a principal.resource_ancestors.product_object_id
0 about.resource.attribute.labels (type)
IPv4 additional.fields (pkt-srcaddr-ip)
1.1.1.1 intermediary.ip
2.2.2.2 additional.fields (tcp_flags)
ap-northeast-1 not getting mapped
masked_zone not getting mapped
- about.resource.attribute.labels (sublocation_type)
- about.resource.attribute.labels (sublocation_id)
- about.resource.attribute.labels (pkt_src_aws_service)
- about.resource.attribute.labels (pkt_dst_aws_service)
ingress network.direction
additional.fields (traffic_path)
- not getting mapped
- not getting mapped-
"entries: { data: ""7,11111111111,eni-11aa1a1a1a1aa1a,5.5.5.5,2.2.2.2,53102,16020,6,8,2112,1723542839,1723542871,ACCEPT,OK,vpc-1aa1a1a1a1aa1a,subnet-1aa1a1a1a1aa1a,i-1aa1a1a1a1aa1a,0,IPv4,5.5.5.5,2.2.2.2,ap-northeast-1,masked_zone,-,-,-,-,ingress,,-,-,-,-,-,-,-,-,-,-"" collection_time: { seconds: 1741159390 nanos: 374934225 } }" 7 metadata.product_version
11111111111 metadata.product_log_id
eni-11aa1a1a1a1aa1a principal.user.product_object_id
5.5.5.5 principal.ip
2.2.2.2 target.ip
53102 principal.port
16020 target.port
6 network.ip_protocol
8 network.sent_packets
2112 network.received_bytes
1723542839 metadata.event_timestamp about.resource.attribute.labels(start_time)
1723542871 metadata.ingested_timestamp about.resource.attribute.labels(end_time)
ACCEPT security_result.action security_result.action_details
OK about.resource.attribute.labels (log-status)
vpc-1aa1a1a1a1aa1a principal.resource.attribute.labels (vpcID)
subnet-1aa1a1a1a1aa1a principal.asset_id
i-1aa1a1a1a1aa1a principal.resource_ancestors.product_object_id
0 about.resource.attribute.labels (type)
IPv4 additional.fields (pkt-srcaddr-ip)
5.5.5.5 intermediary.ip
2.2.2.2 additional.fields (tcp_flags)
ap-northeast-1 not getting mapped
masked_zone not getting mapped
- about.resource.attribute.labels (sublocation_type)
- about.resource.attribute.labels (sublocation_id)
- about.resource.attribute.labels (pkt_src_aws_service)
- about.resource.attribute.labels (pkt_dst_aws_service)
ingress network.direction
additional.fields (traffic_path)
- not getting mapped
- not getting mapped1
"entries: { data: ""7,11111111111,eni-11aa1a1a1a1aa1a,1.1.2.2,1.1.2.1,36358,42659,6,1091,3.754327e+06,1747981553,1747981582,ACCEPT,OK,vpc-1aa1a1a1a1aa1a,subnet-1aa1a1a1a1aa1a,i-1aa1a1a1a1aa1a,0,IPv4,1.1.2.2,1.1.2.1,ap-northeast-1,apne1-az1,-,-,-,-,egress,1,-,-,-,-,-,-,-,-,-,-,604249"" collection_time: { seconds: 1748238552 nanos: 479960397 } }" 7 metadata.product_version
11111111111 metadata.product_log_id
eni-11aa1a1a1a1aa1a about.resource.attribute.labels
1.1.2.2 principal.ip
1.1.2.1 target.ip
36358 principal.port
42659 target.port
6 network.ip_protocol
1091 network.sent_packets
3.75E+06 network.sent_bytes
1747981553 metadata.event_timestamp about.resource.attribute.labels(start_time)
1747981582 metadata.ingested_timestamp about.resource.attribute.labels(end_time)
ACCEPT security_result.action security_result.action_details
OK about.resource.attribute.labels (log-status)
vpc-1aa1a1a1a1aa1a principal.resource.attribute.labels (vpcID)
subnet-1aa1a1a1a1aa1a principal.asset_id
i-1aa1a1a1a1aa1a principal.resource_ancestors.product_object_id
0 additional.fields (tcp_flags)
IPv4 about.resource.attribute.labels(type)
1.1.2.2 "additional.fields (pkt-srcaddr-ip)
Condición:
if [pkt_dstaddr_ip] != [dstaddr] will map to intermediary.ip"
1.1.2.1 "additional.fields (pkt-dstaddr-ip)
Condición:
if [pkt_srcaddr_ip] != [srcaddr] will map to intermediary.ip"
ap-northeast-1 principal.location.country_or_region
apne1-az1 principal.location.name
- about.resource.attribute.labels (sublocation_type)
- about.resource.attribute.labels (sublocation_id)
- about.resource.attribute.labels (pkt_src_aws_service)
- about.resource.attribute.labels (pkt_dst_aws_service)
egress network.direction
1 additional.fields (traffic_path)
- not getting mapped
604249 not getting mapped
Connection_info.Tcp_flags additional.fields
connection_info.tcp_flags additional.fields
Dst_endpoint.Interface_uid target.user.product_object_id
Log_status additional.fields
Src_endpoint.Instance_uid principal.user.product_object_id
Tcp_flags additional.fields
tcp_flags additional.fields
tgw_dst_az_id target.resource.attribute.cloud.availability_zone
tgw_id target.resource.product_object_id
tgw_src_az_id principal.location.name
Traffic_Bytes network.sent_bytes
Traffic_Packets network.sent_packets

Delta de la versión

Google SecOps lanzó la versión 16.0 del analizador de registros de flujo de VPC de AWS, que incluye cambios significativos en la asignación de los campos de registro Parser_Name a los campos de UDM y cambios en la asignación de los tipos de eventos.

Diferencia de asignación de campos de registro

Campo de registro Asignación anterior Asignación actual
bytes network.sent_bytes Removed
Connection_info.Tcp_flags network.dhcp.flags additional.fields
connection_info.tcp_flags network.dhcp.flags additional.fields
Dst_endpoint.Interface_uid additional.fields target.user.product_object_id
flow_direction about.resource.attribute.labels Removed
Log_status about.resource.attribute.labels additional.fields
Src_endpoint.Instance_uid additional.fields principal.user.product_object_id
Tcp_flags network.dhcp.flags additional.fields
tcp_flags network.dhcp.flags additional.fields
tgw_dst_az_id target.resource.attribute.labels target.resource.attribute.cloud.availability_zone
tgw_id additional.fields target.resource.product_object_id
tgw_src_az_id principal.resource.attribute.labels principal.location.name
Traffic_Bytes additional.fields network.sent_bytes
Traffic_Packets additional.fields network.sent_packets

Diferencia de asignación de tipos de eventos

Varios eventos que se clasificaban de forma genérica ahora se clasifican correctamente con tipos de eventos significativos.

Tipo de evento Campos del registro Motivo
FILE_UNCATEGORIZED Bytes Se controla recientemente en esta solicitud de extracción asignada a un tipo de evento específico y apropiado
NETWORK_CONNECTION protocol Se controla recientemente en esta solicitud de extracción asignada a un tipo de evento específico y apropiado
NETWORK_UNCATEGORIZED Class_name Se controla recientemente en esta solicitud de extracción asignada a un tipo de evento específico y apropiado
NETWORK_UNCATEGORIZED flow_direction Se controla recientemente en esta solicitud de extracción asignada a un tipo de evento específico y adecuado.
STATUS_UPDATE [src_endpoint][ip] Se controla recientemente en esta solicitud de extracción asignada a un tipo de evento específico y apropiado

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.