Registros de recursos para el firewall de aplicaciones web de Azure

Puede supervisar los recursos del Firewall de aplicaciones web con los registros. Puede guardar el rendimiento, el acceso y otros datos, o bien consumirlos desde un recurso con fines de supervisión.

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Para comenzar, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Registros de diagnóstico

Puede usar diferentes tipos de registros en Azure para administrar y solucionar problemas de Application Gateway. Se puede acceder a algunos de estos registros mediante el portal. Se pueden extraer todos los registros de Azure Blob Storage y visualizarse en distintas herramientas, como los registros de Azure Monitor, Excel y PowerBI. Puede obtener más información sobre los diferentes tipos de registros en la lista siguiente:

  • Registro de actividades: Puede usar registros de actividad de Azure para ver todas las operaciones que se envían a la suscripción de Azure, y su estado. Las entradas del registro de actividades se recopilan de forma predeterminada y se pueden ver en Azure Portal.
  • Registro de recursos de acceso: Puede usar este registro para ver los patrones de acceso de Application Gateway y analizar información importante. Esto incluye la dirección IP del autor de la llamada, la dirección URL solicitada, la latencia de respuesta, el código de retorno y los bytes de entrada y salida. Este registro contiene registros individuales para cada solicitud y asocia esa solicitud a la instancia de Application Gateway única que la ha procesado. Las instancias de Application Gateway únicas se pueden identificar por la propiedad instanceId.
  • Registro de recursos de rendimiento: este registro se puede usar para ver el rendimiento de las instancias de Application Gateway. Este registro captura la información de rendimiento de cada instancia, incluida la cantidad total de solicitudes atendidas, el rendimiento en bytes, la cantidad de solicitudes con error y el número de instancias de back-end con un mantenimiento correcto o incorrecto. El registro de rendimiento se recopila cada 60 segundos. El registro de rendimiento solo está disponible para la SKU v1. En la SKU v2, use Métricas para los datos de rendimiento.
  • Registro de recursos de firewall: este registro se puede usar para ver las solicitudes que se registran con el modo de detección o prevención de una puerta de enlace de aplicaciones que está configurada con el firewall de aplicaciones web.

Nota

Los registros solo están disponibles para los recursos implementados en el modelo de implementación de Azure Resource Manager. No puede usar los registros de recursos del modelo de implementación clásica. Para entender mejor los dos modelos, consulte el artículo Descripción de la implementación de Resource Manager y la implementación clásica .

Tiene tres opciones para almacenar los archivos de registro:

  • Cuenta de almacenamiento: cuentas que resultan especialmente útiles para registros cuando estos se almacenan durante mucho tiempo y se revisan cuando es necesario.
  • Centros de eventos: Centro de eventos es una buena opción para la integración con otras herramientas de administración de eventos e información de seguridad (SIEM) para obtener alertas sobre los recursos.
  • Registros de Azure Monitor: se usan para la supervisión general en tiempo real de la aplicación o para examinar las tendencias.

Habilitación del registro con PowerShell

El registro de actividades se habilita automáticamente para todos los recursos de Resource Manager. Debe habilitar el registro de acceso y rendimiento para iniciar la recopilación de los datos disponibles a través de esos registros. Para habilitar el registro, realice los siguientes pasos:

  1. Anote el identificador de recurso de la cuenta de almacenamiento donde se almacenan los datos de registro. Este valor tiene este formato: /subscriptions/<idSuscripción>/resourceGroups/<nombreDeGrupoDeRecursos>/providers/Microsoft.Storage/storageAccounts/<nombreDeCuentaDeAlmacenamiento>. Puede usar cualquier cuenta de almacenamiento de la suscripción. Para buscar esta información, se puede usar Azure Portal.

    Portal: identificador de recurso de la cuenta de almacenamiento

  2. Observe el identificador de recurso de la puerta de enlace de aplicaciones para la que se está habilitando el registro. Este valor tiene el siguiente formato: /subscriptions/<idSuscripción>/resourceGroups/<nombreDeGrupoDeRecursos>/providers/Microsoft.Network/applicationGateways/<nombreDePuertaDeEnlaceDeAplicaciones>. Para buscar esta información, use Azure Portal.

    Portal: identificador de recurso de la puerta de enlace de aplicaciones

  3. Habilite el registro de recursos mediante el siguiente cmdlet de PowerShell:

    Set-AzDiagnosticSetting  -ResourceId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name> -StorageAccountId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name> -Enabled $true     
    

Sugerencia

Los registros de actividades no requieren una cuenta de almacenamiento separada. El uso del almacenamiento para el registro de acceso y rendimiento supondrá un costo adicional de servicio.

