Recopilar registros de flujo de VPC de AWS
En este documento se explica cómo ingerir registros de flujo de VPC de AWS en Google Security Operations mediante 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 obtener información sobre el tráfico de IPs que entra y sale de las interfaces de red de tu VPC. Esta integración le permite enviar estos registros a Google SecOps para analizarlos y monitorizarlos.
Formatos de registros de flujo de VPC de AWS admitidos
Google SecOps admite la ingestión 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 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 solo se indican una vez en la fila de encabezado, y las filas posteriores solo contienen valores separados por comas.
Como el formato CSV no incluye claves de campo en cada entrada de registro, el analizador AWS_VPC_FLOW_CSV se basa en un orden de valores estricto y predefinido. Para que los archivos CSV se analicen correctamente, deben seguir el orden de los campos que se indica a continuación:
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 los campos en los que no haya ningún valor disponible, se debe enviar un valor vacío (por ejemplo, , ,) para mantener el orden posicional correcto en la fila del archivo CSV.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps.
- Acceso privilegiado a AWS.
Opción 1: Configurar la exportación de registros de flujo de VPC de AWS mediante AWS S3 (formato de texto)
En la siguiente sección se explica cómo configurar los permisos de Amazon S3 y de gestión de identidades y accesos para habilitar la exportación de registros de flujo de VPC para que Google SecOps los analice.
Configurar un segmento de AWS S3 y IAM para Google SecOps
- Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
- Guarda el nombre y la región del segmento para consultarlos más adelante (por ejemplo,
aws-vpc-flowlogs
). - 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 en 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 futuras consultas.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Añadir permisos en la sección Políticas de permisos.
- Selecciona Añadir permisos.
- Seleccione Adjuntar políticas directamente.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- Haz clic en Siguiente.
- Haz clic en Añadir permisos.
Crear registros de flujo de VPC (destino: Amazon S3, formato de texto)
- Abre AWS Console > VPC > Tus VPCs/Subredes/Interfaces de red y selecciona el ámbito que quieras registrar.
- Haga clic en Acciones > Crear registro de flujo.
- Proporcione los siguientes detalles de configuración:
- Filtrar: elija Todo (o Aceptar / Rechazar) según su política.
- Intervalo de agregación máximo: selecciona 1 minuto (opción recomendada) o 10 minutos.
- Destino: Enviar a un segmento de Amazon S3.
- ARN del segmento de S3: introduzca el nombre del segmento creado en la sección anterior con el siguiente formato:
arn:aws:s3:::<your-bucket>
. - Formato 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 horas, a menos que los necesites.
- Haga clic en Crear registro de flujo.
Configurar un feed en Google SecOps para ingerir registros de flujo de VPC de AWS (texto de S3)
- Ve a Configuración de SIEM > Feeds.
- Haz clic en + Añadir nuevo feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo,
AWS VPC Flow Logs - S3 (Text)
). - Selecciona Amazon S3 V2 como Tipo de fuente.
- Selecciona Flujo de VPC de AWS como Tipo de registro.
- Haz clic en Siguiente.
- Especifique los valores de los siguientes parámetros de entrada:
- URI de S3: introduce la dirección del segmento 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 que prefieras.
- Antigüedad máxima de los archivos: 180 días de forma predeterminada.
- ID de clave de acceso: clave de acceso de usuario con acceso al bucket de S3.
- Clave de acceso secreta: clave secreta del usuario con acceso al bucket de S3.
- Espacio de nombres de recursos: el espacio de nombres de recursos.
- Etiquetas de ingestión: la etiqueta aplicada a los eventos de este feed.
- URI de S3: introduce la dirección del segmento de S3 (por ejemplo,
- Haz clic en Siguiente.
- Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.
Opción 2: Configurar la exportación de registros de flujo de VPC de AWS mediante 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 su elección mediante Kinesis Data Firehose.
Crear registros de flujo de VPC (destino: Amazon CloudWatch Logs)
- Abre AWS Console > VPC > Your VPCs/Subnets/Network interfaces.
- Haga clic en Acciones > Crear registro de flujo.
- Proporcione los siguientes detalles de configuración:
- Filtrar: elija Todo (o Aceptar/Rechazar) según su política.
- Intervalo de agregación máximo: selecciona 1 minuto (opción recomendada) o 10 minutos.
- Destino: selecciona Enviar a CloudWatch Logs.
- Grupo de registro de destino: selecciona o crea un grupo de registro (por ejemplo,
/aws/vpc/flowlogs
). - Rol de gestión de identidades y accesos: selecciona un rol que pueda escribir en CloudWatch Logs.
- Formato de registro: selecciona Predeterminado de AWS (versión 2) o Personalizado (incluye campos adicionales).
- Haga clic en Crear registro de flujo.
Crear un feed en Google SecOps para obtener la URL del endpoint y la clave secreta
- Ve a Configuración de SIEM > Feeds.
- Haz clic en + Añadir nuevo feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo,
AWS VPC Flow Logs - CloudWatch via Firehose
). - Seleccione Amazon Data Firehose como Tipo de fuente.
- Selecciona Flujo de VPC de AWS como Tipo de registro.
- Haz clic en Siguiente.
- Especifique los valores de los siguientes parámetros de entrada:
- Delimitador de división:
n
(opcional). - Espacio de nombres de recursos: el espacio de nombres de recursos (por ejemplo,
aws.vpc.flowlogs.cwl
). - Etiquetas de ingestión: la etiqueta que se aplicará a los eventos de este feed (por ejemplo,
source=vpc_flow_firehose
).
- Delimitador de división:
- Haz clic en Siguiente.
- Revisa la configuración del feed y haz clic en Enviar.
- Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
- Copia y guarda la clave secreta, ya que no podrás volver a verla.
- Ve a la pestaña Detalles.
- Copia la URL del endpoint del feed del campo Endpoint Information (Información del endpoint).
- Haz clic en Listo.
Crear una clave de API para el feed de Amazon Data Firehose
- Ve a la página Credenciales de la consola de Google Cloud.
- Haz clic en Crear credenciales y, a continuación, selecciona Clave de API.
- Copia y guarda la clave en un lugar seguro.
- Restringe el acceso de la clave de API a la API Google SecOps.
Configurar los permisos de gestión de identidades y accesos de CloudWatch Logs en Firehose
- En la consola de AWS, vaya a IAM > Policies > Create policy > JSON.
Pega el siguiente JSON de la política y sustituye
<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" } ] }
Ponle un nombre a la política
CWLtoFirehoseWrite
y haz clic en Crear política.Ve a IAM > Roles > Crear rol.
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" } ] }
Asigna la política
CWLtoFirehoseWrite
al rol.Dale el nombre
CWLtoFirehoseRole
al rol y haz clic en Crear rol.
Configurar Amazon Kinesis Data Firehose en Google SecOps
- En la consola de AWS, ve a Kinesis > Data Firehose > Create delivery stream.
- Proporcione los siguientes detalles de configuración:
- Fuente: seleccione PUT directo u otras fuentes.
- Destino: elige Endpoint HTTP.
- Nombre:
cwlogs-to-secops
- URL del endpoint HTTP: introduzca la URL del endpoint HTTPS de la feed de Google SecOps con la clave de API añadida:
<ENDPOINT_URL>?key=<API_KEY>
. - Método HTTP: selecciona POST.
- En Clave de acceso:
- Introduce la clave secreta generada en el feed de Google SecOps (se convertirá en el encabezado
X-Amz-Firehose-Access-Key
). - Sugerencias para el almacenamiento en búfer: define 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.
- Introduce la clave secreta generada en el feed de Google SecOps (se convertirá en el encabezado
- Haga clic en Crear flujo de entrega.
Suscribir el grupo de registros de CloudWatch al flujo de Firehose
- Ve a CloudWatch > Registros > Grupos de registros.
- Seleccione el grupo de registros de destino (por ejemplo,
/aws/vpc/flowlogs
). - Abre la pestaña Filtros de suscripción y haz clic en Crear.
- Elige Create Amazon Kinesis Data Firehose subscription filter (Crear filtro de suscripción de Amazon Kinesis Data Firehose).
- Proporcione los siguientes detalles de configuración:
- Destino: selecciona el flujo de entrega
cwlogs-to-secops
. - Conceder permiso: elige el rol
CWLtoFirehoseRole
. - Nombre del filtro: escribe
all-events
. - Patrón de filtro: déjelo vacío para enviar todos los eventos.
- Destino: selecciona el flujo de entrega
- Haz clic en Iniciar emisión.
Opción 3: Configurar los registros de flujo de VPC de AWS en formato CSV mediante Amazon S3
Transformar registros a formato CSV (opcional)
- Asegúrate de que las filas del archivo CSV sigan un orden de columnas estricto y coherente que coincida con los campos que hayas seleccionado en el formato personalizado de los registros de flujo de VPC (por ejemplo, el conjunto de campos canónico de la versión 2 o el conjunto de la versión 5 o 7). No incluya una fila de encabezado en los archivos de producción, a menos que su opción de analizador espere una.
- Escribe archivos CSV en un prefijo estable, por ejemplo:
s3://<your-bucket>/vpcflowlogs-csv/<region>/year=<year>/month=<month>/day=<day>/
.
Configurar un feed en Google SecOps para ingerir registros de flujo de VPC de AWS (CSV)
- Ve a Configuración de SIEM > Feeds.
- Haz clic en + Añadir nuevo feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo,
AWS VPC Flow Logs - S3 (CSV)
). - Selecciona Amazon S3 V2 como Tipo de fuente.
- Seleccione Flujo de VPC de AWS (CSV) como Tipo de registro.
- Haz clic en Siguiente.
- Especifique los valores de los siguientes parámetros de entrada:
- URI de S3: introduce la dirección del segmento de S3 (por ejemplo,
s3://<your-bucket>/vpcflowlogs-csv/<region>/
). - Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
- Antigüedad máxima de los archivos: 180 días de forma predeterminada.
- ID de clave de acceso: clave de acceso de usuario con acceso al bucket de S3.
- Clave de acceso secreta: clave secreta del usuario con acceso al bucket de S3.
- Espacio de nombres de recursos: el espacio de nombres de recursos.
- Etiquetas de ingestión: la etiqueta aplicada a los eventos de este feed.
- URI de S3: introduce la dirección del segmento de S3 (por ejemplo,
- 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 |
---|---|---|
accountId | read_only_udm.metadata.product_log_id | Valor extraído del campo de registro sin procesar accountId . |
acción | read_only_udm.security_result.action_details | Valor extraído del campo de registro sin procesar action . |
acción | read_only_udm.security_result.action | Se asigna a ALLOW si action es ACCEPT y a BLOCK si action es REJECT . |
az_id | read_only_udm.principal.cloud.availability_zone | Valor extraído del campo de registro sin procesar az_id . |
bytes | read_only_udm.network.received_bytes | Valor extraído del campo de registro sin procesar bytes . |
dstaddr | read_only_udm.target.ip | Valor extraído del campo de registro sin procesar dstaddr . |
dstport | read_only_udm.target.port | Valor extraído del campo de registro sin procesar dstport . |
end_time | read_only_udm.about.resource.attribute.labels.value | Valor extraído del campo de registro sin procesar end_time . |
end_time | read_only_udm.metadata.ingested_timestamp | Valor extraído del campo de registro sin procesar end_time . |
flow_direction | read_only_udm.network.direction | Se asigna a ENTRANTE si flow_direction es ingress y a SALIENTE si flow_direction es egress . |
InstanceID | read_only_udm.principal.cloud.project.id | Valor extraído del campo de registro sin procesar InstanceID . |
interfaceId | read_only_udm.about.resource.attribute.labels.value | Valor extraído del campo de registro sin procesar interfaceId . |
logStatus | read_only_udm.about.resource.attribute.labels.value | Valor extraído del campo de registro sin procesar logStatus . |
paquetes | read_only_udm.about.resource.attribute.labels.value | Valor extraído del campo de registro sin procesar packets . |
pkt_dst_aws_service | read_only_udm.about.resource.attribute.labels.value | Valor extraído del campo de registro sin procesar pkt_dst_aws_service . |
pkt_dstaddr | read_only_udm.intermediary.ip | Valor extraído del campo de registro sin procesar pkt_dstaddr . |
pkt_srcaddr | read_only_udm.intermediary.ip | Valor extraído del campo de registro sin procesar pkt_srcaddr . |
pkt_src_aws_service | read_only_udm.about.resource.attribute.labels.value | Valor extraído del campo de registro sin procesar pkt_src_aws_service . |
protocolo | read_only_udm.network.ip_protocol | Se asigna a TCP si protocol es 6, a UDP si protocol es 17 y, en caso contrario, a UNKNOWN_IP_PROTOCOL. |
Región | read_only_udm.principal.location.country_or_region | Valor extraído del campo de registro sin procesar Region . |
srcaddr | read_only_udm.principal.ip | Valor extraído del campo de registro sin procesar srcaddr . |
srcport | read_only_udm.principal.port | Valor extraído del campo de registro sin procesar srcport . |
start_time | read_only_udm.about.resource.attribute.labels.value | Valor extraído del campo de registro sin procesar start_time . |
start_time | read_only_udm.metadata.event_timestamp | Valor extraído del campo de registro sin procesar start_time . |
SubnetID | read_only_udm.about.resource.attribute.labels.value | Valor extraído del campo de registro sin procesar SubnetID . |
tcp_flags | read_only_udm.about.resource.attribute.labels.value | Valor extraído del campo de registro sin procesar tcp_flags . |
traffic_path | read_only_udm.about.resource.attribute.labels.value | Valor extraído del campo de registro sin procesar traffic_path . |
version | read_only_udm.metadata.product_version | Valor extraído del campo de registro sin procesar version . |
vpcID | read_only_udm.principal.cloud.vpc.id | Valor extraído del campo de registro sin procesar vpcID . |
read_only_udm.metadata.vendor_name | Valor fijo establecido en el código fuente AMAZON . |
|
read_only_udm.metadata.product_name | Valor fijo establecido en el código fuente AWS VPC Flow . |
|
read_only_udm.metadata.log_type | Valor fijo establecido en el código fuente AWS_VPC_FLOW . |
|
read_only_udm.metadata.event_type | Se asigna a NETWORK_CONNECTION si dstaddr no está vacío. De lo contrario, se asigna a GENERIC_EVENT . |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.