Coletar registros de proxy da Web do Netskope
Este documento explica como ingerir registros de proxy da Web do Netskope no Google Security Operations usando o Cloud Storage V2.
A Netskope oferece um gateway seguro da Web nativo da nuvem que inspeciona e controla o tráfego da Web em tempo real. Os registros de transações da Web (WebTx) capturam registros detalhados de cada sessão HTTP e HTTPS processada pelo proxy da Netskope, incluindo identidade do usuário, aplicativo, categoria de URL, vereditos de ameaças e DLP e metadados de rede.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Um projeto do Google Cloud com a API Storage do Cloud Storage ativada.
- Permissões para criar e gerenciar buckets do Cloud Storage
- Permissões para gerenciar políticas do Identity and Access Management (IAM) em buckets do Cloud Storage
- Acesso privilegiado ao locatário do Netskope com credenciais de administrador
Opção 1: streaming de registros do Netskope para o Cloud Storage
Use essa opção se você tiver uma assinatura do Netskope Log Streaming ativada no seu locatário. O Netskope Log Streaming envia arquivos de registro do WebTx diretamente para o bucket do Cloud Storage como arquivos .gzip compactados em um intervalo fixo de 240 segundos.
Criar um bucket do Cloud Storage
- Acesse o console doGoogle Cloud .
- Selecione seu projeto ou crie um novo.
- No menu de navegação, acesse Cloud Storage > Buckets.
- Clique em Criar bucket.
Informe os seguintes detalhes de configuração:
Configuração Valor Nomeie seu bucket Insira um nome globalmente exclusivo (por exemplo, netskope-webtx-logs)Tipo de local Escolha de acordo com suas necessidades (região, birregional, multirregional) Local Selecione o local mais próximo da sua organização (por exemplo, us-central1)Classe de armazenamento Padrão (recomendado para registros acessados com frequência) Controle de acesso Uniforme (recomendado) Ferramentas de proteção Opcional: ativar o controle de versões de objetos ou a política de retenção Clique em Criar.
Criar uma conta de serviço do Google Cloud
O Netskope Log Streaming requer uma conta de serviço do Google Cloud com permissões de gravação no bucket do Cloud Storage. O arquivo de chave JSON dessa conta de serviço é usado pelo Netskope para autenticação ao enviar arquivos de registro.
- No console do Google Cloud , acesse IAM e administrador > Contas de serviço.
- Clique em Criar conta de serviço.
- Informe os seguintes detalhes de configuração:
- Nome da conta de serviço: insira
netskope-log-streaming. - Descrição da conta de serviço: insira
Service account for Netskope Log Streaming to push WebTx logs to GCS.
- Nome da conta de serviço: insira
- Clique em Criar e continuar.
- Na seção Conceda a essa conta de serviço acesso ao projeto:
- Clique em Selecionar papel.
- Pesquise e selecione Criador de objetos do Storage.
- Clique em Continuar.
- Clique em Concluído.
Gerar a chave JSON
- No console do Google Cloud , acesse IAM e administrador > Contas de serviço e clique na conta de serviço
netskope-log-streaming. - Selecione a guia Chaves.
- Clique em Adicionar chave > Criar nova chave.
- Selecione JSON como o tipo de chave.
- Clique em Criar.
O download de um arquivo de chave JSON é feito automaticamente. Salve esse arquivo com segurança. Você vai colar todo o conteúdo desse arquivo no Netskope na próxima seção.
Conceder permissões de gravação em um bucket do Cloud Storage
- No console do Google Cloud , acesse Cloud Storage > Buckets.
- Clique no nome do bucket (por exemplo,
netskope-webtx-logs). - Acesse a guia Permissões.
- Clique em Conceder acesso.
- Informe os seguintes detalhes de configuração:
- Adicionar principais: insira o e-mail da conta de serviço (por exemplo,
netskope-log-streaming@YOUR_PROJECT_ID.iam.gserviceaccount.com) - Atribuir papéis: selecione Criador de objetos do Storage.
- Adicionar principais: insira o e-mail da conta de serviço (por exemplo,
Clique em Salvar.
Criar o fluxo de registros
- Faça login no locatário do Netskope com as credenciais de administrador.
- Acesse Configurações > Ferramentas > Streaming de registros.
- Clique em Criar stream.
- No campo Nome, insira um nome legível por humanos para o stream. Por exemplo,
Google SecOps WebTx GCS. - Selecione Cloud Storage do GCP como o tipo de destino.
Informe os seguintes detalhes de configuração:
Bucket: insira o nome do bucket do Cloud Storage (por exemplo,
netskope-webtx-logs).- Caminho (opcional): insira um caminho de pasta no bucket em que os registros serão armazenados (por exemplo, `netskope/webtx/{%Y}`).
Chave privada: cole todo o conteúdo do arquivo de chave JSON gerado na seção anterior como um único objeto JSON que começa com
{e termina com}. Isso inclui os campostype,project_id,private_key_id,private_key,client_emaileclient_id.
Revise as Opções de entrega: a frequência de push é de 240 segundos.
Clique em Salvar (ou Criar) para ativar o stream. O Netskope valida as credenciais gravando um objeto de teste chamado
netskope-test-file.txtno bucket.
Configurar um feed no Google SecOps para ingerir registros do Netskope WebTx do Cloud Storage
Siga as etapas abaixo para criar o feed do Google SecOps e conceder permissões do IAM:
Recuperar a conta de serviço do Google SecOps
O Google SecOps usa uma conta de serviço exclusiva para ler dados do seu bucket do Cloud Storage. É necessário conceder a essa conta de serviço acesso ao bucket.
- Acesse Configurações > Gerenciamento de dados > Feeds. Se você estiver em uma plataforma somente SIEM, acesse Configurações > Feeds.
- Clique em Adicionar novo feed.
- Clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Netskope WebTx Logs). - Selecione Google Cloud Storage V2 como o Tipo de origem.
- Selecione Proxy da Web do Netskope como o Tipo de registro.
- Clique em Get Service Account.
Um e-mail exclusivo da conta de serviço será exibido, por exemplo:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopie esse endereço de e-mail para usar na próxima etapa.
Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
URL do bucket de armazenamento: insira o URI do bucket do Cloud Storage com o caminho do prefixo:
gs://netskope-webtx-logs/netskope/webtx/- Substitua:
netskope-webtx-logs: o nome do bucket do Cloud Storage.netskope/webtx/: o prefixo de caminho configurado no Netskope Log Streaming (deixe em branco para a raiz).
- Substitua:
Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência:
- Nunca excluir arquivos: nunca exclua arquivos da origem (recomendado para testes).
- Excluir arquivos transferidos e diretórios vazios: exclua arquivos e diretórios vazios da origem após a conclusão de uma busca.
Idade máxima do arquivo: inclua arquivos modificados nos últimos dias (o padrão é 180 dias).
Namespace do recurso: o namespace do recurso
Rótulos de ingestão: o rótulo que será aplicado aos eventos desse feed.
Clique em Próxima.
Revise a configuração do novo feed na tela Finalizar e clique em Enviar.
Conceder permissões do IAM à conta de serviço do Google SecOps
A conta de serviço do Google SecOps precisa de dois papéis no bucket do Cloud Storage: Leitor de objetos do Storage para ler os objetos de registro e um papel no nível do bucket para ler os metadados do bucket.
- Acesse Cloud Storage > Buckets.
- clique no nome do bucket (por exemplo,
netskope-webtx-logs). - Acesse a guia Permissões.
- Clique em Conceder acesso.
- Informe os seguintes detalhes de configuração:
- Adicionar participantes: cole o e-mail da conta de serviço do Google SecOps (por exemplo,
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com) - Atribuir papéis: selecione as duas opções a seguir:
- Leitor de objetos do Storage: lê os objetos de registro.
- Leitor de bucket legado do Storage: lê os metadados do bucket. Se você selecionou a opção de exclusão Excluir arquivos transferidos e diretórios vazios, selecione Gravador de bucket legado do Storage, que também concede a permissão de exclusão.
- Adicionar participantes: cole o e-mail da conta de serviço do Google SecOps (por exemplo,
- Clique em Salvar.
Opção 2: usar o Netskope Cloud Exchange Log Shipper para o Cloud Storage
Use essa opção se você tiver a plataforma Netskope Cloud Exchange implantada com o módulo Log Shipper configurado. O Log Shipper extrai os registros do WebTx do seu locatário do Netskope e os envia como arquivos .gzip compactados para um bucket do Cloud Storage, que o Google SecOps lê por um feed do Cloud Storage V2.
Antes de começar (Cloud Exchange)
Verifique se você atende aos seguintes pré-requisitos adicionais para essa opção:
- Um locatário do Netskope Cloud Exchange com o plug-in de locatário e o módulo Log Shipper já configurados.
- O plug-in de origem do Netskope CLS configurado no Log Shipper (que extrai dados do locatário do Netskope).
- Um bucket do Cloud Storage criado para armazenar registros do WebTx. Se você não tiver criado um, siga as etapas em Criar bucket do Cloud Storage.
- Uma conta de serviço do Google Cloud com acesso de gravação ao bucket do Cloud Storage. Se você ainda não criou uma, siga as etapas em Criar uma conta de serviço do Google Cloud , Gerar a chave JSON e Conceder permissões de gravação em um bucket do Cloud Storage.
Configurar o plug-in de destino do Cloud Storage
- No Cloud Exchange, acesse Configurações > Loja de plug-ins.
- Pesquise e selecione o plug-in Google Cloud SCC (Google GCS).
- Clique em Configurar novo plug-in (ou adicione uma nova configuração de plug-in).
- Informe os seguintes detalhes de configuração:
- Nome da configuração: insira um nome descritivo (por exemplo,
GCS WebTx Destination). - Mapeamento: selecione um arquivo de mapeamento. Para registros WebTx enviados como arquivos
.gziporiginais, nenhuma transformação de mapeamento é aplicada. - Bucket: insira o nome do bucket do Cloud Storage (por exemplo,
netskope-webtx-logs). - Caminho (opcional): digite o caminho de uma pasta (por exemplo,
netskope/webtx/). - Arquivo de chave: cole todo o conteúdo do arquivo de chave JSON da conta de serviço, não apenas o valor
private_key.
- Nome da configuração: insira um nome descritivo (por exemplo,
- Clique em Salvar.
- A nova configuração do plug-in vai aparecer na página Log Shipper > Plug-ins.
Configurar uma regra de negócios (opcional)
Por padrão, a regra de negócios Todos filtra todos os alertas e eventos. Se você quiser filtrar especificamente os registros do WebTx, crie uma nova regra de negócios:
- No Log Shipper, acesse Regras de negócios.
- Clique em Criar nova regra.
- Insira um Nome da regra (por exemplo,
WebTx Only). - Configure os filtros para incluir apenas dados do WebTx.
- Clique em Salvar.
Configurar a entrega de registros
- No Log Shipper, acesse Log Delivery.
- Clique em Adicionar configuração de entrega de registros.
- Informe os seguintes detalhes de configuração:
- Configuração de origem: selecione o plug-in de origem do Netskope CLS (por exemplo,
WebTxCLSouNetskope CLS). - Configuração de destino: selecione o plug-in de destino do Cloud Storage que você configurou (por exemplo,
GCS WebTx Destination). - Regra de negócios: selecione uma regra de negócios (por exemplo,
AllouWebTx Only).
- Configuração de origem: selecione o plug-in de origem do Netskope CLS (por exemplo,
Clique em Salvar.
Para receber mais dados históricos, clique no ícone Extrair dados históricos nas ações de Entrega de registros.
Selecione um período Histórico de e Até e clique em Extrair.
Configurar um feed no Google SecOps para ingerir registros do Netskope WebTx do Cloud Storage
Siga as mesmas etapas da opção de streaming de registros do Netskope para criar um feed do Google SecOps e conceder permissões do IAM:
- Recupere a conta de serviço do Google SecOps: crie um feed com o Google Cloud Storage V2 como o tipo de origem e o proxy da Web do Netskope como o tipo de registro.
- Conceder permissões do IAM à conta de serviço do Google SecOps: conceda os papéis de Leitor de objetos do Storage e Leitor de bucket legado do Storage (use Gravador de bucket legado do Storage se estiver usando a opção de exclusão) no bucket do Cloud Storage para a conta de serviço do Google SecOps.
Verificar a entrega de registro
Para verificar se os registros do WebTx estão sendo enviados para o bucket do Cloud Storage:
- No Cloud Exchange, acesse Log Shipper > Log Delivery.
- Verifique as colunas Total de registros/WebTx enviados ao receptor externo e Total de WebTx enviados ao bucket de armazenamento para confirmar se os dados estão sendo enviados ao destino.
- No bucket do GCS, confirme se os arquivos
.gzipestão sendo gravados pelo Log Shipper.
Definir as configurações globais do Log Shipper (opcional)
Somente administradores podem mudar as configurações globais do Log Shipper. Acesse Configurações > Log Shipper. Há duas guias: "Geral" e "Mapeamentos".
Na guia Geral, é possível configurar a estratégia de nova tentativa para a entrega de registros:
- Padrão (3 tentativas): em caso de falha na entrega de registros, o Log Shipper vai iniciar 3 tentativas de enviar os registros para o destino. Se todas as três tentativas falharem, o lote de registros correspondente será descartado.
Tentar novamente até a entrega ser concluída: tentativas ilimitadas até que os registros sejam entregues.
Também é possível ativar a codificação UTF-8 para alertas, eventos e WebTx para garantir o processamento de dados codificados em UTF-8. Por padrão, esse recurso fica desativado.
Tabela de mapeamento de UDM
| Campo de registro | Mapeamento de UDM | Lógica |
|---|---|---|
| applicationType | security_result.detection_fields[].key: "applicationType", security_result.detection_fields[].value: applicationType | Mapeado diretamente do campo CEF correspondente |
| appcategory | security_result.category_details[]: appcategory | Mapeado diretamente do campo CEF correspondente |
| browser | security_result.detection_fields[].key: "browser", security_result.detection_fields[].value: browser | Mapeado diretamente do campo CEF correspondente |
| c-ip | principal.asset.ip[]: c-ip, principal.ip[]: c-ip | Mapeado diretamente do campo JSON correspondente |
| cci | security_result.detection_fields[].key: "cci", security_result.detection_fields[].value: cci | Mapeado diretamente do campo CEF correspondente |
| ccl | security_result.confidence: valor derivado, security_result.confidence_details: ccl | security_result.confidence é derivado com base no valor de ccl: "excellent" ou "high" é mapeado para HIGH_CONFIDENCE, "medium" é mapeado para MEDIUM_CONFIDENCE, "low" ou "poor" é mapeado para LOW_CONFIDENCE, e "unknown" ou "not_defined" é mapeado para UNKNOWN_CONFIDENCE. security_result.confidence_details é mapeado diretamente de ccl. |
| clientBytes | network.sent_bytes: clientBytes | Mapeado diretamente do campo CEF correspondente |
| cs-access-method | additional.fields[].key: "accessMethod", additional.fields[].value.string_value: cs-access-method | Mapeado diretamente do campo JSON correspondente |
| cs-app | additional.fields[].key: "x-cs-app", additional.fields[].value.string_value: cs-app, principal.application: cs-app | Mapeado diretamente do campo JSON correspondente |
| cs-app-activity | additional.fields[].key: "x-cs-app-activity", additional.fields[].value.string_value: cs-app-activity | Mapeado diretamente do campo JSON correspondente |
| cs-app-category | additional.fields[].key: "x-cs-app-category", additional.fields[].value.string_value: cs-app-category | Mapeado diretamente do campo JSON correspondente |
| cs-app-cci | additional.fields[].key: "x-cs-app-cci", additional.fields[].value.string_value: cs-app-cci | Mapeado diretamente do campo JSON correspondente |
| cs-app-ccl | additional.fields[].key: "x-cs-app-ccl", additional.fields[].value.string_value: cs-app-ccl | Mapeado diretamente do campo JSON correspondente |
| cs-app-from-user | additional.fields[].key: "x-cs-app-from-user", additional.fields[].value.string_value: cs-app-from-user, principal.user.email_addresses[]: cs-app-from-user | Mapeado diretamente do campo JSON correspondente |
| cs-app-instance-id | additional.fields[].key: "x-cs-app-instance-id", additional.fields[].value.string_value: cs-app-instance-id | Mapeado diretamente do campo JSON correspondente |
| cs-app-object-name | additional.fields[].key: "x-cs-app-object-name", additional.fields[].value.string_value: cs-app-object-name | Mapeado diretamente do campo JSON correspondente |
| cs-app-object-type | additional.fields[].key: "x-cs-app-object-type", additional.fields[].value.string_value: cs-app-object-type | Mapeado diretamente do campo JSON correspondente |
| cs-app-suite | additional.fields[].key: "x-cs-app-suite", additional.fields[].value.string_value: cs-app-suite | Mapeado diretamente do campo JSON correspondente |
| cs-app-tags | additional.fields[].key: "x-cs-app-tags", additional.fields[].value.string_value: cs-app-tags | Mapeado diretamente do campo JSON correspondente |
| cs-bytes | network.sent_bytes: cs-bytes | Mapeado diretamente do campo JSON correspondente |
| cs-content-type | additional.fields[].key: "sc-content-type", additional.fields[].value.string_value: cs-content-type | Mapeado diretamente do campo JSON correspondente |
| cs-dns | target.asset.hostname[]: cs-dns, target.hostname: cs-dns | Mapeado diretamente do campo JSON correspondente |
| cs-host | target.asset.hostname[]: cs-host, target.hostname: cs-host | Mapeado diretamente do campo JSON correspondente |
| cs-method | network.http.method: cs-method | Mapeado diretamente do campo JSON correspondente |
| cs-referer | network.http.referral_url: cs-referer | Mapeado diretamente do campo JSON correspondente |
| cs-uri | additional.fields[].key: "cs-uri", additional.fields[].value.string_value: cs-uri | Mapeado diretamente do campo JSON correspondente |
| cs-uri-path | additional.fields[].key: "x-cs-uri-path", additional.fields[].value.string_value: cs-uri-path | Mapeado diretamente do campo JSON correspondente |
| cs-uri-port | additional.fields[].key: "cs-uri-port", additional.fields[].value.string_value: cs-uri-port | Mapeado diretamente do campo JSON correspondente |
| cs-uri-scheme | network.application_protocol: cs-uri-scheme | Mapeado diretamente do campo JSON correspondente após a conversão para letras maiúsculas |
| cs-user-agent | network.http.parsed_user_agent: user agent analisado, network.http.user_agent: cs-user-agent | network.http.parsed_user_agent é derivado da análise do campo cs-user-agent usando o filtro "parseduseragent" |
| cs-username | principal.user.userid: cs-username | Mapeado diretamente do campo JSON correspondente |
| data | metadata.event_timestamp.seconds: segundos da Era Unix dos campos de data e hora, metadata.event_timestamp.nanos: 0 | A data e a hora são combinadas e convertidas em segundos e nanossegundos de época. Os nanossegundos são definidos como 0. |
| device | intermediary.hostname: device | Mapeado diretamente do campo CEF correspondente |
| dst | target.ip[]: dst | Mapeado diretamente do campo CEF correspondente |
| dst_country | target.location.country_or_region: dst_country | Mapeado diretamente do campo grokked correspondente |
| dst_ip | target.asset.ip[]: dst_ip, target.ip[]: dst_ip | Mapeado diretamente do campo grokked correspondente |
| dst_location | target.location.city: dst_location | Mapeado diretamente do campo grokked correspondente |
| dst_region | target.location.state: dst_region | Mapeado diretamente do campo grokked correspondente |
| dst_zip | Não mapeados | Este campo não está mapeado para o UDM |
| duser | target.user.email_addresses[]: duser, target.user.user_display_name: duser | Mapeado diretamente do campo CEF correspondente |
| dvchost | about.hostname: dvchost, target.asset.hostname[]: dvchost, target.hostname: dvchost | Mapeado diretamente do campo CEF correspondente |
| event_timestamp | metadata.event_timestamp.seconds: event_timestamp | Mapeado diretamente do campo grokked correspondente |
| nome do host | target.asset.hostname[]: hostname, target.hostname: hostname | Mapeado diretamente do campo CEF correspondente |
| Código do incidente | security_result.detection_fields[].key: "IncidentID", security_result.detection_fields[].value: IncidentID | Mapeado diretamente do campo CEF correspondente |
| intermediário | intermediário: intermediário | Mapeado diretamente do campo CEF correspondente |
| md5 | target.file.md5: md5 | Mapeado diretamente do campo CEF correspondente |
| mensagem | Vários campos de UDM | O campo de mensagem é analisado com base na presença de "CEF". Se isso acontecer, ele será tratado como um registro CEF. Caso contrário, ele será analisado como uma string delimitada por espaços ou JSON. |
| mwDetectionEngine | additional.fields[].key: "mwDetectionEngine", additional.fields[].value.string_value: mwDetectionEngine | Mapeado diretamente do campo CEF correspondente |
| mwType | metadata.description: mwType | Mapeado diretamente do campo CEF correspondente |
| os | principal.platform: valor derivado | A plataforma é derivada do campo os: "Windows" é mapeado para WINDOWS, "MAC" é mapeado para MAC e "LINUX" é mapeado para LINUX. |
| página | network.http.referral_url: page | Mapeado diretamente do campo CEF correspondente |
| referenciador | network.http.referral_url: referer | Mapeado diretamente do campo CEF correspondente |
| requestClientApplication | network.http.parsed_user_agent: user agent analisado, network.http.user_agent: requestClientApplication | network.http.parsed_user_agent é derivado da análise do campo requestClientApplication usando o filtro "parseduseragent" |
| request_method | network.http.method: request_method | Mapeado diretamente do campo grokked correspondente |
| rs-status | additional.fields[].key: "rs-status", additional.fields[].value.string_value: rs-status, network.http.response_code: rs-status | Mapeado diretamente do campo JSON correspondente |
| s-ip | target.asset.ip[]: s-ip, target.ip[]: s-ip | Mapeado diretamente do campo JSON correspondente |
| sc-bytes | network.received_bytes: sc-bytes | Mapeado diretamente do campo JSON correspondente |
| sc-content-type | additional.fields[].key: "sc-content-type", additional.fields[].value.string_value: sc-content-type | Mapeado diretamente do campo JSON correspondente |
| sc-status | network.http.response_code: sc-status | Mapeado diretamente do campo JSON correspondente |
| serverBytes | network.received_bytes: serverBytes | Mapeado diretamente do campo CEF correspondente |
| sha256 | target.file.sha256: sha256 | Mapeado diretamente do campo CEF correspondente |
| src | principal.ip[]: src | Mapeado diretamente do campo CEF correspondente |
| src_country | principal.location.country_or_region: src_country | Mapeado diretamente do campo grokked correspondente |
| src_ip | principal.asset.ip[]: src_ip, principal.ip[]: src_ip | Mapeado diretamente do campo grokked correspondente |
| src_location | principal.location.city: src_location | Mapeado diretamente do campo grokked correspondente |
| src_region | principal.location.state: src_region | Mapeado diretamente do campo grokked correspondente |
| src_latitude | Não mapeados | Este campo não está mapeado para o UDM |
| src_longitude | Não mapeados | Este campo não está mapeado para o UDM |
| src_zip | Não mapeados | Este campo não está mapeado para o UDM |
| suser | principal.user.user_display_name: suser | Mapeado diretamente do campo CEF correspondente |
| target_host | target.asset.hostname[]: target_host, target.hostname: target_host | Mapeado diretamente do campo grokked correspondente |
| tempo | metadata.event_timestamp.seconds: segundos da Era Unix dos campos de data e hora, metadata.event_timestamp.nanos: 0 | A data e a hora são combinadas e convertidas em segundos e nanossegundos de época. Os nanossegundos são definidos como 0. |
| timestamp | metadata.event_timestamp.seconds: carimbo de data/hora | Mapeado diretamente do campo CEF correspondente |
| ts | metadata.event_timestamp.seconds: segundos da Era Unix de ts, metadata.event_timestamp.nanos: 0 | O carimbo de data/hora é convertido em segundos e nanossegundos de época. Os nanossegundos são definidos como 0. |
| url | target.url: url | Mapeado diretamente do campo CEF correspondente |
| user_agent | network.http.parsed_user_agent: user agent analisado, network.http.user_agent: user_agent | network.http.parsed_user_agent é derivado da análise do campo user_agent usando o filtro "parseduseragent" |
| user_key | principal.user.email_addresses[]: user_key | Mapeado diretamente do campo grokked correspondente |
| versão | Não mapeados | Este campo não está mapeado para o UDM |
| x-c-browser | additional.fields[].key: "x-c-browser", additional.fields[].value.string_value: x-c-browser | Mapeado diretamente do campo JSON correspondente |
| x-c-browser-version | additional.fields[].key: "x-c-browser-version", additional.fields[].value.string_value: x-c-browser-version | Mapeado diretamente do campo JSON correspondente |
| x-c-country | principal.location.country_or_region: x-c-country | Mapeado diretamente do campo JSON correspondente |
| x-c-device | additional.fields[].key: "x-c-device", additional.fields[].value.string_value: x-c-device | Mapeado diretamente do campo JSON correspondente |
| x-c-latitude | principal.location.region_coordinates.latitude: x-c-latitude | Mapeado diretamente do campo JSON correspondente |
| x-c-local-time | security_result.detection_fields[].key: "x-c-local-time", security_result.detection_fields[].value: x-c-local-time | Mapeado diretamente do campo JSON correspondente |
| x-c-location | principal.location.name: x-c-location | Mapeado diretamente do campo JSON correspondente |
| x-c-longitude | principal.location.region_coordinates.longitude: x-c-longitude | Mapeado diretamente do campo JSON correspondente |
| x-c-os | principal.platform: valor derivado | A plataforma é derivada do campo x-c-os: "Windows" é mapeado para WINDOWS, "MAC" para MAC e "LINUX" para LINUX. |
| x-c-region | principal.location.state: x-c-region | Mapeado diretamente do campo JSON correspondente |
| x-c-zipcode | additional.fields[].key: "x-c-zipcode", additional.fields[].value.string_value: x-c-zipcode | Mapeado diretamente do campo JSON correspondente |
| x-category | additional.fields[].key: "x-category", additional.fields[].value.string_value: x-category | Mapeado diretamente do campo JSON correspondente |
| x-category-id | additional.fields[].key: "x-category-id", additional.fields[].value.string_value: x-category-id | Mapeado diretamente do campo JSON correspondente |
| x-cs-access-method | additional.fields[].key: "accessMethod", additional.fields[].value.string_value: x-cs-access-method | Mapeado diretamente do campo JSON correspondente |
| x-cs-app | principal.application: x-cs-app, additional.fields[].key: "x-cs-app", additional.fields[].value.string_value: x-cs-app | Mapeado diretamente do campo JSON correspondente |
| x-cs-app-activity | additional.fields[].key: "x-cs-app-activity", additional.fields[].value.string_value: x-cs-app-activity | Mapeado diretamente do campo JSON correspondente |
| x-cs-app-category | additional.fields[].key: "x-cs-app-category", additional.fields[].value.string_value: x-cs-app-category | Mapeado diretamente do campo JSON correspondente |
| x-cs-app-cci | additional.fields[].key: "x-cs-app-cci", additional.fields[].value.string_value: x-cs-app-cci | Mapeado diretamente do campo JSON correspondente |
| x-cs-app-from-user | additional.fields[].key: "x-cs-app-from-user", additional.fields[].value.string_value: x-cs-app-from-user | Mapeado diretamente do campo JSON correspondente |
| x-cs-app-object-id | additional.fields[].key: "x-cs-app-object-id", additional.fields[].value.string_value: x-cs-app-object-id | Mapeado diretamente do campo JSON correspondente |
| x-cs-app-object-name | additional.fields[].key: "x-cs-app-object-name", additional.fields[].value.string_value: x-cs-app-object-name | Mapeado diretamente do campo JSON correspondente |
| x-cs-app-object-type | additional.fields[].key: "x-cs-app-object-type", additional.fields[].value.string_value: x-cs-app-object-type | Mapeado diretamente do campo JSON correspondente |
| x-cs-app-suite | additional.fields[].key: "x-cs-app-suite", additional.fields[].value.string_value: x-cs-app-suite | Mapeado diretamente do campo JSON correspondente |
| x-cs-app-tags | additional.fields[].key: "x-cs-app-tags", additional.fields[].value.string_value: x-cs-app-tags | Mapeado diretamente do campo JSON correspondente |
| x-cs-app-to-user | additional.fields[].key: "x-cs-app-to-user", additional.fields[].value.string_value: x-cs-app-to-user | Mapeado diretamente do campo JSON correspondente |
| x-cs-dst-ip | security_result.detection_fields[].key: "x-cs-dst-ip", security_result.detection_fields[].value: x-cs-dst-ip, target.asset.ip[]: x-cs-dst-ip, target.ip[]: x-cs-dst-ip | Mapeado diretamente do campo JSON correspondente |
| x-cs-dst-port | security_result.detection_fields[].key: "x-cs-dst-port", security_result.detection_fields[].value: x-cs-dst-port, target.port: x-cs-dst-port | Mapeado diretamente do campo JSON correspondente |
| x-cs-http-version | security_result.detection_fields[].key: "x-cs-http-version", security_result.detection_fields[].value: x-cs-http-version | Mapeado diretamente do campo JSON correspondente |
| x-cs-page-id | additional.fields[].key: "x-cs-page-id", additional.fields[].value.string_value: x-cs-page-id | Mapeado diretamente do campo JSON correspondente |
| x-cs-session-id | network.session_id: x-cs-session-id | Mapeado diretamente do campo JSON correspondente |
| x-cs-site | additional.fields[].key: "x-cs-site", additional.fields[].value.string_value: x-cs-site | Mapeado diretamente do campo JSON correspondente |
| x-cs-sni | network.tls.client.server_name: x-cs-sni | Mapeado diretamente do campo JSON correspondente |
| x-cs-src-ip | principal.asset.ip[]: x-cs-src-ip, principal.ip[]: x-cs-src-ip, security_result.detection_fields[].key: "x-cs-src-ip", security_result.detection_fields[].value: x-cs-src-ip | Mapeado diretamente do campo JSON correspondente |
| x-cs-src-ip-egress | principal.asset.ip[]: x-cs-src-ip-egress, principal.ip[]: x-cs-src-ip-egress, security_result.detection_fields[].key: "x-cs-src-ip-egress", security_result.detection_fields[].value: x-cs-src-ip-egress | Mapeado diretamente do campo JSON correspondente |
| x-cs-src-port | principal.port: x-cs-src-port, security_result.detection_fields[].key: "x-cs-src-port", security_result.detection_fields[].value: x-cs-src-port | Mapeado diretamente do campo JSON correspondente |
| x-cs-ssl-cipher | network.tls.cipher: x-cs-ssl-cipher | Mapeado diretamente do campo JSON correspondente |
| x-cs-ssl-fronting-error | security_result.detection_fields[].key: "x-cs-ssl-fronting-error", security_result.detection_fields[].value: x-cs-ssl-fronting-error | Mapeado diretamente do campo JSON correspondente |
| x-cs-ssl-handshake-error | security_result.detection_fields[].key: "x-cs-ssl-handshake-error", security_result.detection_fields[].value: x-cs-ssl-handshake-error | Mapeado diretamente do campo JSON correspondente |
| x-cs-ssl-ja3 | network.tls.client.ja3: x-cs-ssl-ja3 | Mapeado diretamente do campo JSON correspondente |
| x-cs-ssl-version | network.tls.version: x-cs-ssl-version | Mapeado diretamente do campo JSON correspondente |
| x-cs-timestamp | metadata.event_timestamp.seconds: x-cs-timestamp | Mapeado diretamente do campo JSON correspondente |
| x-cs-traffic-type | additional.fields[].key: "trafficType", additional.fields[].value.string_value: x-cs-traffic-type | Mapeado diretamente do campo JSON correspondente |
| x-cs-tunnel-src-ip | security_result.detection_fields[].key: "x-cs-tunnel-src-ip", security_result.detection_fields[].value: x-cs-tunnel-src-ip | Mapeado diretamente do campo JSON correspondente |
| x-cs-uri-path | additional.fields[].key: "x-cs-uri-path", additional.fields[].value.string_value: x-cs-uri-path | Mapeado diretamente do campo JSON correspondente |
| x-cs-url | target.url: x-cs-url | Mapeado diretamente do campo JSON correspondente |
| x-cs-userip | security_result.detection_fields[].key: "x-cs-userip", security_result.detection_fields[].value: x-cs-userip | Mapeado diretamente do campo JSON correspondente |
| x-other-category | security_result.category_details[]: x-other-category | Mapeado diretamente do campo JSON correspondente |
| x-other-category-id | security_result.detection_fields[].key: "x-other-category-id", security_result.detection_fields[].value: x-other-category-id | Mapeado diretamente do campo JSON correspondente |
| x-policy-action | security_result.action: valor derivado, security_result.action_details: x-policy-action | security_result.action é derivado da conversão de x-policy-action em letras maiúsculas. Se o valor em maiúsculas for "ALLOW" ou "BLOCK", ele será usado diretamente. Caso contrário, ele não será mapeado. security_result.action_details é mapeado diretamente de x-policy-action. |
| x-policy-dst-host | security_result.detection_fields[].key: "x-policy-dst-host", security_result.detection_fields[].value: x-policy-dst-host | Mapeado diretamente do campo JSON correspondente |
| x-policy-dst-host-source | security_result.detection_fields[].key: "x-policy-dst-host-source", security_result.detection_fields[].value: x-policy-dst-host-source | Mapeado diretamente do campo JSON correspondente |
| x-policy-dst-ip | security_result.detection_fields[].key: "x-policy-dst-ip", security_result.detection_fields[].value: x-policy-dst-ip | Mapeado diretamente do campo JSON correspondente |
| x-policy-name | security_result.rule_name: x-policy-name | Mapeado diretamente do campo JSON correspondente |
| x-policy-src-ip | security_result.detection_fields[].key: "x-policy-src-ip", security_result.detection_fields[].value: x-policy-src-ip | Mapeado diretamente do campo JSON correspondente |
| x-r-cert-enddate | network.tls.server.certificate.not_after.seconds: segundos da Era Unix de x-r-cert-enddate | A data é convertida em segundos de época |
| x-r-cert-expired | additional.fields[].key: "x-r-cert-expired", additional.fields[].value.string_value: x-r-cert-expired | Mapeado diretamente do campo JSON correspondente |
| x-r-cert-incomplete-chain | additional.fields[].key: "x-r-cert-incomplete-chain", additional.fields[].value.string_value: x-r-cert-incomplete-chain | Mapeado diretamente do campo JSON correspondente |
| x-r-cert-issuer-cn | network.tls.server.certificate.issuer: x-r-cert-issuer-cn | Mapeado diretamente do campo JSON correspondente |
| x-r-cert-mismatch | additional.fields[].key: "x-r-cert-mismatch", additional.fields[].value.string_value: x-r-cert-mismatch | Mapeado diretamente do campo JSON correspondente |
| x-r-cert-revoked | additional.fields[].key: "x-r-cert-revoked", additional.fields[].value.string_value: x-r-cert-revoked | Mapeado diretamente do campo JSON correspondente |
| x-r-cert-self-signed | additional.fields[].key: "x-r-cert-self-signed", additional.fields[].value.string_value: x-r-cert-self-signed | Mapeado diretamente do campo JSON correspondente |
| x-r-cert-startdate | network.tls.server.certificate.not_before.seconds: segundos da Era Unix de x-r-cert-startdate | A data é convertida em segundos de época |
| x-r-cert-subject-cn | network.tls.server.certificate.subject: x-r-cert-subject-cn | Mapeado diretamente do campo JSON correspondente |
| x-r-cert-untrusted-root | additional.fields[].key: "x-r-cert-untrusted-root", additional.fields[].value.string_value: x-r-cert-untrusted-root | Mapeado diretamente do campo JSON correspondente |
| x-r-cert-valid | additional.fields[].key: "x-r-cert-valid", additional.fields[].value.string_value: x-r-cert-valid | Mapeado diretamente do campo JSON correspondente |
| ID do x-request | additional.fields[].key: "requestId", additional.fields[].value.string_value: x-request-id | Mapeado diretamente do campo JSON correspondente |
| x-rs-file-category | additional.fields[].key: "x-rs-file-category", additional.fields[].value.string_value: x-rs-file-category | Mapeado diretamente do campo JSON correspondente |
| x-rs-file-type | additional.fields[].key: "x-rs-file-type", additional.fields[].value.string_value: x-rs-file-type | Mapeado diretamente do campo JSON correspondente |
| x-s-country | target.location.country_or_region: x-s-country | Mapeado diretamente do campo JSON correspondente |
| x-s-dp-name | additional.fields[].key: "x-s-dp-name", additional.fields[].value.string_value: x-s-dp-name | Mapeado diretamente do campo JSON correspondente |
| x-s-latitude | target.location.region_coordinates.latitude: x-s-latitude | Mapeado diretamente do campo JSON correspondente |
| x-s-location | target.location.name: x-s-location | Mapeado diretamente do campo JSON correspondente |
| x-s-longitude | target.location.region_coordinates.longitude: x-s-longitude | Mapeado diretamente do campo JSON correspondente |
| x-s-region | target.location.state: x-s-region | Mapeado diretamente do campo JSON correspondente |
| x-s-zipcode | additional.fields[].key: "x-s-zipcode", additional.fields[].value.string_value: x-s-zipcode | Mapeado diretamente do campo JSON correspondente |
| x-sr-ssl-cipher | security_result.detection_fields[].key: "x-sr-ssl-cipher", security_result.detection_fields[].value: x-sr-ssl-cipher | Mapeado diretamente do campo JSON correspondente |
| x-sr-ssl-client-certificate-error | security_result.detection_fields[].key: "x-sr-ssl-client-certificate-error", security_result.detection_fields[].value: x-sr-ssl-client-certificate-error | Mapeado diretamente do campo JSON correspondente |
| x-sr-ssl-engine-action | security_result.detection_fields[].key: "x-sr-ssl-engine-action", security_result.detection_fields[].value: x-sr-ssl-engine-action | Mapeado diretamente do campo JSON correspondente |
| x-sr-ssl-engine-action-reason | security_result.detection_fields[].key: "x-sr-ssl-engine-action-reason", security_result.detection_fields[].value: x-sr-ssl-engine-action-reason | Mapeado diretamente do campo JSON correspondente |
| x-sr-ssl-handshake-error | security_result.detection_fields[].key: "x-sr-ssl-handshake-error", security_result.detection_fields[].value: x-sr-ssl-handshake-error | Mapeado diretamente do campo JSON correspondente |
| x-sr-ssl-ja3s | network.tls.server.ja3s: x-sr-ssl-ja3s | Mapeado diretamente do campo JSON correspondente |
| x-sr-ssl-malformed-ssl | security_result.detection_fields[].key: "x-sr-ssl-malformed-ssl", security_result.detection_fields[].value: x-sr-ssl-malformed-ssl | Mapeado diretamente do campo JSON correspondente |
| x-sr-ssl-version | security_result.detection_fields[].key: "x-sr-ssl-version", security_result.detection_fields[].value: x-sr-ssl-version | Mapeado diretamente do campo JSON correspondente |
| x-s-custom-signing-ca-error | security_result.detection_fields[].key: "x-s-custom-signing-ca-error", security_result.detection_fields[].value: x-s-custom-signing-ca-error | Mapeado diretamente do campo JSON correspondente |
| x-ssl-bypass | security_result.detection_fields[].key: "SSL BYPASS", security_result.detection_fields[].value: x-ssl-bypass ou x-ssl-bypass-reason | Se x-ssl-bypass for "Yes" e x-ssl-bypass-reason estiver presente, o valor de x-ssl-bypass-reason será usado. Caso contrário, o valor de x-ssl-bypass será usado. |
| x-ssl-policy-action | security_result.detection_fields[].key: "x-ssl-policy-action", security_result.detection_fields[].value: x-ssl-policy-action | Mapeado diretamente do campo JSON correspondente |
| x-ssl-policy-categories | security_result.category_details[]: x-ssl-policy-categories | Mapeado diretamente do campo JSON correspondente |
| x-ssl-policy-dst-host | security_result.detection_fields[].key: "x-ssl-policy-dst-host", security_result.detection_fields[].value: x-ssl-policy-dst-host | Mapeado diretamente do campo JSON correspondente |
| x-ssl-policy-dst-host-source | security_result.detection_fields[].key: "x-ssl-policy-dst-host-source", security_result.detection_fields[].value: x-ssl-policy-dst-host-source | Mapeado diretamente do campo JSON correspondente |
| x-ssl-policy-dst-ip | security_result.detection_fields[].key: "x-ssl-policy-dst-ip", security_result.detection_fields[].value: x-ssl-policy-dst-ip | Mapeado diretamente do campo JSON correspondente |
| x-ssl-policy-name | security_result.rule_name: x-ssl-policy-name | Mapeado diretamente do campo JSON correspondente |
| x-ssl-policy-src-ip | security_result.detection_fields[].key: "x-ssl-policy-src-ip", security_result.detection_fields[].value: x-ssl-policy-src-ip | Mapeado diretamente do campo JSON correspondente |
| x-sr-dst-ip | security_result.detection_fields[].key: "x-sr-dst-ip", security_result.detection_fields[].value: x-sr-dst-ip | Mapeado diretamente do campo JSON correspondente |
| x-sr-dst-port | security_result.detection_fields[].key: "x-sr-dst-port", security_result.detection_fields[].value: x-sr-dst-port | Mapeado diretamente do campo JSON correspondente |
| x-type | additional.fields[].key: "xType", additional.fields[].value.string_value: x-type | Mapeado diretamente do campo JSON correspondente |
| x-transaction-id | additional.fields[].key: "transactionId", additional.fields[].value.string_value: x-transaction-id | Mapeado diretamente do campo JSON correspondente |
| metadata.vendor_name | Defina como "Netskope". | |
| metadata.product_name | Defina como "Netskope Webproxy", se ainda não estiver presente. | |
| metadata.log_type | Defina como "NETSKOPE_WEBPROXY" |
Registro de alterações
Confira o registro de alterações deste analisador
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.