Habilitación del registro mediante Azure Portal

  1. En Azure Portal, busque el recurso y seleccione Configuración de diagnóstico.

    Hay tres registros de auditoría disponibles para Application Gateway:

    • Registro de acceso
    • Registro de rendimiento
    • Registro de firewall
  2. Seleccione Agregar configuración de diagnóstico.

  3. En la página Configuración de diagnóstico, se encuentran las opciones de configuración de los registros de recursos. En este ejemplo, se utiliza Log Analytics para almacenar los registros. También puede usar un centro de eventos, una cuenta de almacenamiento o una solución de partner para guardar los registros de recursos.

    Captura de pantalla en la que se muestra la configuración de diagnóstico.

  4. Escriba un nombre para la configuración, confírmelo y seleccione Guardar.

Registro de actividades

Azure genera el registro de actividad de forma predeterminada. Los registros se conservan durante 90 días en el almacén de registros de eventos de Azure. Para más información sobre estos registros, consulte el artículo Visualización de eventos y registros de actividades.

Registro de acceso

El registro de acceso solo se genera si lo habilitó para cada instancia de Application Gateway, tal y como se indicó en los pasos anteriores. Los datos se almacenan en la cuenta de almacenamiento que especificó cuando habilitó el registro. Cada acceso de Application Gateway se registra en formato JSON, tal y como se muestra en el ejemplo siguiente para v1:

Value Descripción
instanceId Instancia de Application Gateway que atendió la solicitud.
clientIP IP de origen de la solicitud.
clientPort Puerto de origen de la solicitud.
httpMethod Método HTTP utilizado por la solicitud.
requestUri URI de la solicitud recibida.
RequestQuery Server-Routed: instancia del grupo de back-end a la que se ha enviado la solicitud.
X-AzureApplicationGateway-LOG-ID: identificador de correlación usado para la solicitud. Se puede utilizar para solucionar problemas de tráfico en los servidores back-end.
SERVER-STATUS: código de respuesta HTTP que Application Gateway ha recibido del back-end.
UserAgent Agente de usuario del encabezado de solicitud HTTP.
httpStatus Código de estado HTTP que se devuelve al cliente desde Application Gateway.
HttpVersion Versión HTTP de la solicitud.
receivedBytes Tamaño de paquete recibido, en bytes.
sentBytes Tamaño de paquete enviado, en bytes.
timeTaken Período de tiempo (en milisegundos) que se tarda en procesar una solicitud y en enviar la respuesta. Esto se calcula como el intervalo desde el momento en que Application Gateway recibe el primer byte de una solicitud HTTP hasta el momento en que termina la operación de envío de la respuesta. Es importante tener en cuenta que el campo Time-Taken normalmente incluye la hora a la que los paquetes de solicitud y respuesta se desplazan a través de la red.
sslEnabled Indica si la comunicación con los grupos de back-end utilizaron TLS/SSL. Los valores válidos son on y off.
host El nombre de host con el que se envió la solicitud al servidor back-end. Si se está reemplazando el nombre de host de back-end, se reflejará en este nombre.
originalHost Nombre de host con el que Application Gateway recibió la solicitud del cliente.
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayAccess",
    "timestamp": "2017-04-26T19:27:38Z",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "ApplicationGatewayRole_IN_0",
        "clientIP": "203.0.113.97",
        "clientPort": 46886,
        "httpMethod": "GET",
        "requestUri": "/phpmyadmin/scripts/setup.php",
        "requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e&SERVER-STATUS=404",
        "userAgent": "-",
        "httpStatus": 404,
        "httpVersion": "HTTP/1.0",
        "receivedBytes": 65,
        "sentBytes": 553,
        "timeTaken": 205,
        "sslEnabled": "off",
        "host": "www.contoso.com",
        "originalHost": "www.contoso.com"
    }
}

En el caso de Application Gateway y WAF v2, los registros muestran un poco más información:

