Coletar registros do Gateway de Aplicativo do Azure
Este documento explica como coletar registros do gateway de aplicativo do Azure configurando um feed de operações de segurança do Google. 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 o UDM e enriquece os dados com metadados e campos derivados, como o tipo de conexão de rede. Ele 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 você:
- Uma instância do Google SecOps.
- Acesso privilegiado a uma assinatura do Azure.
- Um ambiente de gateway de aplicativo do Azure (locatário) no Azure.
Configurar a conta de armazenamento do Azure
- No console do Azure, pesquise Contas de armazenamento.
- Clique em Criar.
- 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.
- Clique em Revisar + criar.
- Leia a visão geral da conta e clique em Criar.
- Na página Visão geral da conta de armazenamento, selecione o submenu Chaves de acesso em Segurança e rede.
- Clique em Mostrar ao lado de chave1 ou chave2.
- Clique em Copiar para a área de transferência para copiar a chave.
- Salve a chave em um local seguro para uso futuro.
- Na página Visão geral da conta de armazenamento, selecione o submenu Endpoints em Configurações.
- Clique em Copiar para a área de transferência para copiar o URL do endpoint do serviço Blob. Por exemplo,
https://<storageaccountname>.blob.core.windows.net
. - Salve o URL do endpoint em um local seguro para uso futuro.
Configurar o Application Gateway do Azure
- Faça login no portal do Azure.
- Acesse o grupo de recursos que você quer.
- Selecione Gateway do aplicativo. A janela Gateway do aplicativo vai aparecer.
- Na seção Monitoramento, selecione Configurações de diagnóstico > Ativar diagnóstico.
- Selecione Adicionar configuração de diagnóstico. A janela Configurações de diagnóstico mostra as configurações dos registros de diagnóstico.
- Na seção registro, faça o seguinte:
- Marque a caixa de seleção ApplicationGatewayAccessLog.
- Marque a caixa de seleção ApplicationGatewayFirewallLog.
- Para armazenar registros na conta de armazenamento, faça o seguinte:
- Marque a caixa de seleção Arquivar em uma conta de armazenamento.
- Na lista Assinatura, selecione uma assinatura.
- Na lista Conta de armazenamento, selecione uma conta de armazenamento existente.
Configurar um feed no Google SecOps para processar os registros do gateway de aplicativos do Azure
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, Logs do gateway de aplicativo do Azure).
- Selecione Armazenamento de Blobs do Microsoft Azure como o Tipo de origem.
- Selecione "Azure Application Gateway" como o tipo de registro.
- Clique em Próxima.
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. (por exemplo,insights-logs-<logname>
)
- Substitua:
- 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 da origem: selecione a opção de exclusão de acordo com sua preferência.
- Chave compartilhada: a chave de acesso ao Armazenamento de blobs do Azure.
- Namespace de recursos: o namespace de recursos.
- Rótulos de ingestão: o rótulo a ser aplicado aos eventos desse feed.
- URI do Azure: o URL do endpoint do blob.
Clique em Próxima.
Revise a configuração do novo feed na tela Finalizar e clique em Enviar.
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 , convertido em letras 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 , 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á retirado 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 , convertido em um número inteiro. |
properties.httpVersion |
network.application_protocol |
Defina 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 , convertido em um número inteiro não assinado. |
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 , convertido em um número inteiro não assinado. |
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. timeStamp é a preferência, mas time é usado se timeStamp não estiver presente. |
(Parser Logic) | metadata.event_type |
Defina 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. |
(Parser Logic) | metadata.product_name |
Defina como "Gateway do Azure". |
(Parser Logic) | metadata.vendor_name |
Defina como "Microsoft". |
(Parser Logic) | has_principal |
Uma flag booleana, definida como "true" se qualquer informação principal (nome do host, IP ou porta) for extraída e "false", caso contrário. |
(Parser Logic) | has_target |
Uma flag booleana definida como "true" se qualquer informação de destino (nome do host, IP, porta, ID de recurso ou URL) for extraída e como "false" caso contrário. |
(Parser Logic) | disambiguation_key |
Adicionado quando vários eventos são extraídos de uma única entrada de registro. |
Alterações
2024-04-19
- Foi adicionado suporte a vários registros JSON de eventos.
2023-12-22
- Mapeamos "resourceid" para "target.resource.id".
- "properties.operationStatus" foi mapeado para "security_result.category_details".
- O mapeamento "properties.configuration.Name" foi alterado para "principal.hostname".
- "properties.message" foi mapeado para "metadata.description".
- "properties.configuration.RemoteStie" foi mapeado para "target.hostname".
- "level" foi mapeado para "security_result.severity_details".
- "properties.configuration.Ikeversion" foi mapeado para "principal.resource.attribute.labels".
- "properties.configuration.LocalTunnelEndpoint" foi mapeado para "principal.ip".
- "properties.configuration.RemoteTunnelEndpoint" foi mapeado para "target.ip".
- Mapeou "properties.configuration.LocalSubnets", "properties.configuration.RemoteSubnets", "properties.configuration.VirtualNetworkRanges" e "properties.configuration.VirtualNetworkSubnets" para "principal.resource.attribute.labels".
- "properties.configuration.VIPAddress" foi mapeado para "principal.ip".
- "properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress" foi mapeado para "targrt.ip".
- Mapeou "properties.configuration.BgpConfiguration.GatewayConfig.PeerType" e "properties.configuration.BgpConfiguration.GatewayConfig.Asn" para "security_result.detection_fields".
2023-11-16
- Parser recém-criado.