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), Amazon CloudWatch Logs 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 se dirige a las interfaces de red de tu VPC y que proviene de ellas. Esta integración te permite enviar estos registros a Google SecOps para su análisis y supervisión.

Formatos admitidos de los registros de flujo de VPC de AWS

Google SecOps admite la transferencia de registros de flujo de la 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 por 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 enumeran solo una vez en la fila de encabezado, y las filas posteriores solo contienen valores separados por comas.

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

   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 hay un valor disponible, se debe pasar un valor vacío (por ejemplo, , ,) para mantener el orden posicional correcto dentro de la fila del CSV.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Es la instancia de Google SecOps.
  • Acceso privilegiado 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 el análisis de Google SecOps.

Configura el bucket de AWS S3 y el 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: Cómo crear 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 Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta 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 > Tus VPC/Subredes/Interfaces de red y selecciona el alcance 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 que creaste en la sección anterior en el siguiente formato: arn:aws:s3:::<your-bucket>.
    • Formato de registro: Selecciona Formato predeterminado de AWS.
    • Formato de 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 de SIEM > 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 AWS VPC Flow 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 del código fuente: Selecciona la opción de eliminación según tu preferencia.
    • Antigüedad máxima del archivo: El valor predeterminado es de 180 días.
    • ID de clave de acceso: Clave de acceso del usuario con acceso al bucket de S3.
    • Clave de acceso secreta: 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 nueva configuración del feed 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 dirijan 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 la consola de AWS > VPC > Tus VPC, subredes o 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 de registro: 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 de SIEM > 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 AWS VPC Flow 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 Generate Secret Key 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 CloudWatch Logs 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 de AWS y tu ID de cuenta:

    {
    "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. Ponle el nombre CWLtoFirehoseRole al rol y haz clic en Crear rol.

Configura Amazon Kinesis Data Firehose en 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 Carga directa o fuentes externas.
    • 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 agregada: <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 (esta se convierte en el encabezado X-Amz-Firehose-Access-Key).
    • Sugerencias de almacenamiento en búfer: Establece Tamaño del búfer = 1 MiB y Intervalo del búfer = 60 segundos.
    • Compresión: Selecciona Inhabilitada.
    • Copia de seguridad de S3: Selecciona Inhabilitada.
    • Deja la configuración de reintentos y registros como predeterminada.
  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 Create Amazon Kinesis Data Firehose subscription filter.
  5. Proporciona los siguientes detalles de configuración:
    • Destino: Selecciona el flujo de entrega cwlogs-to-secops.
    • Otorga permiso: Elige el rol CWLtoFirehoseRole.
    • Nombre del filtro: Ingresa all-events.
    • Patrón de filtro: Déjalo 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 tu formato personalizado de los registros de flujo de VPC (por ejemplo, el conjunto de campos canónicos de la versión 2 o tu conjunto de la versión 5 o 7). No incluyas una fila de encabezado en los archivos de producción, a menos que tu opción de analizador espere una.
  2. Escribe archivos CSV en 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 de SIEM > 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 del código fuente: Selecciona la opción de eliminación según tu preferencia.
    • Antigüedad máxima del archivo: El valor predeterminado es de 180 días.
    • ID de clave de acceso: Clave de acceso del usuario con acceso al bucket de S3.
    • Clave de acceso secreta: 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 nueva configuración del feed 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 lanzamiento

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 campos de registro Parser_Name a campos del UDM y cambios en la asignación de tipos de eventos.

Delta de la 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

Delta de asignación de tipo de evento

Ahora, varios eventos que se clasificaban de forma genérica se clasifican correctamente con tipos de eventos significativos.

Tipo de evento Campos del registro Motivo
FILE_UNCATEGORIZED Bytes Se controla de forma nueva en esta PR asignada a un tipo de evento específico y adecuado.
NETWORK_CONNECTION protocol Se controla de forma nueva en esta PR asignada a un tipo de evento específico y adecuado.
NETWORK_UNCATEGORIZED Class_name Se controla de forma nueva en esta PR asignada a un tipo de evento específico y adecuado.
NETWORK_UNCATEGORIZED flow_direction Se controla de forma nueva en esta PR asignada a un tipo de evento específico y adecuado.
STATUS_UPDATE [src_endpoint][ip] Se controla de forma nueva en esta PR asignada a un tipo de evento específico y adecuado.

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.