Azure gateway

Este plugin de discovery de Azure Application Gateway para Pandora FMS está diseñado para automatizar la monitorización de recursos Azure Application Gateway dentro de una suscripción de Azure.

Introducción

Este plugin de discovery de Azure Application Gateway para Pandora FMS está diseñado para automatizar la monitorización de recursos Azure Application Gateway dentro de una suscripción de Azure. El plugin descubre de forma dinámica los Application Gateways disponibles, obtiene sus métricas principales mediante Azure Monitor y genera agentes y módulos en Pandora FMS.
El plugin permite trabajar de dos formas: creando un agente por cada Application Gateway descubierto, o enviando todos los módulos a un único agente configurado por el usuario. También permite filtrar por grupo de recursos, aplicar prefijos personalizados, controlar la caché de entidades descubiertas, seleccionar grupos de módulos y filtrar módulos mediante expresiones regulares de allow y deny.
Las métricas implementadas se basan en las métricas utilizadas para Azure Application Gateway, incluyendo rendimiento, peticiones, estado de backends, latencia, tráfico, seguridad, capacidad, WebSocket, WAF y conteo de recursos.

Prerrequisitos

Parámetros

Modo avanzado

--confruta del archivo de configuración generado por la tarea de Discovery.

Archivo de configuración (--conf)

agents_group_id = id del grupo de agentes de Pandora FMS donde se crearán los agentes.
interval = intervalo de monitorización de la tarea en segundos.
subscription_id = identificador de la suscripción de Azure.
tenant_id = identificador del tenant de Azure Active Directory.
client_id = identificador de aplicación del Service Principal.
client_secret = secreto del Service Principal.
resource_group = grupo de recursos de Azure que se quiere monitorizar, opcional. Si se deja vacío, se descubren Application Gateways de toda la suscripción.
target_agent = agente destino cuando no se crea un agente por cada Application Gateway.
agent_per_application_gateway = crea un agente por cada Application Gateway descubierto.
application_gateway_agent_prefix = prefijo opcional para el nombre de los agentes creados por Application Gateway.
modules_prefix = prefijo opcional para los nombres de los módulos.
scan_application_gateways = activa el descubrimiento automático de Application Gateways.
entities_list = ruta del fichero temporal donde se almacenan las entidades descubiertas.
enable_entities_interval = activa el refresco periódico del fichero de entidades.
entities_interval = intervalo de refresco del fichero de entidades en segundos.
time_window = ventana de tiempo en minutos usada para consultar métricas de Azure Monitor.
metric_interval = granularidad de métrica de Azure Monitor en formato ISO-8601, por ejemplo PT1M.
metric_timeout = timeout en segundos para llamadas a la API de Azure. Si se configura 0 o un valor negativo, el plugin usará 30 segundos.
max_retries = número máximo de reintentos para errores temporales de API, incluyendo rate limit HTTP 429.
output_format = formato de salida. json para Discovery y xml para pruebas manuales.
module_allow_list_file = fichero opcional con expresiones regulares de módulos permitidos, una por línea.
module_deny_list_file = fichero opcional con expresiones regulares de módulos descartados, una por línea.
check_performance_modules = activa módulos de rendimiento.
check_request_modules = activa módulos de peticiones.
check_backend_modules = activa módulos de backend.
check_latency_modules = activa módulos de latencia.
check_traffic_modules = activa módulos de tráfico.
check_security_modules = activa módulos de seguridad.
check_capacity_modules = activa módulos de capacidad.
check_waf_modules = activa módulos WAF.
check_websocket_modules = activa módulos WebSocket.
check_application_gateway_count = activa el módulo de conteo de Application Gateways.
mock_api_url = URL opcional del mock de Azure para pruebas locales. En producción debe dejarse vacío.

Ejemplo

[CONF]
agents_group_id = 10
interval = 300
subscription_id = 00000000-0000-0000-0000-000000000000
tenant_id = 11111111-1111-1111-1111-111111111111
client_id = 22222222-2222-2222-2222-222222222222
client_secret = my_client_secret
resource_group = rg-production
target_agent = Azure Application Gateways
agent_per_application_gateway = 1
application_gateway_agent_prefix = Azure Application Gateway 
modules_prefix =
scan_application_gateways = 1
entities_list = /tmp/tmp_discovery.azure_application_gateway.entities
enable_entities_interval = 1
entities_interval = 3600
time_window = 5
metric_interval = PT1M
metric_timeout = 30
max_retries = 2
output_format = json
module_allow_list_file =
module_deny_list_file =
check_performance_modules = 1
check_request_modules = 1
check_backend_modules = 1
check_latency_modules = 1
check_traffic_modules = 1
check_security_modules = 1
check_capacity_modules = 1
check_waf_modules = 1
check_websocket_modules = 1
check_application_gateway_count = 1
mock_api_url =

