Partilhar via


Logs de recursos para o Firewall de Aplicativo Web do Azure

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

Nota

Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Registos de diagnósticos

Você pode usar diferentes tipos de logs no Azure para gerenciar e solucionar problemas de gateways de aplicativos. Pode aceder a alguns destes registos através do portal. Todos os logs podem ser extraídos do armazenamento de Blob do Azure e exibidos em diferentes ferramentas, como logs do Azure Monitor, Excel e Power BI. Você pode saber mais sobre os diferentes tipos 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 seu status. As entradas de registos de atividades são recolhidas por predefinição e pode visualizá-las no portal do Azure.
  • Log de recursos de acesso: você pode usar esse log para exibir padrões de acesso do Application Gateway e analisar informações importantes. Isso inclui o IP do chamador, URL solicitado, latência de resposta, código de retorno e 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. Instâncias exclusivas do Application Gateway podem ser identificadas pela propriedade instanceId.
  • Log de recursos de desempenho: você pode usar esse log para exibir o desempenho das instâncias do Application Gateway. Esse log captura informações de desempenho para cada instância, incluindo o total de solicitações atendidas, a taxa de transferência 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 e 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 o SKU v2, use Métricas para dados de desempenho.
  • Log de recursos do firewall: você pode usar esse log para exibir as solicitações registradas por meio do modo de deteção ou prevenção de um gateway de aplicativo configurado com o firewall do aplicativo Web.

Nota

Os logs estão disponíveis apenas para recursos implantados no modelo de implantação do Azure Resource Manager. Não é possível usar logs para recursos no modelo de implantação clássico. Para uma melhor compreensão dos dois modelos, consulte o artigo Understanding Resource Manager deployment and classic deployment .

Tem três opções para armazenar os registos:

  • Conta de armazenamento: as contas de armazenamento são ideais para os registos quando estes são armazenados durante um período mais longo e revistos quando necessário.
  • Hubs de eventos: os hubs de eventos são uma ótima opção para integração com outras ferramentas de gerenciamento de eventos e informações de segurança (SIEM) para receber alertas sobre seus recursos.
  • Logs do Azure Monitor: os logs do Azure Monitor são melhor usados para monitoramento geral em tempo real do seu aplicativo ou para observar tendências.

Habilitar o registro em log por meio do PowerShell

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

  1. Anote o ID de recurso da conta de armazenamento, onde os dados de registo são armazenados. Esse valor tem o formato: /subscriptions/subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name>.< Pode utilizar qualquer conta de armazenamento na sua subscrição. Pode utilizar o portal do Azure para encontrar estas informações.

    Portal: ID do recurso para a conta de armazenamento

  2. Anote o ID de recurso do gateway de aplicativo para o qual o log está habilitado. Esse valor tem o formato: /subscriptions/subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name>.< Pode utilizar o portal para encontrar estas informações.

    Portal: ID de recurso para gateway de aplicativo

  3. Habilite o log de recursos 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     
    

Gorjeta

Os logs de atividades não exigem uma conta de armazenamento separada. A utilização do armazenamento para registo do acesso e do desempenho incorre em encargos de serviços.

Ativar o registo através do portal do Azure

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

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

    • Registo de acesso
    • Registo de desempenho
    • Registo da firewall
  2. Selecione Adicionar definição de diagnóstico.

  3. A página Configuração de diagnóstico fornece as configurações para os 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 as configurações e selecione Salvar.

Registo de atividades

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

Registo de acesso

O log de acesso será gerado somente se você o tiver habilitado em cada instância do Application Gateway, conforme detalhado nas etapas anteriores. Os dados são armazenados na conta de armazenamento que você especificou quando ativou o registro. Cada acesso do Application Gateway é registrado no formato JSON, conforme mostrado no exemplo a seguir para v1:

