Logs de recurso do Firewall de Aplicativo Web do Azure

Você pode monitorar os recursos do Firewall de aplicativo Web usando logs. Você pode salvar desempenho, acesso e outros dados ou consumi-los a partir de um recurso para fins de monitoramento.

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Logs de diagnóstico

Você pode usar tipos diferentes de logs no Azure para gerenciar e solucionar problemas de gateways de aplicativo. Você pode acessar alguns desses logs por meio do portal. Todos os logs podem ser extraídos de um Armazenamento de blobs do Azure e exibidos em diferentes ferramentas, como logs do Azure Monitor, Excel e Power BI. Saiba mais sobre os tipos diferentes de logs na lista a seguir:

  • Log de atividades: você pode usar os logs de atividades do Azure para exibir todas as operações enviadas à sua assinatura do Azure e o respectivo status. As entradas do log de atividades são coletadas por padrão e podem ser exibidas no portal do Azure.
  • Log de recursos de acesso: esse log exibe os padrões de acesso ao Gateway de Aplicativo e analisa informações importantes. Isso inclui o IP do chamador, a URL solicitada, a latência de resposta, o código de retorno e os bytes de entrada e saída. Esse log contém registros individuais para cada solicitação e associa essa solicitação ao Gateway de Aplicativo exclusivo que processou a solicitação. A instância do Gateway de Aplicativo pode ser identificada pela propriedade instanceId.
  • Log de recursos de desempenho: esse log exibe o desempenho das instâncias do Gateway de Aplicativo. Esse log captura informações de desempenho de cada instância, incluindo o total de solicitações atendidas, a vazão de dados em bytes, o total de solicitações atendidas, a contagem de solicitações com falha e a contagem de instâncias de back-end íntegras ou não íntegras. Um log de desempenho é coletado a cada 60 segundos. O log de Desempenho está disponível apenas para a SKU v1. Para a SKU v2, use as Métricas para dados de desempenho.
  • Logs de recursos de firewall: esse log exibe as solicitações registradas por meio do modo de detecção ou prevenção de um gateway de aplicativo configurado com o firewall do aplicativo Web.

Observação

Os logs estão disponíveis apenas para os recursos implantados no modelo de implantação do Azure Resource Manager. Você não pode usar logs para recursos do modelo de implantação clássico. Para obter um melhor entendimento dos dois modelos, consulte o artigo Noções básicas sobre a implantação do Resource Manager e a implantação clássica.

Você tem três opções para armazenar os logs:

  • Conta de armazenamento: as contas de armazenamento são mais adequadas para os logs quando eles são armazenados por mais tempo e examinados quando necessário.
  • Hubs de eventos: os hubs de eventos são uma ótima opção para integração a outras ferramentas SIEM (informações de segurança e gerenciamento de evento) para receber alertas sobre os recursos.
  • Logs do Azure Monitor: os logs do Azure Monitor são mais adequados para o monitoramento geral em tempo real do aplicativo ou para a observação de tendências.

Habilitar o log por meio do PowerShell

O log de atividade é habilitado automaticamente para todos os recursos do Resource Manager. Você deve habilitar o log de acesso e de desempenho para começar a coletar os dados disponíveis por meio desses logs. Para habilitar o log, use as seguintes etapas:

  1. Anote a ID do recurso da conta de armazenamento, na qual os dados de log são armazenados. Esse valor tem o formato /subscriptions/<subscriptionId>/resourceGroups/<grupo de recursos name>/providers/Microsoft.Storage/storageAccounts/<nome da conta de armazenamento>. Use qualquer conta de armazenamento em sua assinatura. Use o portal do Azure para encontrar essas informações.

    Portal: ID do recurso da conta de armazenamento

  2. Anote a ID do Recurso do gateway de aplicativo para o qual o log está habilitado. Esse valor tem o formato /subscriptions/<subscriptionId>/resourceGroups/<grupo de recursos name>/providers/Microsoft.Network/applicationGateways/<nome do gateway de aplicativo>. Use o portal para encontrar essas informações.

    Portal: ID do recurso do gateway de aplicativo

  3. Habilite o log de diagnóstico usando o seguinte cmdlet do 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     
    

Dica

Os logs de atividades não exigem uma conta de armazenamento separada. O uso do armazenamento para logs de acesso e de desempenho gera encargos de serviço.

Habilitar o log por meio do portal do Azure

  1. No portal do Azure, encontre o recurso e selecione Configurações de diagnóstico.

    Para o Gateway de Aplicativo, três logs estão disponíveis:

    • Log de acesso
    • Log de desempenho
    • Log de firewall
  2. Selecione Adicionar configuração de diagnóstico.

  3. A página Configurações de diagnóstico fornece as configurações dos logs de recursos. Neste exemplo, o Log Analytics armazena os logs. Você também pode usar um hub de eventos, uma conta de armazenamento ou uma solução de parceiro para salvar os logs de recursos.

    Captura de tela mostrando as Configurações de diagnóstico.

  4. Digite um nome para as configurações, confirme e selecione Salvar.

Log de atividades

