Recolha registos do Azure Application Gateway
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
- Na consola do Azure, pesquise Contas de armazenamento.
- Clique em Criar.
- 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.
- Clique em Rever + criar.
- Reveja a vista geral da conta e clique em Criar.
- Na página Vista geral da conta de armazenamento, selecione o submenu Chaves de acesso em Segurança + rede.
- Clique em Mostrar junto a key1 ou key2
- Clique em Copiar para a área de transferência para copiar a chave.
- Guarde a chave num local seguro para utilização posterior.
- Na página Vista geral da conta de armazenamento, selecione o submenu Pontos finais em Definições.
- 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
) - Guarde o URL do ponto final numa localização segura para utilização posterior.
Como configurar o Azure Application Gateway
- Inicie sessão no portal do Azure.
- Aceda ao grupo de recursos pretendido.
- Selecione Gateway de aplicações (é apresentada a janela Gateway de aplicações).
- Na secção Monitorização, selecione Definições de diagnóstico > Ativar diagnósticos.
- Selecione Adicionar definição de diagnósticos (a janela Definições de diagnósticos apresenta as definições dos registos de diagnósticos).
- Na secção Registo, faça o seguinte:
- Selecione a caixa de verificação ApplicationGatewayAccessLog.
- Selecione a caixa de verificação ApplicationGatewayFirewallLog.
- Para armazenar registos na conta de armazenamento, faça o seguinte:
- Selecione a caixa de verificação Arquivar numa conta de armazenamento.
- Na lista Subscrição, selecione uma subscrição existente.
- 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
- Clique no pacote Plataforma Azure.
- Localize o tipo de registo Azure Application Gateway e clique em Adicionar novo feed.
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. (comoinsights-logs-<logname>
)
- Substitua o seguinte:
- 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.
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. |