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
recordscon 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
- Script: Analyze-VNETFlowLogs.ps1
- README con instrucciones: README.md
- Ejemplo de flow log (reducido) para pruebas: sample-flowlog.json
- Ejecuciones de ejemplo (reports) generadas: reports/
Cómo usar el script
- Preparar archivos JSON descargados desde la cuenta de almacenamiento o exportados desde Log Analytics.
- 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: exportaVNetFlowAnalysis_Details_<timestamp>.csvyVNetFlowAnalysis_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.jsoncon 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-FlowTupledel 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.