VPC Flow Logs: La Herramienta que Detecta Intrusos en AWS (y que Nadie Activa a Tiempo)

La mayoría de equipos los tiene desactivados. Cuando sufren un incidente, no tienen evidencia. No cometas el mismo error.

Imagina que alguien intenta entrar a tu oficina a las 2 a.m. probando cada puerta una por una. Si no tienes cámaras de seguridad, nunca sabrás que ocurrió. Pero si las tienes, tienes la evidencia exacta: hora, lugar y quién fue. AWS VPC Flow Logs son exactamente eso: las cámaras de seguridad de toda la red de tu infraestructura en la nube.

Y lo más alarmante es que la mayoría de equipos de desarrollo y hasta de seguridad los tienen desactivados por defecto, o los activan pero nunca los analizan. Este post cambia eso.

¿Qué son los VPC Flow Logs y qué capturan exactamente?

Los VPC Flow Logs son un servicio de AWS que captura información sobre el tráfico IP que entra y sale de las interfaces de red (ENIs) dentro de tu Virtual Private Cloud (VPC). No es un sniffer de paquetes completo — no captura el contenido del paquete. Lo que capturan es el metadato del flujo de red: quién conectó, desde dónde, hacia dónde, por qué puerto, cuánto tráfico y si fue aceptado o rechazado.

Puedes habilitarlos a tres niveles de granularidad:

💡 ¿ENI? ¿VPC?
Una ENI (Elastic Network Interface) es simplemente la tarjeta de red virtual de tus recursos en AWS. Cada EC2, Lambda con acceso VPC, RDS, ELB, etc., tiene al menos una ENI. La VPC es tu red privada virtual aislada dentro de AWS, donde viven todos esos recursos.

Anatomía de un VPC Flow Log: leyendo el registro

Antes de poder cazar amenazas con Flow Logs, tienes que saber leerlos. Un registro de Flow Log en su formato por defecto tiene el siguiente aspecto:

2 123456789010 eni-0a1b2c3d4e5f 203.0.113.45 10.0.1.5 55234 443 6 20 4000 1623456000 1623456060 ACCEPT OK
2 123456789010 eni-0a1b2c3d4e5f 198.51.100.22 10.0.1.5 0 22 6 50 25000 1623456120 1623456180 REJECT OK

Cada campo tiene un significado preciso:

⚠️ Lo que Flow Logs NO capturan
VPC Flow Logs no capturan el contenido de los paquetes (payload), las queries de DNS resueltas por Route 53, ni el tráfico hacia el servidor de metadatos de instancia (169.254.169.254). Para tráfico DNS, usa Route 53 Resolver Query Logs.

Por qué los VPC Flow Logs son críticos para la ciberseguridad

Hablemos claro: sin VPC Flow Logs activados, si alguien compromete una instancia dentro de tu VPC y empieza a hacer lateral movement — moviéndose hacia otras instancias internas — no tienes ninguna evidencia de eso. No hay log. No hay alerta posible. Solo oscuridad.

Estos son los cinco escenarios de seguridad donde los VPC Flow Logs son indispensables:

1. Detección de Port Scanning (Reconocimiento de red)

Un atacante que ya tiene acceso a una instancia comprometida suele empezar escaneando otros hosts internos buscando puertos abiertos. Esto genera un patrón de tráfico muy claro en los Flow Logs: una sola IP de origen conectando a decenas de IPs de destino distintas en un intervalo de tiempo corto, con múltiples intentos REJECT.

-- Consulta en Athena para detectar posible port scan interno
SELECT srcaddr, COUNT(DISTINCT dstport) as puertos_intentados,
       COUNT(*) as total_flujos
FROM vpc_flow_logs
WHERE action = 'REJECT'
  AND start >= to_unixtime(current_timestamp - interval '1' hour)
GROUP BY srcaddr
HAVING COUNT(DISTINCT dstport) > 20
ORDER BY puertos_intentados DESC;

2. Detección de Exfiltración de Datos

Una instancia comprometida que está enviando datos hacia el exterior genera un flujo de salida inusualmente grande. Si una Lambda o un EC2 que normalmente envía pocos KB al día de repente transfiere varios GB a una IP externa desconocida, eso aparece en los Flow Logs como un flujo con un valor de bytes extremadamente alto.

3. Tráfico hacia IPs maliciosas conocidas (Threat Intel)

Al cruzar las IPs de origen y destino de tus Flow Logs contra feeds de Threat Intelligence (como listas de IPs de Command & Control de botnets), puedes detectar si alguno de tus recursos está comunicándose con infraestructura maliciosa conocida. GuardDuty hace esto automáticamente usando tus Flow Logs como fuente de datos.

4. Validación de Security Groups y NACLs

Los logs con REJECT son igual de valiosos que los ACCEPT. Te permiten ver si alguien está intentando acceder a puertos que no deberían estar expuestos, confirmando que tus reglas de firewall funcionan correctamente — o revelando que tienes puertos abiertos que no deberían estarlo.

5. Forense post-incidente

Cuando ocurre un incidente, los Flow Logs son la primera fuente de evidencia para reconstruir la línea de tiempo del ataque. ¿Desde qué IP entró el atacante? ¿A qué hora exacta? ¿A qué recursos intentó acceder después? Todo eso está en los logs, siempre que los hayas activado antes del incidente.