O Azure gera o log de atividades por padrão. Os logs são preservados por 90 dias no armazenamento de logs de eventos do Azure. Saiba mais sobre esses logs lendo o artigo Exibir eventos e o log de atividades.

Log de acesso

O log de acesso é gerado apenas se você o habilitou em cada instância do Gateway de Aplicativo, conforme detalhado nas etapas anteriores. Os dados são armazenados na conta de armazenamento especificada quando o log foi habilitado. Cada acesso ao Gateway de Aplicativo é registrado no formato JSON, conforme mostrado no seguinte exemplo da v1:

Valor Descrição
instanceId Instância do Gateway de Aplicativo que atendeu à solicitação.
clientIP IP de origem da solicitação.
clientPort Porta de origem da solicitação.
httpMethod Método HTTP usado pela solicitação.
requestUri URI da solicitação recebida.
RequestQuery Roteado pelo servidor: Instância do pool de back-end que foi enviada à solicitação.
X-AzureApplicationGateway-LOG-ID: ID de Correlação usada para a solicitação. Ela pode ser usada para solucionar problemas de tráfego nos servidores back-end.
STATUS-DO-SERVIDOR: código de resposta HTTP que o Gateway de Aplicativo recebeu do back-end.
UserAgent Agente do usuário do cabeçalho da solicitação HTTP.
httpStatus Código de status HTTP retornado ao cliente do Gateway de Aplicativo.
httpVersion Versão HTTP da solicitação.
receivedBytes Tamanho do pacote recebido, em bytes.
sentBytes Tamanho do pacote enviado, em bytes.
timeTaken Duração (em milissegundos) necessária para que uma solicitação seja processada e sua resposta seja enviada. Isso é calculado como o intervalo a partir da hora em que o Gateway de Aplicativo recebe o primeiro byte de uma solicitação HTTP até a hora em que a operação de envio de resposta é concluída. É importante observar que o campo Time-Taken geralmente inclui a hora em que os pacotes de solicitação e resposta são transmitidos pela rede.
sslEnabled Indica se a comunicação com os pools de back-end usou o TLS/SSL. Os valores válidos são ativado e desativado.
host O nome do host com o qual a solicitação foi enviada para o servidor de back-end. Esse nome vai refletir se o nome de host de back-end estiver sendo substituído.
originalHost O nome do host com o qual a solicitação foi recebida pelo Gateway de Aplicativo do 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": "191.96.249.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=874f1f0f-6807-41c9-b7bc-f3cfa74aa0b1&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"
    }
}

Para o Gateway de Aplicativo e o WAF v2, os logs mostram algumas informações adicionais:

Valor Descrição
instanceId Instância do Gateway de Aplicativo que atendeu à solicitação.
clientIP IP de origem da solicitação.
clientPort Porta de origem da solicitação.
httpMethod Método HTTP usado pela solicitação.
requestUri URI da solicitação recebida.
UserAgent Agente do usuário do cabeçalho da solicitação HTTP.
httpStatus Código de status HTTP retornado ao cliente do Gateway de Aplicativo.
httpVersion Versão HTTP da solicitação.
receivedBytes Tamanho do pacote recebido, em bytes.
sentBytes Tamanho do pacote enviado, em bytes.
timeTaken Duração (em milissegundos) necessária para que uma solicitação seja processada e sua resposta seja enviada. Isso é calculado como o intervalo a partir da hora em que o Gateway de Aplicativo recebe o primeiro byte de uma solicitação HTTP até a hora em que a operação de envio de resposta é concluída. É importante observar que o campo Time-Taken geralmente inclui a hora em que os pacotes de solicitação e resposta são transmitidos pela rede.
sslEnabled Indica se a comunicação com os pools de back-end usou o TLS. Os valores válidos são ativado e desativado.
sslCipher Conjunto de criptografia usado para comunicação TLS (se o TLS estiver habilitado).
sslProtocol Protocolo TLS usado (se o TLS estiver habilitado).
serverRouted O servidor back-end para o qual o gateway de aplicativo roteia a solicitação.
serverStatus Código de status HTTP do servidor back-end.
serverResponseLatency Latência da resposta do servidor back-end.
host Endereço listado no cabeçalho de host da solicitação.
{
    "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": "191.96.249.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",
    }
}

Log de desempenho

O log de desempenho é gerado apenas se você o habilitou em cada instância do Gateway de Aplicativo, conforme detalhado nas etapas anteriores. Os dados são armazenados na conta de armazenamento especificada quando o log foi habilitado. Os dados do log de desempenho são gerados em intervalos de 1 minuto. Ele está disponível apenas para a SKU v1. Para a SKU v2, use as Métricas para dados de desempenho. Os seguintes dados são registrados em log:

Valor Descrição
instanceId Instância do Gateway de Aplicativo para a qual os dados de desempenho estão sendo gerados. Para um gateway de aplicativo de várias instâncias, há uma linha por instância.
healthyHostCount Número de hosts íntegros no pool de back-end.
unHealthyHostCount Número de hosts não íntegros no pool de back-end.
requestCount Número de solicitações atendidas.
latência Latência média (em milissegundos) de solicitações da instância para o back-end que atende às solicitações.
failedRequestCount Número de solicitações com falha.
throughput Vazão de dados média desde o último log, medida em 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"
    }
}

