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. Para começar, consulte Instalar o Azure PowerShell. 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:
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.
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.
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
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
Selecione Adicionar configuração de diagnóstico.
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.
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": "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"
}
}
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": "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",
}
}
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. |
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. Modo de Política: desafio JS - JSChallengeIssued: emitido devido a liberação de desafio 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. Esse 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 Azure WAF valida o cookie e processa as regras restantes sem gerar outro desafio JS. - JSChallengeValid: registrado/passagem devido a um desafio válido Esse log é criado quando um cliente já resolveu um desafio. Nesse caso, o Azure WAF regista o solicitação e processa as restantes regras. - JSChallengeBlock: bloqueado Esse log é criado quando um cálculo de desafio JS falha. |
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": "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"
}
}
}
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
- Visualize o contador e os logs de eventos com os logs do Azure Monitor.
- Postagem no blog Visualize your Azure Activity Log with Power BI (Visualizar o log de atividades do Azure com o Power BI).
- Postagem no blog View and analyze Azure Activity Logs in Power BI and more (Exibir e analisar os Logs de Atividades do Azure no Power BI e muito mais).