⚠️ El error más común
Activar VPC Flow Logs después de un incidente. Para que sean útiles en forense, deben estar habilitados antes de que ocurra cualquier ataque. Son como una cámara de seguridad: inútil si la instalas después del robo.

Cómo habilitar VPC Flow Logs (CLI)

La forma más rápida de habilitarlos es desde la AWS CLI. El siguiente ejemplo los envía a CloudWatch Logs con una retención de 90 días:

# Paso 1: Crea el Log Group en CloudWatch
aws logs create-log-group \
  --log-group-name /aws/vpc/flow-logs \
  --region us-east-1

# Paso 2: Crea el Flow Log para tu VPC completa
aws ec2 create-flow-logs \
  --resource-type VPC \
  --resource-ids vpc-0abc123def456789 \
  --traffic-type ALL \
  --log-destination-type cloud-watch-logs \
  --log-group-name /aws/vpc/flow-logs \
  --deliver-logs-permission-arn arn:aws:iam::123456789012:role/FlowLogsRole \
  --region us-east-1

# Verificar que se creó correctamente
aws ec2 describe-flow-logs \
  --filter "Name=resource-id,Values=vpc-0abc123def456789" \
  --region us-east-1
💡 ¿CloudWatch o S3?
Para análisis en tiempo real y alertas, envía los logs a CloudWatch Logs. Para análisis a gran escala con Athena o integración con SIEM, envíalos a S3. En entornos de producción, lo ideal es enviarlos a ambos destinos simultáneamente.

Analizando Flow Logs con Amazon Athena

Cuando tienes millones de registros de Flow Logs en S3, CloudWatch Logs Insights empieza a quedarse corto. Ahí es donde entra Amazon Athena: te permite hacer queries SQL directamente sobre los logs en S3 sin mover los datos, pagando solo por lo que escaneas.

Primero, crea la tabla en Athena apuntando a tu bucket:

CREATE EXTERNAL TABLE vpc_flow_logs (
  version int,
  account_id string,
  interface_id string,
  srcaddr string,
  dstaddr string,
  srcport int,
  dstport int,
  protocol int,
  packets int,
  bytes bigint,
  start bigint,
  end bigint,
  action string,
  log_status string
)
PARTITIONED BY (dt string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
LOCATION 's3://tu-bucket-flow-logs/AWSLogs/123456789012/vpcflowlogs/us-east-1/'
TBLPROPERTIES ("skip.header.line.count"="1");

Una vez creada la tabla, puedes hacer queries de seguridad en segundos:

-- Top 10 IPs externas que más tráfico reciben desde tu VPC
-- Útil para detectar exfiltración de datos
SELECT dstaddr,
       SUM(bytes) / 1048576 AS mb_enviados,
       COUNT(*) AS flujos
FROM vpc_flow_logs
WHERE action = 'ACCEPT'
  AND srcaddr LIKE '10.%'          -- Tráfico originado internamente
  AND dstaddr NOT LIKE '10.%'      -- Hacia IPs externas
GROUP BY dstaddr
ORDER BY mb_enviados DESC
LIMIT 10;

Integración con Amazon GuardDuty

Aquí es donde la cosa se pone interesante. Amazon GuardDuty consume automáticamente los VPC Flow Logs (junto con DNS Logs y CloudTrail) para detectar comportamientos maliciosos usando machine learning y threat intelligence. No necesitas configurar nada extra: al activar GuardDuty en tu cuenta, empieza a analizar tus Flow Logs de forma nativa.

Algunos de los tipos de hallazgos de GuardDuty que vienen directamente de los Flow Logs:

✅ La combinación ganadora
VPC Flow Logs + GuardDuty + Security Hub es el stack mínimo de visibilidad de red que deberías tener en cualquier entorno AWS en producción. Flow Logs proveen el dato crudo, GuardDuty lo analiza con inteligencia, y Security Hub centraliza todas las alertas en un solo panel.

Costos: lo que nadie te dice

Uno de los motivos por los que los equipos dudan en activar VPC Flow Logs es el costo. Seamos honestos al respecto. Los cargos vienen de tres fuentes:

Para una VPC de uso moderado (un par de instancias EC2 con tráfico normal), el costo mensual de Flow Logs suele estar entre $5 y $30 USD. Para entornos grandes, puede subir. La estrategia para controlar costos:

Conclusión

Los VPC Flow Logs no son un lujo de equipos grandes con presupuestos enormes. Son la capa de visibilidad más básica y fundamental que cualquier arquitectura en AWS debería tener activada desde el día uno. El costo de habilitarlos es mínimo comparado con el costo de un incidente donde no tienes evidencia de qué ocurrió ni cómo.

Si hoy tienes una VPC en producción y no tienes Flow Logs activos, esa es tu primera tarea antes de cerrar esta pestaña. No mañana. Ahora.

✅ Tu checklist de acción
1. Habilita VPC Flow Logs en todas tus VPCs de producción (tráfico ALL).
2. Envía los logs a S3 con particionamiento por fecha y a CloudWatch para alertas en tiempo real.
3. Activa GuardDuty si aún no lo tienes (consume los Flow Logs automáticamente).
4. Crea una tabla Athena apuntando a tus logs en S3 y ejecuta un análisis semanal de tráfico.
5. Configura una alerta en CloudWatch cuando aparezcan más de 1000 registros REJECT en una hora.