Coletar registros do Gateway de Aplicativo do Azure

Compatível com:

Este documento explica como coletar registros do Application Gateway do Azure configurando um feed do Google Security Operations. Esse analisador processa estruturas JSON de registro único e múltiplo, extrai campos da matriz "records", realiza conversões de tipo de dados, mapeia campos para a UDM e enriquece os dados com metadados e campos derivados, como o tipo de conexão de rede. Ele também processa uma lógica específica para diferentes valores de operationName, extraindo endereços IP, sub-redes e outros detalhes de configuração relevantes.

Antes de começar

Verifique se você atende aos seguintes pré-requisitos:

  • Instância do Google SecOps
  • Acesso privilegiado a uma assinatura do Azure
  • Um ambiente (locatário) de gateway de aplicativo do Azure no Azure

Configurar a conta de armazenamento do Azure

  1. No console do Azure, pesquise Contas de armazenamento.
  2. Clique em Criar.
  3. Especifique valores para os seguintes parâmetros de entrada:
    • Assinatura: selecione a assinatura.
    • Grupo de recursos: selecione o grupo de recursos.
    • Região: selecione a região.
    • Performance: selecione a performance (padrão recomendado).
    • Redundância: selecione a redundância (GRS ou LRS recomendado).
    • Nome da conta de armazenamento: insira um nome para a nova conta de armazenamento.
  4. Clique em Revisar + criar.
  5. Revise a visão geral da conta e clique em Criar.
  6. Na página Visão geral da conta de armazenamento, selecione o submenu Chaves de acesso em Segurança + rede.
  7. Clique em Mostrar ao lado de key1 ou key2.
  8. Clique em Copiar para a área de transferência para copiar a chave.
  9. Salve a chave em um local seguro para uso posterior.
  10. Na página Visão geral da conta de armazenamento, selecione o submenu Endpoints em Configurações.
  11. Clique em Copiar para a área de transferência para copiar o URL do endpoint do serviço de blob. Por exemplo, https://<storageaccountname>.blob.core.windows.net.
  12. Salve o URL do endpoint em um local seguro para uso posterior.

Como configurar o Gateway de aplicativo do Azure

  1. Faça login no portal do Azure.
  2. Acesse o grupo de recursos desejado.
  3. Selecione Gateway de aplicativo (a janela Gateway de aplicativo vai aparecer).
  4. Na seção Monitoring, selecione Configurações de diagnóstico > Ativar diagnóstico.
  5. Selecione Adicionar configuração de diagnóstico. A janela Configurações de diagnóstico mostra as configurações dos registros de diagnóstico.
  6. Na seção log, faça o seguinte:
    1. Marque a caixa de seleção ApplicationGatewayAccessLog.
    2. Marque a caixa de seleção ApplicationGatewayFirewallLog.
  7. Para armazenar registros na conta de armazenamento, faça o seguinte:
    1. Marque a caixa de seleção Arquivar em uma conta de armazenamento.
    2. Na lista Assinatura, selecione uma assinatura.
    3. Na lista Conta de armazenamento, selecione uma conta de armazenamento.

Configurar feeds

Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:

  • Configurações do SIEM > Feeds
  • Central de conteúdo > Pacotes de conteúdo

Configure feeds em Configurações do SIEM > Feeds

Para configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.