Crear Service Principal

Desde Azure CLI se puede crear un Service Principal con rol Reader sobre una suscripción:

az ad sp create-for-rbac \
  --name pandora-azure-application-gateway-discovery \
  --role Reader \
  --scopes /subscriptions/<SUBSCRIPTION_ID>

La salida devolverá valores similares a estos:

{
  "appId": "<CLIENT_ID>",
  "displayName": "pandora-azure-application-gateway-discovery",
  "password": "<CLIENT_SECRET>",
  "tenant": "<TENANT_ID>"
}

La correspondencia con los campos del plugin es:

tenant       -> Azure Tenant ID
appId        -> Azure Client ID
password     -> Azure Client Secret
subscription -> Azure Subscription ID

Requisitos

Para que el plugin pueda descubrir Application Gateways y consultar sus métricas, se recomienda utilizar un Service Principal con permisos de lectura.
El plugin necesita permisos de lectura para:

En la mayoría de entornos el rol Reader sobre la suscripción o sobre el grupo de recursos será suficiente. Si se limita el permiso a un único resource group, se recomienda configurar también el campo Resource group en la tarea de Discovery.

Ejecución manual

El formato de ejecución del plugin es el siguiente:

./pandora_azure_gateway --conf <ruta al fichero de configuración>

Ejemplo:

./pandora_azure_gateway --conf /etc/pandora/azure_application_gateway.conf

En modo Discovery, Pandora FMS genera automáticamente el fichero de configuración temporal y ejecuta el binario con el parámetro --conf.

La ejecución devuelve una salida JSON con información de resumen y datos de monitorización en el campo monitoring_data, para que puedan ser consumidos por el servidor de Discovery. Si se selecciona xml, el plugin genera una salida XML compatible con pruebas manuales.

Discovery

Este plugin puede integrarse con el Discovery de Pandora FMS.

Para ello se debe cargar el paquete .disco correspondiente desde la librería de Pandora FMS o desde el sistema de plugins de la consola.

Una vez cargado, se podrán monitorizar recursos Azure Application Gateway creando tareas de Discovery desde la sección correspondiente de Cloud/Application Discovery.

Para cada tarea se solicitarán los siguientes datos en el paso Azure Base:

En el paso Application Gateway Options se podrán configurar opciones adicionales:

En el paso Metrics se podrán configurar las métricas y filtros:

Las tareas completadas con éxito tendrán un resumen de ejecución con información similar a:

Agentes y módulos generados

El plugin crea un módulo Application Gateway Connection para cada Application Gateway monitorizado. Este módulo se crea con valor 1 cuando el recurso está disponible y con valor 0 cuando el recurso almacenado en la caché de entidades ya no aparece en Azure.

Si Create one agent per Application Gateway está activado, se crea un agente por cada Application Gateway descubierto. El nombre del agente se forma usando el prefijo configurado en Application Gateway agent prefix más el nombre del Application Gateway.

Ejemplo:

Application Gateway agent prefix: Azure Application Gateway 
Application Gateway name: agw-production-frontend
Agent name: Azure Application Gateway agw-production-frontend

Si Create one agent per Application Gateway está desactivado, todos los módulos se envían al agente indicado en Target agent. En este modo, el nombre del Application Gateway se añade como prefijo al nombre de cada módulo para evitar colisiones.

Los módulos disponibles son:

Application Gateway Connection: Estado del recurso Azure Application Gateway (1=UP, 0=DOWN). Se crea como generic_proc.
CPU Utilization: Uso de CPU del Application Gateway.
Current Connections: Número de conexiones actuales.
Failed Requests: Número de peticiones fallidas.
HTTP Status: Conteo de códigos de estado HTTP.
Throughput: Throughput medio del Application Gateway.
Total Requests: Número total de peticiones.
Healthy Host Count: Número de hosts backend sanos.
Unhealthy Host Count: Número de hosts backend no sanos.
Average Request Count Per Healthy Host: Promedio de peticiones por host backend sano.
Backend Connect Time: Tiempo de conexión al backend.
Backend First Byte Response Time: Tiempo hasta el primer byte de respuesta del backend.
Backend Last Byte Response Time: Tiempo hasta el último byte de respuesta del backend.
Application Gateway Total Time: Tiempo total procesado por el Application Gateway.
Client RTT: Round Trip Time del cliente.
Bytes Sent: Bytes enviados.
Bytes Received: Bytes recibidos.
TLS Protocol: Conteo por protocolo TLS.
Compute Units: Unidades de cómputo. Solo aplica a SKUs v2.
Capacity Units: Unidades de capacidad. Solo aplica a SKUs v2.
Estimated Billed Capacity Units: Capacidad facturada estimada. Solo aplica a SKUs v2.
Fixed Billable Capacity Units: Capacidad facturable fija. Solo aplica a SKUs v2.
New Connections Per Second: Nuevas conexiones por segundo. Solo aplica a SKUs v2.
Backend HTTP Status: Conteo de códigos HTTP devueltos por backend.
WAF Matched Count: Coincidencias WAF. Solo aplica a SKUs WAF.
WAF Blocked Requests: Peticiones bloqueadas por WAF. Solo aplica a SKUs WAF.
WAF Blocked Count: Conteo de bloqueos WAF. Solo aplica a SKUs WAF.
WAF Total Requests: Peticiones totales procesadas por WAF. Solo aplica a SKUs WAF.
WAF Security Rule: Coincidencias de reglas de seguridad WAF. Solo aplica a SKUs WAF.
WAF Custom Rule: Coincidencias de reglas personalizadas WAF. Solo aplica a SKUs WAF.
WAF Bot Protection: Eventos de bot protection WAF. Solo aplica a SKUs WAF.
Backend TLS Negotiation Error: Errores de negociación TLS con backend.
Rejected Connections: Conexiones rechazadas.
Application Gateway Count: Conteo del recurso Application Gateway descubierto.
WAF JS Challenge Request Count: Peticiones con challenge JS WAF. Solo aplica a SKUs WAF.
WAF Penalty Box Hits: Hits de penalty box WAF. Solo aplica a SKUs WAF.
WAF Penalty Box Size: Tamaño de penalty box WAF. Solo aplica a SKUs WAF.
WebSocket Active Connections: Conexiones WebSocket activas.
WebSocket Specific Close Status Code: Códigos de cierre WebSocket.
WAF Captcha Challenge Request Count: Peticiones con CAPTCHA challenge WAF. Solo aplica a SKUs WAF.

Mapeo de tipos de módulo

MétricaTipo de módulo Pandora FMSAgregación AzureDescripción
Application Gateway Connection`generic_proc`Estado del recurso Azure Application Gateway. Valor 1 si está disponible y 0 si no se descubre en la ejecución actual.
CPU Utilization`generic_data`AverageUso de CPU del Application Gateway.
Current Connections`generic_data`AverageConexiones actuales.
Failed Requests`generic_data`TotalPeticiones fallidas.
HTTP Status`generic_data`TotalConteo de estados HTTP.
Throughput`generic_data`AverageThroughput medio.
Total Requests`generic_data`TotalTotal de peticiones.
Backend and latency metrics`generic_data`Average or TotalMétricas de backend, latencia, tráfico, seguridad, capacidad, WAF y WebSocket devueltas por Azure Monitor.

Allow y deny regexp

El filtro de módulos se aplica sobre el nombre final del módulo, una vez aplicado el prefijo configurado en Modules prefix. Cada línea del textarea se interpreta como una expresión regular.

Ejemplo de Modules allow regexp:

CPU|Throughput
Backend.*

Con esta configuración solo se crearán módulos cuyo nombre coincida con CPU|Throughput o con Backend.*.

Ejemplo de Modules deny regexp:

Bytes
WAF.*

Con esta configuración se descartan todos los módulos cuyo nombre contenga Bytes o empiece por WAF.

Si se configuran ambos filtros, el módulo debe coincidir con el allow y no debe coincidir con el deny. El filtro deny se utiliza para descartar módulos concretos aunque el grupo general esté activado.

Caché de entidades descubiertas

El plugin utiliza un fichero temporal entities_list para almacenar los Application Gateways descubiertos. Esta lógica permite detectar recursos que existían en ejecuciones anteriores y que después han desaparecido de Azure.

Cuando un Application Gateway está almacenado en el fichero de entidades pero ya no aparece en el descubrimiento actual, el plugin mantiene su agente y genera el módulo Application Gateway Connection con valor 0. De esta forma Pandora FMS puede alertar de la desaparición del recurso en lugar de eliminarlo silenciosamente de la monitorización.

Si se activa Enable entities file re-scan interval, el fichero de entidades se refresca cuando se supera el intervalo configurado en Entities re-scan interval. Si se deja desactivado, se conserva la lista de entidades descubiertas para poder detectar desapariciones.