Value Descripción
instanceId Instancia de Application Gateway que atendió la solicitud.
clientIP IP de origen de la solicitud.
clientPort Puerto de origen de la solicitud.
httpMethod Método HTTP utilizado por la solicitud.
requestUri URI de la solicitud recibida.
UserAgent Agente de usuario del encabezado de solicitud HTTP.
httpStatus Código de estado HTTP que se devuelve al cliente desde Application Gateway.
HttpVersion Versión HTTP de la solicitud.
receivedBytes Tamaño de paquete recibido, en bytes.
sentBytes Tamaño de paquete enviado, en bytes.
timeTaken Período de tiempo (en milisegundos) que se tarda en procesar una solicitud y en enviar la respuesta. Esto se calcula como el intervalo desde el momento en que Application Gateway recibe el primer byte de una solicitud HTTP hasta el momento en que termina la operación de envío de la respuesta. Es importante tener en cuenta que el campo Time-Taken normalmente incluye la hora a la que los paquetes de solicitud y respuesta se desplazan a través de la red.
sslEnabled Indica si la comunicación con los grupos de back-end utilizaron TLS. Los valores válidos son on y off.
sslCipher Conjunto de cifrado que se usa para la comunicación TLS (si TLS está habilitado).
sslProtocol Protocolo TLS que se usa (si se ha habilitado TLS).
serverRouted Servidor back-end al que Application Gateway redirige la solicitud.
serverStatus Código de estado HTTP del servidor back-end.
serverResponseLatency Latencia de la respuesta del servidor back-end.
host Dirección que aparece en el encabezado de host de la solicitud.
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayAccess",
    "time": "2017-04-26T19:27:38Z",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "appgw_1",
        "clientIP": "203.0.113.97",
        "clientPort": 46886,
        "httpMethod": "GET",
        "requestUri": "/phpmyadmin/scripts/setup.php",
        "userAgent": "-",
        "httpStatus": 404,
        "httpVersion": "HTTP/1.0",
        "receivedBytes": 65,
        "sentBytes": 553,
        "timeTaken": 205,
        "sslEnabled": "off",
        "sslCipher": "",
        "sslProtocol": "",
        "serverRouted": "104.41.114.59:80",
        "serverStatus": "200",
        "serverResponseLatency": "0.023",
        "host": "www.contoso.com",
    }
}

Registro de rendimiento

El registro de rendimiento solo se genera si lo habilitó para cada instancia de Application Gateway, tal y como se indicó en los pasos anteriores. Los datos se almacenan en la cuenta de almacenamiento que especificó cuando habilitó el registro. Los datos de registro de rendimiento se generan en intervalos de 1 minuto. Solo está disponible para la SKU v1. En la SKU v2, use Métricas para los datos de rendimiento. Se registran los datos siguientes:

Value Descripción
instanceId Instancia de Application Gateway para la que se van a generar los datos. Si hay varias instancias de Application Gateway, hay una fila por cada instancia.
healthyHostCount Número de hosts con un mantenimiento correcto en el grupo de back-end.
unHealthyHostCount Número de hosts con un mantenimiento incorrecto en el grupo de back-end.
requestCount Número de solicitudes atendidas.
latency Latencia media (en milisegundos) de las solicitudes desde la instancia hasta el back-end que atiende las solicitudes.
failedRequestCount Número de solicitudes con error.
throughput Rendimiento medio desde el último registro, medido en bytes por segundo.
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayPerformance",
    "time": "2016-04-09T00:00:00Z",
    "category": "ApplicationGatewayPerformanceLog",
    "properties":
    {
        "instanceId":"ApplicationGatewayRole_IN_1",
        "healthyHostCount":"4",
        "unHealthyHostCount":"0",
        "requestCount":"185",
        "latency":"0",
        "failedRequestCount":"0",
        "throughput":"119427"
    }
}

Nota

La latencia se calcula desde el momento en que se recibe el primer byte de la solicitud HTTP hasta el momento en que se envía el último byte de la respuesta HTTP. Es la suma del tiempo de procesamiento de Application Gateway más el costo de la red hasta el back-end, más el tiempo que el back-end tarda en procesar la solicitud.

Registro de firewall

El registro de firewall solo se genera si lo habilitó para cada instancia de Application Gateway, tal y como se indicó en los pasos anteriores. Este registro también requiere que el firewall de aplicaciones web esté configurado en una instancia de Application Gateway. Los datos se almacenan en el destino que especificó cuando habilitó el registro. Se registran los datos siguientes:

Value Descripción
instanceId Instancia de Application Gateway para la que se van a generar los datos de firewall. Si hay varias instancias de Application Gateway, hay una fila por cada instancia.
clientIp IP de origen de la solicitud.
requestUri URI de la solicitud recibida.
ruleSetType Tipo de conjunto de reglas. El valor disponible es OWASP.
ruleSetVersion Versión utilizada del conjunto de reglas. Los valores disponibles son 2.2.9 y 3.0.
ruleId Identificador de regla del evento desencadenador.
message Mensaje descriptivo para el evento desencadenador. En la sección de detalles se proporciona más información.
action Modo de directiva: Detección
- Detectado: esta es la única acción para WAF cuando está en modo de detección. Se estableció una coincidencia con todas las condiciones de una regla determinada y la solicitud se registró y, luego, se pasó al back-end.

