Recolha registos do Azure Application Gateway

Compatível com:

Este documento explica como recolher registos do Azure Application Gateway configurando um feed do Google Security Operations. Este analisador processa estruturas JSON de registo único e múltiplo, extrai campos da matriz "registos", faz conversões de tipos de dados, mapeia campos para o UDM e enriquece os dados com metadados e campos derivados, como o tipo de ligação de rede. Também processa a 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

Certifique-se de que cumpre os seguintes pré-requisitos:

  • Instância do Google SecOps
  • Acesso privilegiado a uma subscrição do Azure
  • Um ambiente (inquilino) de gateway de aplicações do Azure no Azure

Configure a conta de armazenamento do Azure

  1. Na consola do Azure, pesquise Contas de armazenamento.
  2. Clique em Criar.
  3. Especifique valores para os seguintes parâmetros de entrada:
    • Subscrição: selecione a subscrição.
    • Grupo de recursos: selecione o grupo de recursos.
    • Região: selecione a região.
    • Desempenho: selecione o desempenho (padrão recomendado).
    • Redundância: selecione a redundância (GRS ou LRS recomendado).
    • Nome da conta de armazenamento: introduza um nome para a nova conta de armazenamento.
  4. Clique em Rever + criar.
  5. Reveja a vista geral da conta e clique em Criar.
  6. Na página Vista geral da conta de armazenamento, selecione o submenu Chaves de acesso em Segurança + rede.
  7. Clique em Mostrar junto a key1 ou key2
  8. Clique em Copiar para a área de transferência para copiar a chave.
  9. Guarde a chave num local seguro para utilização posterior.
  10. Na página Vista geral da conta de armazenamento, selecione o submenu Pontos finais em Definições.
  11. Clique em Copiar para a área de transferência para copiar o URL do ponto final do serviço Blob. (por exemplo, https://<storageaccountname>.blob.core.windows.net)
  12. Guarde o URL do ponto final numa localização segura para utilização posterior.

Como configurar o Azure Application Gateway

  1. Inicie sessão no portal do Azure.
  2. Aceda ao grupo de recursos pretendido.
  3. Selecione Gateway de aplicações (é apresentada a janela Gateway de aplicações).
  4. Na secção Monitorização, selecione Definições de diagnóstico > Ativar diagnósticos.
  5. Selecione Adicionar definição de diagnósticos (a janela Definições de diagnósticos apresenta as definições dos registos de diagnósticos).
  6. Na secção Registo, faça o seguinte:
    1. Selecione a caixa de verificação ApplicationGatewayAccessLog.
    2. Selecione a caixa de verificação ApplicationGatewayFirewallLog.
  7. Para armazenar registos na conta de armazenamento, faça o seguinte:
    1. Selecione a caixa de verificação Arquivar numa conta de armazenamento.
    2. Na lista Subscrição, selecione uma subscrição existente.
    3. Na lista Conta de armazenamento, selecione uma conta de armazenamento existente.

Configure feeds

Existem dois pontos de entrada diferentes para configurar feeds na plataforma Google SecOps:

  • Definições do SIEM > Feeds > Adicionar novo
  • Content Hub > Pacotes de conteúdo > Começar

Como configurar o feed do gateway de aplicações do Azure

  1. Clique no pacote Plataforma Azure.
  2. Localize o tipo de registo Azure Application Gateway e clique em Adicionar novo feed.
  3. Especifique valores para os seguintes campos:

    • Source Type: Microsoft Azure Blob Storage V2.
    • URI do Azure: o URL do ponto final do blob.
      • ENDPOINT_URL/BLOB_NAME
        • Substitua o seguinte:
          • ENDPOINT_URL: o URL do ponto final do blob. (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: o nome do blob. (como insights-logs-<logname>)
    • Opções de eliminação de origens: selecione a opção de eliminação de acordo com as suas preferências de carregamento.
    • Idade máxima do ficheiro: inclui ficheiros modificados no último número de dias. A predefinição é 180 dias.
    • Chave partilhada: a chave partilhada (uma string aleatória de 512 bits na codificação base-64) usada para aceder aos recursos do Azure.

    Opções avançadas

    • Nome do feed: um valor pré-preenchido que identifica o feed.
    • Espaço de nomes do recurso: espaço de nomes associado ao feed.
    • Etiquetas de carregamento: etiquetas aplicadas a todos os eventos deste feed.
  4. Clique em Criar feed.

Para mais informações sobre a configuração de vários feeds para diferentes tipos de registos nesta família de produtos, consulte o artigo Configure feeds por produto.

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
Category metadata.product_event_type Mapeado diretamente a partir do campo Category.
ClientOperationId additional.fields[].key:"ClientOperationId", value.string_value Mapeado diretamente a partir do campo ClientOperationId.
CorrelationRequestId additional.fields[].key:"CorrelationRequestId", value.string_value Mapeado diretamente a partir do campo CorrelationRequestId.
GatewayManagerVersion additional.fields[].key:"GatewayManagerVersion", value.string_value Mapeado diretamente a partir do campo GatewayManagerVersion.
category metadata.product_event_type Mapeado diretamente a partir do campo category.
level security_result.severity Mapeado diretamente a partir do campo level, convertido em maiúsculas. Se o valor for "WARNING", a gravidade é definida como "HIGH" e security_result.severity_details é definido como o valor original.
properties.clientIP principal.ip, principal.asset.ip Mapeado diretamente a partir do campo properties.clientIP.
properties.clientPort principal.port Mapeado diretamente a partir do campo properties.clientPort, convertido num número inteiro.
properties.clientResponseTime additional.fields[].key:"clientResponseTime", value.string_value Mapeado diretamente a partir do campo properties.clientResponseTime.
properties.configuration.BgpConfiguration.GatewayConfig.Asn security_result.detection_fields[].key:"ASN", value Mapeado diretamente a partir do campo properties.configuration.BgpConfiguration.GatewayConfig.Asn quando operationName é "SetGatewayConfiguration".
properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress target.ip, target.asset.ip Mapeado diretamente a partir do campo properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress quando operationName é "SetGatewayConfiguration".
properties.configuration.BgpConfiguration.GatewayConfig.PeerType security_result.detection_fields[].key:"PeerType", value Mapeado diretamente a partir do campo properties.configuration.BgpConfiguration.GatewayConfig.PeerType quando operationName é "SetGatewayConfiguration".
properties.configuration.IkeVersion principal.resource.attribute.labels[].key:"ike_version", value Mapeado diretamente a partir 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 a partir do campo properties.configuration.LocalTunnelEndpoint quando operationName é "SetConnectionConfiguration".
properties.configuration.Name principal.hostname, principal.asset.hostname Mapeado diretamente a partir do campo properties.configuration.Name. Se estiver vazio, o valor é retirado de properties.instance.
properties.configuration.RemoteSite target.hostname, target.asset.hostname Mapeado diretamente a partir 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 a partir do campo properties.configuration.RemoteTunnelEndpoint quando operationName é "SetConnectionConfiguration".
properties.configuration.VIPAddress principal.ip, principal.asset.ip Mapeado diretamente a partir 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 a partir do campo properties.error_info.
properties.host principal.hostname, principal.asset.hostname Mapeado diretamente a partir do campo properties.host se properties.originalHost estiver vazio.
properties.httpMethod network.http.method Mapeado diretamente a partir do campo properties.httpMethod.
properties.httpStatus network.http.response_code Mapeado diretamente a partir do campo properties.httpStatus, convertido num 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 a partir do campo properties.message.
properties.operationName additional.fields[].key:"operationName", value.string_value Mapeado diretamente a partir do campo properties.operationName.
properties.operationStatus security_result.category_details Mapeado diretamente a partir do campo properties.operationStatus. Se o valor for "Success" ou "InProgress", security_result.action é definido como "ALLOW".
properties.originalHost principal.hostname, principal.asset.hostname Mapeado diretamente a partir do campo properties.originalHost.
properties.originalRequestUriWithArgs additional.fields[].key:"originalRequestUriWithArgs", value.string_value Mapeado diretamente a partir do campo properties.originalRequestUriWithArgs.
properties.receivedBytes network.received_bytes Mapeado diretamente a partir do campo properties.receivedBytes, convertido num número inteiro não assinado.
properties.requestQuery additional.fields[].key:"requestQuery", value.string_value Mapeado diretamente a partir do campo properties.requestQuery.
properties.requestUri target.url Mapeado diretamente a partir do campo properties.requestUri.
properties.sentBytes network.sent_bytes Mapeado diretamente a partir do campo properties.sentBytes, convertido num número inteiro não assinado.
properties.serverResponseLatency additional.fields[].key:"Server Response Latency", value.string_value Mapeado diretamente a partir 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 através de uma expressão regular.
properties.sslCipher network.tls.cipher Mapeado diretamente a partir do campo properties.sslCipher.
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer Mapeado diretamente a partir do campo properties.sslClientCertificateIssuerName.
properties.sslProtocol network.tls.version Mapeado diretamente a partir do campo properties.sslProtocol.
properties.timeTaken additional.fields[].key:"timeTaken", value.string_value Mapeado diretamente a partir do campo properties.timeTaken.
properties.transactionId network.session_id Mapeado diretamente a partir do campo properties.transactionId.
properties.userAgent network.http.user_agent, network.http.parsed_user_agent Mapeado diretamente a partir do campo properties.userAgent. Além disso, o campo é convertido num agente do utilizador analisado e mapeado para network.http.parsed_user_agent.
properties.WAFEvaluationTime additional.fields[].key:"WAFEvaluationTime", value.string_value Mapeado diretamente a partir do campo properties.WAFEvaluationTime.
properties.WAFMode additional.fields[].key:"WAFMode", value.string_value Mapeado diretamente a partir do campo properties.WAFMode.
resourceId target.resource.id Mapeado diretamente a partir do campo resourceId.
resourceid target.resource.product_object_id Mapeado diretamente a partir do campo resourceid.
ruleName security_result.rule_name Mapeado diretamente a partir do campo ruleName.
time/timeStamp metadata.event_timestamp, timestamp Analisado como uma data/hora com o formato RFC 3339 ou ISO8601. O elemento timeStamp é preferível, mas o elemento time é usado se o elemento 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 Definido como "Gateway do Azure".
(Lógica do analisador) metadata.vendor_name Definido como "Microsoft".
(Lógica do analisador) has_principal Uma flag booleana, definida como "true" se forem extraídas informações principais (nome do anfitrião, IP ou porta) e "false" caso contrário.
(Lógica do analisador) has_target Uma flag booleana, definida como "true" se forem extraídas informações de destino (nome do anfitrião, IP, porta, ID do recurso ou URL) e "false" caso contrário.
(Lógica do analisador) disambiguation_key Adicionado quando são extraídos vários eventos de uma única entrada de registo.