valor Description
instanceId Instância do Application Gateway que atendeu à solicitação.
clientIP [en] IP de origem para a solicitação.
clientPort [en] Porta de origem para a solicitação.
httpMethod Método HTTP usado pela solicitação.
requestUri URI da solicitação recebida.
RequestQuery Server-Routed: instância do pool de back-end que recebeu a solicitação.
X-AzureApplicationGateway-LOG-ID: ID de correlação usada para a solicitação. Ele pode ser usado para solucionar problemas de tráfego nos servidores back-end.
SERVER-STATUS: Código de resposta HTTP que o Application Gateway recebeu do back-end.
UserAgent Agente de usuário do cabeçalho de solicitação HTTP.
httpStatus Código de status HTTP retornado ao cliente do Application Gateway.
Versão http Versão HTTP da solicitação.
receivedBytes Tamanho do pacote recebido, em bytes.
enviBytes Tamanho do pacote enviado, em bytes.
timeTaken Período de tempo (em milissegundos) que leva para uma solicitação ser processada e sua resposta ser enviada. Isso é calculado como o intervalo entre o momento em que o Application Gateway recebe o primeiro byte de uma solicitação HTTP até o momento em que a operação de envio de resposta é concluída. É importante observar que o campo Tempo gasto geralmente inclui o tempo que os pacotes de solicitação e resposta estão viajando pela rede.
sslAtivado Se a comunicação com os pools de back-end usou TLS/SSL. Os valores válidos estão ativados e desativados.
host O nome do host com o qual a solicitação foi enviada para o servidor back-end. Se o nome do host de back-end estiver sendo substituído, esse nome refletirá isso.
originalAnfitrião O nome do host com o qual a solicitação foi recebida pelo Application Gateway 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 Application Gateway e o WAF v2, os logs mostram um pouco mais de informações:

valor Description
instanceId Instância do Application Gateway que atendeu à solicitação.
clientIP [en] IP de origem para a solicitação.
clientPort [en] Porta de origem para a solicitação.
httpMethod Método HTTP usado pela solicitação.
requestUri URI da solicitação recebida.
UserAgent Agente de usuário do cabeçalho de solicitação HTTP.
httpStatus Código de status HTTP retornado ao cliente do Application Gateway.
Versão http Versão HTTP da solicitação.
receivedBytes Tamanho do pacote recebido, em bytes.
enviBytes Tamanho do pacote enviado, em bytes.
timeTaken Período de tempo (em milissegundos) que leva para uma solicitação ser processada e sua resposta ser enviada. Isso é calculado como o intervalo entre o momento em que o Application Gateway recebe o primeiro byte de uma solicitação HTTP até o momento em que a operação de envio de resposta é concluída. É importante observar que o campo Tempo gasto geralmente inclui o tempo que os pacotes de solicitação e resposta estão viajando pela rede.
sslAtivado Se a comunicação com os pools de back-end usava TLS. Os valores válidos estão ativados e desativados.
sslCipher Conjunto de codificação sendo usado para comunicação TLS (se o TLS estiver habilitado).
sslProtocolo Protocolo TLS que está sendo usado (se o TLS estiver habilitado).
servidorRoteado 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 do 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",
    }
}

Registo de desempenho

O log de desempenho será gerado somente se você o tiver habilitado em cada instância do Application Gateway, conforme detalhado nas etapas anteriores. Os dados são armazenados na conta de armazenamento que você especificou quando ativou o registro. Os dados do log de desempenho são gerados em intervalos de 1 minuto. Está disponível apenas para o SKU v1. Para o SKU v2, use Métricas para dados de desempenho. Os seguintes dados são registrados:

valor Description
instanceId Instância do Application Gateway 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 pedidos atendidos.
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 pedidos falhados.
de transferência de dados Taxa de transferência 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"
    }
}

Nota

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

Registo da firewall

O log do firewall é gerado somente se você o tiver habilitado para cada gateway de aplicativo, conforme detalhado nas etapas anteriores. Esse log também requer que o firewall do aplicativo Web esteja configurado em um gateway de aplicativo. Os dados são armazenados no destino que você especificou quando ativou o registro. Os seguintes dados são registrados:

valor Description
instanceId Instância do Application Gateway 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.
clienteIp IP de origem para a solicitação.
requestUri URL do pedido recebido.
ruleSetType Tipo de conjunto de regras. O valor disponível é OWASP.
ruleSetVersion Versão do conjunto de regras usada. Os valores disponíveis são 2.2.9 e 3.0.
ruleId ID da regra do evento de acionamento.
mensagem Mensagem amigável para o evento de acionamento. Mais detalhes são fornecidos na seção de detalhes.
action Modo de política: deteção
- detetada
- Esta é a única ação para o WAF quando no modo de deteção. Todas as condições para uma determinada regra foram correspondidas e a solicitação foi registrada e, em seguida, passada para o back-end.