Modo de directiva: Prevención
- Permitido: todas las condiciones coincidieron con una regla determinada y la solicitud se pasó al back-end.
- Bloqueado: todas las condiciones coincidieron con una regla determinada y la solicitud se bloqueó.
- Coincidentes: una o varias condiciones coincidieron con una regla determinada, pero la decisión de bloquear o pasar la solicitud deberá evaluarse posteriormente en función de la regla final de puntuación de anomalías.

Modo de directiva: desafío de JS
- JSChallengeIssued: emitido debido a la no validez o la falta de autorización del desafío, falta la respuesta.

Este registro se crea cuando un cliente solicita acceso a una aplicación web por primera vez y no se ha desafiado anteriormente. Este cliente recibe la página de desafío de JS y continúa con el proceso del desafío de JS. Tras el cálculo correcto, al cliente se le concede la cookie de validez.

- JSChallengePass: se pasa debido a una respuesta de desafío válida.

Este registro se crea cuando un cliente resuelve el desafío de JS y vuelve a enviar la solicitud con la respuesta correcta. En este caso, el WAF de Azure valida la cookie y continúa procesando las reglas restantes sin generar otro desafío de JS.

- JSChallengeValid: se registra o pasa debido a un desafío válido

Este registro se crea cuando un cliente ha resuelto previamente un desafío. En este caso, el WAF de Azure registra la solicitud y continúa con el proceso de las reglas restantes.

- JSChallengeBlock: bloqueado

Este registro se crea cuando se produce un error en el cálculo del desafío de JS.
site Sitio para el que se generó el registro. Actualmente, solo se incluye Global porque las reglas son globales.
detalles Detalles del evento desencadenador.
details.message Descripción de la regla.
details.data Datos específicos que se encuentran en la solicitud y que corresponden a la regla.
details.file Archivo de configuración que contiene la regla.
details.line Número de línea del archivo de configuración que desencadenó el evento.
hostname Nombre de host o dirección IP de la puerta de enlace de aplicaciones.
transactionId Identificador único de una transacción determinada que ayuda a agrupar varias infracciones de reglas que se produjeron dentro de la misma solicitud.
policyId ID. exclusivo de la Directiva de Firewall asociada con la Application Gateway, el cliente escucha o la ruta de acceso.
policyScope La ubicación de los valores de la directiva puede ser "Global", "Cliente de escucha" o "Ubicación".
policyScopeName Nombre del objeto al que se aplica la directiva.
{
  "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
  "operationName": "ApplicationGatewayFirewall",
  "time": "2017-03-20T15:52:09.1494499Z",
  "category": "ApplicationGatewayFirewallLog",
  "properties": {
      "instanceId": "ApplicationGatewayRole_IN_0",
      "clientIp": "203.0.113.147",
      "requestUri": "/",
      "ruleSetType": "OWASP",
      "ruleSetVersion": "3.0",
      "ruleId": "920350",
      "ruleGroup": "920-PROTOCOL-ENFORCEMENT",
      "message": "Host header is a numeric IP address",
      "action": "Matched",
      "site": "Global",
      "details": {
        "message": "Warning. Pattern match \"^[\\\\d.:]+$\" at REQUEST_HEADERS:Host ....",
        "data": "127.0.0.1",
        "file": "rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
        "line": "791"
      },
      "hostname": "127.0.0.1",
      "transactionId": "16861477007022634343",
      "policyId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/perListener",
      "policyScope": "Listener",
      "policyScopeName": "httpListener1"
    }
  }
}

Visualización y análisis del registro de actividades

Puede ver y analizar los datos del registro de actividades con cualquiera de los métodos siguientes:

Visualización y análisis de los registros de acceso, rendimiento y firewall

Los registros de Azure Monitor pueden recopilar los archivos de registro de eventos y contadores de la cuenta de Blob Storage. Incluye visualizaciones y eficaces funciones de búsqueda para analizar los registros.

También puede conectarse a la cuenta de almacenamiento y recuperar las entradas del registro de JSON de los registros de acceso y rendimiento. Después de descargar los archivos JSON, se pueden convertir a CSV y consultarlos en Excel, PowerBI o cualquier otra herramienta de visualización de datos.

Sugerencia

Si está familiarizado con Visual Studio y con los conceptos básicos de cambio de los valores de constantes y variables de C#, puede usar las herramientas convertidoras de registros que encontrará en GitHub.

Analizar los registros de acceso mediante GoAccess

Hemos publicado una plantilla de Resource Manager que se instala y ejecuta el popular analizador de registros GoAccess para los registros de acceso de Application Gateway. GoAccess proporciona valiosas estadísticas de tráfico HTTP como visitantes únicos, archivos solicitados, hosts, sistemas operativos, exploradores, códigos de estado HTTP y mucho más. Para obtener más información, consulte el archivo Léame en la carpeta de plantillas de Resource Manager en GitHub.

Pasos siguientes