Observação

A latência é calculada a partir da hora em que o primeiro byte da solicitação HTTP é recebido até a hora em que o último byte da resposta HTTP é enviado. É a soma do tempo de processamento do Gateway de Aplicativo e do custo de rede para o back-end, mais o tempo que o back-end leva para processar a solicitação.

Log de firewall

O log de firewall é gerado apenas se você o habilitou em cada gateway de aplicativo, conforme detalhado nas etapas anteriores. Esse log também exige a configuração de um firewall de aplicativo Web em um gateway de aplicativo. Os dados são armazenados no destino especificado quando o log for habilitado. Os seguintes dados são registrados em log:

Valor Descrição
instanceId Instância do Gateway de Aplicativo para a qual os dados de firewall estão sendo gerados. Para um gateway de aplicativo de várias instâncias, há uma linha por instância.
clientIp IP de origem da solicitação.
clientPort Porta de origem da solicitação.
requestUri URL da solicitação recebida.
ruleSetType Tipo de conjunto de regras. O valor disponível é OWASP.
ruleSetVersion Versão utilizada do conjunto de regras. Os valores disponíveis são 2.2.9 e 3.0.
ruleId ID da Regra do evento de gatilho.
message Mensagem amigável para o evento de gatilho. Mais detalhes são fornecidos na seção de detalhes.
ação Modo de Política: Detecção
- Detectada – Essa é a única ação do WAF quando ele está no modo de detecção. Todas as condições de uma regra especificada foram correspondidas, e a solicitação foi registrada em log e transmitida para o back-end.

Modo de Política: Prevenção
- Permitida – Todas as condições foram correspondidas com uma regra especificada, e a solicitação foi transmitida para o back-end.
- Bloqueada – Todas as condições foram correspondidas com uma regra especificada, e a solicitação foi bloqueada.
- Correspondida – Uma/mais condições foram correspondidas com uma regra especificada, mas a decisão de bloquear ou transmitir a solicitação precisará de avaliação adicional e será avaliada com base na regra final de pontuação de anomalias.
site Site para o qual o log foi gerado. No momento, somente Global é listado porque as regras são globais.
detalhes Detalhes do evento de gatilho.
details.message Descrição da regra.
details.data Dados específicos encontrados na solicitação que corresponderam à regra.
details.file Arquivo de configuração que continha a regra.
details.line Número de linha no arquivo de configuração que disparou o evento.
hostname Nome do host ou endereço IP do Gateway de Aplicativo.
transactionId ID exclusiva para uma determinada transação que ajuda a agrupar as violações de regra que ocorrem na mesma solicitação.
policyId ID exclusiva da política de firewall associada ao Gateway de Aplicativo, ao Ouvinte ou ao Caminho.
policyScope O local da política - os valores podem ser "Global", "Ouvinte" ou "Local".
policyScopeName O nome do objeto em que a política é aplicada.
{
  "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": "52.161.109.147",
      "clientPort": "0",
      "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/1496a758-b2ff-43ef-b738-8e9eb5161a86/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/perListener",
      "policyScope": "Listener",
      "policyScopeName": "httpListener1"
    }
  }
}

Exibir e analisar o log de atividades

Você pode exibir e analisar os dados do log de atividades usando um dos seguintes métodos:

  • Ferramentas do Azure: recupere informações do log de atividades por meio do Azure PowerShell, da CLI do Azure, da API REST do Azure ou do portal do Azure. As instruções passo a passo para cada método são detalhadas no artigo Activity operations with Resource Manager (Operações de atividade com o Resource Manager).
  • Power BI: se ainda não tiver uma conta do Power BI, experimente uma gratuitamente. Você pode analisar seus dados usando os aplicativos de modelo de Power BI.

Exibir e analisar os logs de acesso, de desempenho e de firewall

Os logs do Azure Monitor podem coletar os arquivos de log de contadores e eventos de sua conta de Armazenamento de blobs. Ele inclui visualizações e funcionalidades de pesquisa avançadas para analisar os logs.

Você também pode se conectar à sua conta de armazenamento e recuperar as entradas de log JSON para logs de desempenho e acesso. Depois de baixar os arquivos JSON, você pode convertê-los em CSV e exibi-los no Excel, no Power BI ou em qualquer outra ferramenta de visualização de dados.

Dica

Se estiver familiarizado com o Visual Studio e os conceitos básicos de alteração de valores de constantes e variáveis em C#, você poderá usar as ferramentas de conversor de log disponíveis no GitHub.

Analisar logs de acesso por meio do GoAccess

Publicamos um modelo do Resource Manager que instala e executa o popular analisador de logs GoAccess para logs de acesso do Gateway de Aplicativo. O GoAccess fornece valiosas estatísticas de tráfego HTTP, tais como visitantes exclusivos, arquivos solicitados, hosts, sistemas operacionais, navegadores, códigos de status HTTP e muito mais. Para obter mais detalhes, consulte o arquivo Leiame na pasta de modelo do Resource Manager no GitHub.

Próximas etapas