Skip to content

2025/09

Analizando VNet Flow Logs en Azure

En este post explico qué son los VNet flow logs (logs de flujo de red de Azure), cómo habilitarlos y cómo analizarlos con un pequeño script PowerShell que desarrollé para facilitar la detección de anomalías y la generación de reportes.

Documentación oficial (Microsoft):

https://learn.microsoft.com/azure/network-watcher/vnet-flow-logs-overview

Resumen rápido

  • Los VNet flow logs capturan información sobre el tráfico IP que atraviesa subredes y recursos dentro de una Virtual Network. Almacenan datos similares a los NSG flow logs pero a nivel de VNet.
  • Se pueden enviar a una cuenta de almacenamiento, a Log Analytics o a Event Hub. El formato JSON resultante contiene un array records con campos que describen cada flujo y sus métricas (bytes, paquetes, acción, puertos, etc.).

Por qué analizarlos

  • Identificar hosts con alto volumen de tráfico.
  • Detectar intentos de escaneo de puertos o reintentos persistentes.
  • Encontrar conexiones denegadas o patrones sospechosos.

Herramienta: script PowerShell

He incluido un script llamado Analyze-VNETFlowLogs.ps1 que procesa archivos JSON con VNet flow logs y genera un análisis en consola. Además puede exportar dos ficheros CSV con el detalle y el resumen del análisis.

(Opcional) Descarga de Flow Logs previa

Si tus logs están aún en la cuenta de almacenamiento, puedes usar el script de apoyo Download-FlowLogs.ps1 para:

  • Descargar todos los blobs del contenedor (por defecto insights-logs-flowlogflowevent).
  • Manejar rutas largas en Windows (hash si usas -AutoShorten).
  • Reorganizar los archivos en una jerarquía YYYY-MM-DD/HH/FlowLog_<timestamp>_*.json.
  • Facilitar un patrón único de entrada para el analizador.

Parámetros clave: - -StorageAccount (obligatorio): Nombre de la storage account. - -ContainerName: Contenedor (default: insights-logs-flowlogflowevent). - -DownloadPath: Carpeta destino local (default: ./FlowLogs). - -AutoShorten: Acorta automáticamente rutas demasiado largas mediante hashing. - -Force: Omite confirmaciones interactivas.

Variables de entorno soportadas: - AZ_STORAGE_KEY: Si está definida se usa esa clave directamente. - AZ_RESOURCE_GROUP: Permite intentar descubrir la key si no se pasó manualmente.

Si no hay clave disponible o el intento de descubrimiento falla, se intentará usar automáticamente --auth-mode login para la autenticación.

Ejemplo de uso completo (descarga + análisis):

# 1. Descargar y organizar
pwsh -File ./Download-FlowLogs.ps1 -StorageAccount mystorageacct -DownloadPath ./FlowLogs -AutoShorten -Force

# 2. Analizar todos los logs resultantes
pwsh -File ./Analyze-VNETFlowLogs.ps1 -LogFiles "./FlowLogs/**/*.json" -ExportCSV -OutputPath ./reports -ShowGraphs

Si ya tienes los JSON en local (por AzCopy u otro método), puedes saltarte el paso 1.

Dónde está el script y ejemplos

Cómo usar el script

  1. Preparar archivos JSON descargados desde la cuenta de almacenamiento o exportados desde Log Analytics.
  2. Abrir PowerShell (Windows) o pwsh (Linux/macOS) y ejecutar (ejemplo):
pwsh -File "./Analyze-VNETFlowLogs.ps1" -LogFiles "./samples/*.json" -ExportCSV -OutputPath "./reports" -ShowGraphs

Explicación rápida de parámetros

  • -LogFiles: rutas a los JSON (acepta wildcards).
  • -ExportCSV: exporta VNetFlowAnalysis_Details_<timestamp>.csv y VNetFlowAnalysis_Summary_<timestamp>.csv.
  • -OutputPath: directorio para los CSV.
  • -SpecificIPs: array de IPs para análisis centrado en hosts concretos.
  • -ShowGraphs: muestra gráficas de barras simples en la consola.

Ejemplo práctico (archivo de ejemplo incluido)

  • He añadido samples/sample-flowlog.json con varios flujos que cubren casos típicos (permitidos, denegados, varios BEGIN para simular reintentos/posible escaneo).
  • Ejecutando el comando anterior sobre ese ejemplo se generan dos CSV de salida en reports/ y se muestra un resumen en consola.

Notas y recomendaciones

  • El script agrupa los flows en memoria para facilitar el análisis; para datasets muy grandes conviene procesar por lotes o filtrar por rango de tiempo antes de ejecutar.
  • Revisa la documentación oficial (enlace arriba) si tu flujo JSON tiene un formato distinto o campos adicionales; la función Parse-FlowTuple del script espera un orden concreto de campos, que puedes adaptar si es necesario.

Contribuciones y siguientes pasos

  • Si quieres, puedo añadir un conjunto de tests que ejecuten el script sobre el ejemplo y verifiquen los CSV generados automáticamente.
  • También puedo crear un pequeño tutorial paso a paso para habilitar VNet flow logs en Azure y obtener los JSON desde una cuenta de almacenamiento.

Archivos incluidos

  • Analyze-VNETFlowLogs.ps1 — script principal.
  • Download-FlowLogs.ps1 — utilidad para descargar y normalizar logs desde la cuenta de almacenamiento.
  • README.md — instrucciones y referencia a la doc oficial.
  • samples/sample-flowlog.json — ejemplo para pruebas.

Espero que esto te ayude a analizar flujos en tus VNets.