¿Cómo puedo analizar los registros de flujo de VPC personalizados mediante CloudWatch Logs Insights?

Última actualización: 27/04/2022

He configurado registros de flujo de VPC personalizados. ¿Cómo puedo detectar patrones y tendencias con Amazon CloudWatch Logs Insights?

Descripción breve

Puede utilizar CloudWatch Logs Insights para analizar los registros de flujo de la VPC. CloudWatch Log Insights detecta automáticamente campos en muchos registros proporcionados por Amazon, así como eventos de registro con formato JSON, para facilitar la construcción de consultas y la exploración de registros. CloudWatch Logs Insights detecta automáticamente los registros de flujo de VPC que están en el formato predeterminado.

Sin embargo, los registros de flujo de VPC se implementan en un formato personalizado. Por este motivo, no se detectan automáticamente, por lo que debe modificar las consultas. En este artículo, se ofrecen varios ejemplos de consultas que puede personalizar y ampliar para que coincidan con sus casos de uso.

Se utiliza este formato personalizado de registros de flujo de VPC:

${account-id} ${vpc-id} ${subnet-id} ${interface-id} ${instance-id} ${srcaddr} ${srcport} ${dstaddr} ${dstport} ${protocol} ${packets} ${bytes} ${action} ${log-status} ${start} ${end} ${flow-direction} ${traffic-path} ${tcp-flags} ${pkt-srcaddr} ${pkt-src-aws-service} ${pkt-dstaddr} ${pkt-dst-aws-service} ${region} ${az-id} ${sublocation-type} ${sublocation-id}

Resolución

Recuperar los registros de flujo de VPC más recientes

Dado que CloudWatch Logs Insights no detecta automáticamente los campos de registro, debe usar la palabra clave parse para aislar los campos deseados. En esta consulta, los resultados se ordenan por la hora de inicio del evento del registro de flujo y se limitan a las dos entradas de registro más recientes.

Consulta

#Retrieve latest custom VPC Flow Logs
parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| sort start desc
| limit 2

Resultados


account_id  vpc_id   subnet_id  interface_id instance_id srcaddr srcport
123456789012  vpc-0b69ce8d04278ddd  subnet-002bdfe1767d0ddb0 eni-0435cbb62960f230e 172.31.0.104 55125
123456789012  vpc-0b69ce8d04278ddd1  subnet-002bdfe1767d0ddb0 eni-0435cbb62960f230e 91.240.118.81 49422

Resumir las transferencias de datos por pares de direcciones IP de origen y destino

A continuación, resuma el tráfico de red por pares de direcciones IP de origen y destino. En este ejemplo, la estadística sum se utiliza para realizar una agregación en el campo bytes. Esto calcula un total acumulado de los datos transferidos entre hosts. Para obtener más contexto, se incluye flow_direction. Los resultados de esta agregación se asignan al campo Data_Transferred, de forma temporal. A continuación, los resultados se ordenan por Data_Transferred en orden descendente y se devuelven los dos pares más grandes.

Consulta

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| stats sum(bytes) as Data_Transferred by srcaddr, dstaddr, flow_direction
| sort by Data_Transferred desc
| limit 2

Resultados

srcaddr dstaddr flow_direction Data_Transferred
172.31.1.247 3.230.172.154 egreso 346952038
172.31.0.46 3.230.172.154 egreso 343799447

Analizar las transferencias de datos por ID de instancia de EC2

Puede utilizar registros de flujo de VPC personalizados para analizar directamente un ID de instancia de Amazon Elastic Compute Cloud (Amazon EC2). Siguiendo la consulta anterior, ahora puede determinar las instancias de EC2 más activas mediante el campo instance_id.

Consulta

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| stats sum(bytes) as Data_Transferred by instance_id
| sort by Data_Transferred desc
| limit 5

Resultados

instance_id Data_Transferred
- 1443477306
i-03205758c9203c979 517558754
i-0ae33894105aa500c 324629414
i-01506ab9e9e90749d 198063232
i-0724007fef3cb06f3 54847643

Filtrar por tráfico SSH rechazado

Para comprender mejor el tráfico denegado por el grupo de seguridad y las listas de control de acceso (ACL) de red, filtre los registros de flujo de VPC rechazados. Puede reducir aún más este filtro para incluir el protocolo y el puerto de destino. Para identificar los hosts que se rechazan en el tráfico SSH, extienda el filtro a fin de incluir el protocolo TCP (por ejemplo, el protocolo 6) y el tráfico con un puerto de destino de 22.

Consulta

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| filter action = "REJECT" and protocol = 6 and dstport = 22
| stats sum(bytes) as SSH_Traffic_Volume by srcaddr
| sort by SSH_Traffic_Volume desc
| limit 2

Resultados

srcaddr SSH_Traffic_Volume
23.95.222.129 160
179.43.167.74 80

Aislar la secuencia de datos HTTP para un par de origen y destino específico

Para investigar más a fondo las tendencias de sus datos mediante CloudWatch Logs Insights, aísle el tráfico bidireccional entre dos direcciones IP. En esta consulta, ["172.31.1.247","172.31.11.212"] devuelve registros de flujo al utilizar la dirección IP como dirección IP de origen o destino. Para aislar el tráfico HTTP, las instrucciones del filtro hacen coincidir los eventos del registro de flujo de la VPC con el protocolo 6 (TCP) y el puerto 80. Utilice la palabra clave display para devolver un subconjunto de todos los campos disponibles.

Consulta

#HTTP Data Stream for Specific Source/Destination Pair
parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| filter srcaddr in ["172.31.1.247","172.31.11.212"] and dstaddr in ["172.31.1.247","172.31.11.212"] and protocol = 6 and (dstport = 80 or srcport=80)
| display interface_id,srcaddr, srcport, dstaddr, dstport, protocol, bytes, action, log_status, start, end, flow_direction, tcp_flags
| sort by start desc
| limit 2

Resultados

interface_id srcaddr srcport dstaddr dstport protocolo bytes acción log_status
eni-0b74120275654905e 172.31.11.212 80 172.31.1.247 29376 6 5160876 ACEPTAR Aceptar
eni-0b74120275654905e 172.31.1.247 29376 172.31.11.212 80 6 97380 ACEPTAR Aceptar

Aislar la secuencia de datos HTTP para un par de origen y destino específico

Puede utilizar CloudWatch Logs Insights para visualizar los resultados como un gráfico circular o de barras. Si los resultados incluyen la función bin(), los resultados de la consulta se devuelven con una marca de tiempo. Esta serie temporal se puede visualizar con un gráfico de líneas o de áreas apiladas.

Sobre la base de la consulta anterior, puede utilizar stats sum(bytes) como Data_Trasferred por bin(1m) para calcular los datos acumulados transferidos en intervalos de un minuto. Para ver esta visualización, cambie entre las tablas Logs (Registros) y Visualization (Visualización) en la consola de CloudWatch Logs Insights.

Consulta

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| filter srcaddr in ["172.31.1.247","172.31.11.212"] and dstaddr in ["172.31.1.247","172.31.11.212"] and protocol = 6 and (dstport = 80 or srcport=80)
| stats sum(bytes) as Data_Transferred by bin(1m)

Resultados

bin(1m) Data_Transferred
2022-04-01 15:23:00.000 17225787
2022-04-01 15:21:00.000 17724499
2022-04-01 15:20:00.000 1125500
2022-04-01 15:19:00.000 101525
2022-04-01 15:18:00.000 81376