Modo de política: prevenção
- permitida
- Todas as condições foram combinadas para uma determinada regra e a solicitação foi passada para o back-end.
- Bloqueado - Todas as condições foram correspondidas para uma determinada regra e a solicitação foi bloqueada.
- Correspondência - Uma ou mais condições foram combinadas para uma determinada regra, mas a decisão de bloquear ou aprovar a solicitação precisará de uma avaliação mais aprofundada e será avaliada com base na regra final de pontuação de anomalia.

Modo de política: desafio JS
- JSChallengeIssued: Emitido devido a liberação de contestação ausente/inválida, resposta ausente.

Esse log é criado quando um cliente solicita acesso a um aplicativo Web pela primeira vez e não foi contestado anteriormente. Este cliente recebe a página de desafio JS e prossegue para calcular o desafio JS. Após o cálculo bem-sucedido, o cliente recebe o cookie de validade.

- JSChallengePass: Aprovado devido a uma resposta de desafio válida.

Esse log é criado quando um cliente resolve o desafio JS e reenvia a solicitação com a resposta correta. Nesse caso, o WAF do Azure valida o cookie e prossegue processando as regras restantes sem gerar outro desafio JS.

- JSChallengeValid: Logged/passthrough devido a desafio válido

Esse log é criado quando um cliente já resolveu um desafio. Nesse caso, o WAF do Azure registra a solicitação e prossegue processando as regras restantes.

- JSChallengeBlock: Bloqueado

Esse log é criado quando uma computação de desafio JS falha.
site Site para o qual o log foi gerado. Atualmente, apenas Global está listado porque as regras são globais.
detalhes Detalhes do evento desencadeador.
detalhes.mensagem Descrição da regra.
detalhes.data Dados específicos encontrados na solicitação que correspondiam à regra.
detalhes.arquivo Arquivo de configuração que continha a regra.
detalhes.line Número da linha no arquivo de configuração que disparou o evento.
Nome do anfitrião Nome do host ou endereço IP do Application Gateway.
transactionId ID exclusivo para uma determinada transação que ajuda a agrupar várias violações de regras que ocorreram dentro da mesma solicitação.
policyId ID exclusiva da Política de Firewall associada ao Gateway de Aplicativo, Ouvinte ou Caminho.
âmbito de aplicação da política A localização da política - os valores podem ser "Global", "Listener" ou "Location".
policyScopeName O nome do objeto onde 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",
      "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"
    }
  }
}

Ver e analisar o registo de atividades

Pode ver e analisar os dados de registo de atividades através de um dos seguintes métodos:

  • Ferramentas do Azure: recuperar informações de registo de atividades através do Azure PowerShell, a CLI do Azure, a API REST do Azure ou o portal do Azure. As instruções passo-a-passo para cada método estão detalhadas no artigo Operações de atividades com o Resource Manager.
  • Power BI: se ainda não tiver uma conta do Power BI, pode experimentá-lo gratuitamente. Usando os aplicativos de modelo do Power BI, você pode analisar seus dados.

Visualize e analise os logs de acesso, desempenho e firewall

Os logs do Azure Monitor podem coletar os arquivos de log de contador e de eventos de sua conta de armazenamento de Blob. Inclui visualizações e capacidades de pesquisa poderosas para analisar os seus registos.

Também pode ligar à sua conta de armazenamento e obter as entradas de registo JSON para os registos de acesso e desempenho. Depois de transferir os ficheiros JSON, pode convertê-los em CSV e visualizá-los no Excel, Power BI ou qualquer outra ferramenta de visualização de dados.

Gorjeta

Se estiver familiarizado com os conceitos básicos do Visual Studio para alterar os valores de constantes e variáveis em C#, pode utilizar as ferramentas de conversor de registo disponíveis no GitHub.

Analisando logs de acesso através do GoAccess

Publicamos um modelo do Resource Manager que instala e executa o popular analisador de logs GoAccess para logs de acesso do Application Gateway. O GoAccess fornece estatísticas valiosas de tráfego HTTP, como visitantes únicos, 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 Gerenciador de Recursos no GitHub.

Próximos passos