Para configurar um único feed, siga estas etapas:

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, Registros do Application Gateway do Azure).
  5. Selecione Microsoft Azure Blob Storage como o Tipo de origem.
  6. Selecione "Azure Application Gateway" como o Tipo de registro.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • URI do Azure: o URL do endpoint do blob.
      • ENDPOINT_URL/BLOB_NAME
        • Substitua:
          • ENDPOINT_URL: o URL do endpoint do blob. (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: o nome do blob. (como insights-logs-<logname>)
    • URI é um: selecione o TIPO DE URI de acordo com a configuração do fluxo de registros (Arquivo único | Diretório | Diretório que inclui subdiretórios).
    • Opções de exclusão de origem: selecione a opção de exclusão de acordo com suas preferências de ingestão.
    • Chave compartilhada: a chave de acesso ao Azure Blob Storage.
    • Namespace do recurso: o namespace do recurso.
    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.
  9. Clique em Próxima.

  10. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Configurar feeds na Central de conteúdo

Especifique valores para os seguintes campos:

  • URI do Azure: o URL do endpoint do blob.
    • ENDPOINT_URL/BLOB_NAME
      • Substitua:
        • ENDPOINT_URL: o URL do endpoint do blob (https://<storageaccountname>.blob.core.windows.net)
        • BLOB_NAME: o nome do blob (por exemplo, insights-logs-<logname>)
  • URI é um: selecione o TIPO DE URI de acordo com a configuração do fluxo de registros (Arquivo único | Diretório | Diretório que inclui subdiretórios).
  • Opções de exclusão de origem: selecione a opção de exclusão de acordo com suas preferências de ingestão.
  • Chave compartilhada: a chave de acesso ao Azure Blob Storage.

Opções avançadas

  • Nome do feed: um valor pré-preenchido que identifica o feed.
  • Tipo de origem: método usado para coletar registros no Google SecOps.
  • Namespace do recurso: namespace associado ao feed.
  • Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
Category metadata.product_event_type Mapeado diretamente do campo Category.
ClientOperationId additional.fields[].key:"ClientOperationId", value.string_value Mapeado diretamente do campo ClientOperationId.
CorrelationRequestId additional.fields[].key:"CorrelationRequestId", value.string_value Mapeado diretamente do campo CorrelationRequestId.
GatewayManagerVersion additional.fields[].key:"GatewayManagerVersion", value.string_value Mapeado diretamente do campo GatewayManagerVersion.
category metadata.product_event_type Mapeado diretamente do campo category.
level security_result.severity Mapeado diretamente do campo level e convertido para maiúsculas. Se o valor for "WARNING", a gravidade será definida como "HIGH" e security_result.severity_details será definido como o valor original.
properties.clientIP principal.ip, principal.asset.ip Mapeado diretamente do campo properties.clientIP.
properties.clientPort principal.port Mapeado diretamente do campo properties.clientPort e convertido em um número inteiro.
properties.clientResponseTime additional.fields[].key:"clientResponseTime", value.string_value Mapeado diretamente do campo properties.clientResponseTime.
properties.configuration.BgpConfiguration.GatewayConfig.Asn security_result.detection_fields[].key:"ASN", value Mapeado diretamente do campo properties.configuration.BgpConfiguration.GatewayConfig.Asn quando operationName é "SetGatewayConfiguration".
properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress target.ip, target.asset.ip Mapeado diretamente do campo properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress quando operationName é "SetGatewayConfiguration".
properties.configuration.BgpConfiguration.GatewayConfig.PeerType security_result.detection_fields[].key:"PeerType", value Mapeado diretamente do campo properties.configuration.BgpConfiguration.GatewayConfig.PeerType quando operationName é "SetGatewayConfiguration".
properties.configuration.IkeVersion principal.resource.attribute.labels[].key:"ike_version", value Mapeado diretamente do campo properties.configuration.IkeVersion quando operationName é "SetConnectionConfiguration".
properties.configuration.LocalSubnets principal.resource.attribute.labels[].key:"local subnets", value String concatenada de endereços IP da matriz properties.configuration.LocalSubnets quando operationName é "SetConnectionConfiguration".
properties.configuration.LocalTunnelEndpoint principal.ip, principal.asset.ip Mapeado diretamente do campo properties.configuration.LocalTunnelEndpoint quando operationName é "SetConnectionConfiguration".
properties.configuration.Name principal.hostname, principal.asset.hostname Mapeado diretamente do campo properties.configuration.Name. Se estiver vazio, o valor será extraído de properties.instance.
properties.configuration.RemoteSite target.hostname, target.asset.hostname Mapeado diretamente do campo properties.configuration.RemoteSite.
properties.configuration.RemoteSubnets principal.resource.attribute.labels[].key:"remote subnets", value String concatenada de endereços IP da matriz properties.configuration.RemoteSubnets quando operationName é "SetConnectionConfiguration".
properties.configuration.RemoteTunnelEndpoint target.ip, target.asset.ip Mapeado diretamente do campo properties.configuration.RemoteTunnelEndpoint quando operationName é "SetConnectionConfiguration".
properties.configuration.VIPAddress principal.ip, principal.asset.ip Mapeado diretamente do campo properties.configuration.VIPAddress quando operationName é "SetGatewayConfiguration".
properties.configuration.VirtualNetworkRanges principal.resource.attribute.labels[].key:"virutal network ranges", value String concatenada de endereços IP da matriz properties.configuration.VirtualNetworkRanges quando operationName é "SetGatewayConfiguration".
properties.configuration.VirtualNetworkSubnets principal.resource.attribute.labels[].key:"virtual network subnets", value String concatenada de endereços IP da matriz properties.configuration.VirtualNetworkSubnets quando operationName é "SetGatewayConfiguration".
properties.error_info additional.fields[].key:"error_info", value.string_value Mapeado diretamente do campo properties.error_info.
properties.host principal.hostname, principal.asset.hostname Mapeado diretamente do campo properties.host se properties.originalHost estiver vazio.
properties.httpMethod network.http.method Mapeado diretamente do campo properties.httpMethod.
properties.httpStatus network.http.response_code Mapeado diretamente do campo properties.httpStatus e convertido em um número inteiro.
properties.httpVersion network.application_protocol Definido como "HTTP" se o campo properties.httpVersion contiver "HTTP".
properties.instance principal.hostname, principal.asset.hostname Usado como o valor de principal.hostname se properties.configuration.Name estiver vazio.
properties.message metadata.description Mapeado diretamente do campo properties.message.
properties.operationName additional.fields[].key:"operationName", value.string_value Mapeado diretamente do campo properties.operationName.
properties.operationStatus security_result.category_details Mapeado diretamente do campo properties.operationStatus. Se o valor for "Success" ou "InProgress", security_result.action será definido como "ALLOW".
properties.originalHost principal.hostname, principal.asset.hostname Mapeado diretamente do campo properties.originalHost.
properties.originalRequestUriWithArgs additional.fields[].key:"originalRequestUriWithArgs", value.string_value Mapeado diretamente do campo properties.originalRequestUriWithArgs.
properties.receivedBytes network.received_bytes Mapeado diretamente do campo properties.receivedBytes e convertido em um número inteiro sem sinal.
properties.requestQuery additional.fields[].key:"requestQuery", value.string_value Mapeado diretamente do campo properties.requestQuery.
properties.requestUri target.url Mapeado diretamente do campo properties.requestUri.
properties.sentBytes network.sent_bytes Mapeado diretamente do campo properties.sentBytes e convertido em um número inteiro sem sinal.
properties.serverResponseLatency additional.fields[].key:"Server Response Latency", value.string_value Mapeado diretamente do campo properties.serverResponseLatency.
properties.serverRouted target.ip, target.asset.ip, target.port O IP e a porta são extraídos do campo properties.serverRouted usando uma expressão regular.
properties.sslCipher network.tls.cipher Mapeado diretamente do campo properties.sslCipher.
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer Mapeado diretamente do campo properties.sslClientCertificateIssuerName.
properties.sslProtocol network.tls.version Mapeado diretamente do campo properties.sslProtocol.
properties.timeTaken additional.fields[].key:"timeTaken", value.string_value Mapeado diretamente do campo properties.timeTaken.
properties.transactionId network.session_id Mapeado diretamente do campo properties.transactionId.
properties.userAgent network.http.user_agent, network.http.parsed_user_agent Mapeado diretamente do campo properties.userAgent. Além disso, o campo é convertido em um user agent analisado e mapeado para network.http.parsed_user_agent.
properties.WAFEvaluationTime additional.fields[].key:"WAFEvaluationTime", value.string_value Mapeado diretamente do campo properties.WAFEvaluationTime.
properties.WAFMode additional.fields[].key:"WAFMode", value.string_value Mapeado diretamente do campo properties.WAFMode.
resourceId target.resource.id Mapeado diretamente do campo resourceId.
resourceid target.resource.product_object_id Mapeado diretamente do campo resourceid.
ruleName security_result.rule_name Mapeado diretamente do campo ruleName.
time / timeStamp metadata.event_timestamp, timestamp Analisado como um carimbo de data/hora usando o formato RFC 3339 ou ISO8601. Recomendamos usar timeStamp, mas time será usado se timeStamp não estiver presente.
(Lógica do analisador) metadata.event_type Definido como "NETWORK_CONNECTION" se o principal e o destino estiverem presentes, "STATUS_UPDATE" se apenas o principal estiver presente e "GENERIC_EVENT" caso contrário.
(Lógica do analisador) metadata.product_name Defina como "Gateway do Azure".
(Lógica do analisador) metadata.vendor_name Defina como "Microsoft".
(Lógica do analisador) has_principal Uma flag booleana definida como "true" se alguma informação principal (nome do host, IP ou porta) for extraída e "false" caso contrário.
(Lógica do analisador) has_target Uma flag booleana definida como "true" se alguma informação de destino (nome do host, IP, porta, ID do recurso ou URL) for extraída e "false" caso contrário.
(Lógica do analisador) disambiguation_key Adicionado quando vários eventos são extraídos de uma única entrada de registro.