Recolha registos do WAF da Imperva
Este documento explica como recolher registos da firewall de aplicações Web (WAF) da Imperva para o Google Security Operations através de uma API ou do Amazon S3. O analisador transforma registos dos formatos SYSLOG+KV, JSON, CEF e LEEF num modelo de dados unificado (UDM). Processa várias estruturas de registos, extrai campos relevantes, normaliza-os em atributos da UDM e enriquece os dados com informações contextuais para uma análise de segurança melhorada.
Diferenças no método de recolha
A integração da WAF da Imperva com o Google SecOps suporta os seguintes métodos de carregamento de registos, ambos com a mesma etiqueta de carregamento IMPERVA_WAF:
- Recolha de APIs: com este método, o Google SecOps extrai os registos diretamente da API Imperva. Esta é uma ligação direta e só suporta registos de auditoria, conforme descrito em Rasto de auditoria da Imperva .
- Recolha de contentores do Amazon S3 V2: com este método, o Imperva WAF envia registos para um contentor do Amazon S3 designado. Em seguida, o Google SecOps extrai os registos deste contentor. Isto permite a recolha de eventos de segurança e registos de acesso, gerados pelo WAF na nuvem, conforme descrito na integração de registos do Imperva.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Tipo de carregamento (API ou Amazon S3) que melhor se adapta aos seus requisitos de configuração.
- Instância do Google SecOps.
- Acesso privilegiado à AWS.
- Acesso privilegiado ao WAF da Imperva.
Recolha registos do WAF da Imperva através da API
Configure um utilizador só de leitura para o WAF da Imperva
- Inicie sessão na consola do Imperva com uma conta privilegiada.
- Aceda a Definições > Utilizadores e funções.
- Clique em Adicionar utilizador.
- Preencha os campos obrigatórios:
- Nome de utilizador: introduza um nome de utilizador único.
- Palavra-passe: defina uma palavra-passe forte.
- Email: indique o endereço de email do utilizador.
- Na secção Funções, selecione a função Leitor.
- Clique em Guardar para criar o utilizador com acesso só de leitura.
Opcional: configure o utilizador leitor como apenas API
- Na lista Utilizadores, localize o utilizador recém-criado.
- Clique no botão Ações (três pontos) junto ao nome do utilizador.
- Selecione Definir como utilizador apenas de API.
Gere o ID da API e a chave da API
- Na lista Utilizadores, selecione o utilizador recém-criado.
- Selecione Definições e clique em Chaves da API.
- Clique em Adicionar chave da API.
- Preencha os campos obrigatórios:
- Nome: introduza um nome descritivo para a chave da API.
- Opcional: Descrição: introduza uma descrição opcional.
- Na lista A chave da API expira em, selecione Nunca.
- Para ativar, selecione Estado.
- Clique em Guardar.
O sistema apresenta o ID da API e a chave da API. Copie e guarde estas credenciais, uma vez que não vão ser apresentadas novamente.
Configure feeds
Para configurar um feed, siga estes passos:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed; por exemplo, Registos do WAF do Imperva Incapsula.
- Selecione API de terceiros como o Tipo de origem.
- Selecione Imperva como o Tipo de registo.
- Clicar em Seguinte.
- Especifique valores para os seguintes parâmetros de entrada:
- Cabeçalho HTTP de autenticação: introduza o ID e a chave da API Imperva em duas linhas:
apiId:<YOUR_API_ID>eapiKey:<YOUR_API_KEY>.
- Cabeçalho HTTP de autenticação: introduza o ID e a chave da API Imperva em duas linhas:
- Clicar em Seguinte.
- Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Recolha registos do Imperva WAF através do Amazon S3
Configure o AWS IAM e o S3
- Crie um contentor do Amazon S3 seguindo este manual do utilizador: Criar um contentor
- Guarde o Nome e a Região do contentor para utilização posterior.
- Crie um utilizador seguindo este guia do utilizador: criar um utilizador do IAM.
- Selecione o utilizador criado.
- Selecione o separador Credenciais de segurança.
- Clique em Criar chave de acesso na secção Chaves de acesso.
- Selecione Serviço de terceiros como o Exemplo de utilização.
- Clicar em Seguinte.
- Opcional: adicione uma etiqueta de descrição.
- Clique em Criar chave de acesso.
- Clique em Transferir ficheiro .csv e guarde a chave de acesso e a chave de acesso secreta para utilização posterior.
- Clique em Concluído.
- Selecione o separador Autorizações.
- Clique em Adicionar autorizações na secção Políticas de autorizações.
- Selecione Adicionar autorizações.
- Selecione Anexar políticas diretamente.
- Pesquise e selecione a política AmazonS3FullAccess.
- Clicar em Seguinte.
- Clique em Adicionar autorizações.
Configure a ligação do Imperva WAF ao Amazon S3
- Inicie sessão na consola do Imperva com uma conta privilegiada.
- Aceda a Registos > Configuração de registos.
- Selecione Amazon S3.
- Preencha os campos obrigatórios:
- Chave de acesso
- Chave secreta
- Caminho: introduza o caminho no seguinte formato:
<Amazon S3 bucket name>/<log folder>; por exemplo:MyBucket/MyIncapsulaLogFolder.
- Clique em Testar ligação para executar um ciclo de testes completo no qual um ficheiro de teste é transferido para a pasta designada.
- Selecione o formato dos ficheiros de registo como CEF.
- Por predefinição, os ficheiros de registo são comprimidos. Defina a opção para não comprimir ficheiros.
Configure um feed no Google SecOps para carregar registos do Imperva WAF a partir do Amazon S3 V2
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- No campo Nome do feed, introduza um nome para o feed; por exemplo,
Imperva WAF Logs. - Selecione Amazon S3 V2 como o Tipo de origem.
- Selecione Imperva como o Tipo de registo.
- Clicar em Seguinte.
Especifique valores para os seguintes parâmetros de entrada:
- URI do S3: o URI do contentor.
s3://your-log-bucket-name/- Substitua
your-log-bucket-namepelo nome real do contentor.
- Substitua
Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
Idade máxima do ficheiro: inclua ficheiros modificados no último número de dias. A predefinição é 180 dias.
ID da chave de acesso: chave de acesso do utilizador com acesso ao contentor do S3.
Chave de acesso secreta: chave secreta do utilizador com acesso ao contentor do S3.
Espaço de nomes do recurso: o espaço de nomes do recurso.
Etiquetas de carregamento: a etiqueta a aplicar aos eventos deste feed.
- URI do S3: o URI do contentor.
Clicar em Seguinte.
Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Tabela de mapeamento da UDM
| Campo de registo | Mapeamento do UDM | Lógica |
|---|---|---|
| account_id | target.user.userid | O ID da conta do objeto JSON |
| agir | security_result.action | Se act for allowed, alert, começar por REQ_PASSED ou começar por REQ_CACHED, defina como ALLOW. Se act for deny, blocked, começar por REQ_BLOCKED ou começar por REQ_CHALLENGE, defina como BLOCK. Se act corresponder à regex (?i)REQ_BAD, defina como FAIL. Caso contrário, defina como UNKNOWN_ACTION. |
| app | network.application_protocol | Nome mudado de kv.app. Convertido em maiúsculas. |
| calCountryOrRegion | principal.location.country_or_region | Nome mudado de calCountryOrRegion. |
| gato | security_result.action_details | Se cat começar por REQ_PASSED ou REQ_CACHED, defina action como ALLOW e defina action_details como uma descrição baseada no valor de cat. Se cat começar por REQ_BAD, defina action como FAIL e defina action_details como uma descrição baseada no valor de cat. Se cat começar por REQ_BLOCKED ou REQ_CHALLENGE, defina action como BLOCK e defina action_details como uma descrição baseada no valor de cat. |
| cicode | principal.location.city | Nome mudado de cicode. |
| classified_client | security_result.detection_fields | Se classified_client não estiver vazio, crie uma nova entrada detection_fields com a chave classified_client e o valor classified_client. |
| client.domain | principal.hostname, principal.asset.hostname | Nome mudado de client.domain. |
| client.geo.country_iso_code | principal.location.country_or_region | Nome mudado de client.geo.country_iso_code. |
| client.ip | principal.ip, principal.asset.ip | Unido a principal.ip e principal.asset.ip. |
| cn1 | network.http.response_code | Nome mudado de cn1. Convertido em número inteiro. |
| context_key | target.resource.name | Nome mudado de context_key. |
| country | principal.location.country_or_region | Nome mudado de country. |
| credentials_leaked | security_result.detection_fields | Convertido em string. Se não estiver vazio, crie uma nova entrada detection_fields com a chave credentials_leaked e o valor credentials_leaked. |
| cs1 | security_result.detection_fields | Se cs1 não estiver vazio, NA ou `, create a newdetection_fieldsentry with keycs1Labeland valuecs1`. |
| cs1Label | security_result.detection_fields | Usado como chave para a entrada detection_fields criada a partir de cs1. |
| cs2 | security_result.detection_fields | Se cs2 não estiver vazio, crie uma nova entrada detection_fields com a chave cs2Label e o valor cs2. |
| cs2Label | security_result.detection_fields | Usado como chave para a entrada detection_fields criada a partir de cs2. |
| cs3 | security_result.detection_fields | Se cs3 não estiver vazio, - ou `, create a newdetection_fieldsentry with keycs3Labeland valuecs3`. |
| cs3Label | security_result.detection_fields | Usado como chave para a entrada detection_fields criada a partir de cs3. |
| cs4 | security_result.detection_fields | Se cs4 não estiver vazio, crie uma nova entrada detection_fields com a chave cs4Label e o valor cs4. |
| cs4Label | security_result.detection_fields | Usado como chave para a entrada detection_fields criada a partir de cs4. |
| cs5 | security_result.detection_fields | Se cs5 não estiver vazio, crie uma nova entrada detection_fields com a chave cs5Label e o valor cs5. |
| cs5Label | security_result.detection_fields | Usado como chave para a entrada detection_fields criada a partir de cs5. |
| cs6 | principal.application | Nome mudado de cs6. |
| cs7 | principal.location.region_latitude | Se cs7Label for latitude, o nome é alterado para principal.location.region_latitude. Convertido em flutuante. |
| cs7Label | Se cs7Label for latitude, é usado para determinar o mapeamento de cs7. |
|
| cs8 | principal.location.region_longitude | Se cs8Label for longitude, o nome é alterado para principal.location.region_longitude. Convertido em flutuante. |
| cs8Label | Se cs8Label for longitude, é usado para determinar o mapeamento de cs8. |
|
| cs9 | security_result.rule_name, extensions.vulns.vulnerabilities.name | Se cs9 não estiver vazio, defina como security_result.rule_name e crie uma nova entrada vulnerabilities com o nome cs9. |
| Cliente | target.user.user_display_name | Nome mudado de Customer. |
| declared_client | security_result.detection_fields | Se declared_client não estiver vazio, crie uma nova entrada detection_fields com a chave declared_client e o valor declared_client. |
| descrição | security_result.threat_name | Nome mudado de description. |
| deviceExternalId | network.community_id | Nome mudado de deviceExternalId. |
| deviceReceiptTime | metadata.event_timestamp | Analisado como uma data e definido como metadata.event_timestamp. Se estiver vazio, é usado log_timestamp ou kv.start. |
| dhost | target.hostname | Nome mudado de kv.dhost. |
| dproc | security_result.category_details | Nome mudado de dproc. |
| dpt | target.port | Nome mudado de kv.dpt. Convertido em número inteiro. |
| dst | target.ip, target.asset.ip | Se dst não estiver vazio, é unida em target.ip e target.asset.ip. |
| dstPort | target.port | Nome mudado de dstPort. Convertido em número inteiro. |
| duser | target.user.userid | Se duser não corresponder à regex .*?Alert.* e não estiver vazio, o nome é alterado para target.user.userid. |
| fim | security_result.detection_fields | Se end não estiver vazio, crie uma nova entrada detection_fields com a chave event_end_time e o valor end. |
| event.id | O ID do evento do objeto JSON | |
| event.provider | principal.user.user_display_name | Nome mudado de event.provider. |
| failed_logins_last_24h | security_result.detection_fields | Convertido em string. Se não estiver vazio, crie uma nova entrada detection_fields com a chave failed_logins_last_24h e o valor failed_logins_last_24h. |
| fileId | network.session_id | Nome mudado de fileId. |
| filePermission | security_result.detection_fields | Se filePermission não estiver vazio, crie uma nova entrada detection_fields com a chave filePermission e o valor filePermission. |
| fileType | security_result.detection_fields | Se fileType não estiver vazio, crie uma nova entrada detection_fields com a chave fileType e o valor fileType. |
| impressão digital | security_result.detection_fields | Se fingerprint não estiver vazio, crie uma nova entrada detection_fields com a chave log_imperva_fingerprint e o valor fingerprint. |
| flexString1 | network.http.response_code | Nome mudado de kv.flexString1. Convertido em número inteiro. |
| http.request.body.bytes | network.sent_bytes | Convertido em número inteiro sem sinal. Nome mudado de http.request.body.bytes. |
| http.request.method | network.http.method | Nome mudado de http.request.method. |
| imperva.abp.apollo_rule_versions | security_result.detection_fields | Para cada entrada em imperva.abp.apollo_rule_versions, crie uma nova entrada detection_fields com a chave apollo_rule_versions_{index} e o valor igual à entrada. |
| imperva.abp.bot_behaviors | security_result.detection_fields | Para cada entrada em imperva.abp.bot_behaviors, crie uma nova entrada detection_fields com a chave bot_behaviors_{index} e o valor igual à entrada. |
| imperva.abp.bot_deciding_condition_ids | security_result.detection_fields | Para cada entrada em imperva.abp.bot_deciding_condition_ids, crie uma nova entrada detection_fields com a chave bot_deciding_condition_ids_{index} e o valor igual à entrada. |
| imperva.abp.bot_deciding_condition_names | security_result.detection_fields | Para cada entrada em imperva.abp.bot_deciding_condition_names, crie uma nova entrada detection_fields com a chave bot_deciding_condition_names_{index} e o valor igual à entrada. |
| imperva.abp.bot_triggered_condition_ids | security_result.detection_fields | Para cada entrada em imperva.abp.bot_triggered_condition_ids, crie uma nova entrada detection_fields com a chave bot_triggered_condition_ids_{index} e o valor igual à entrada. |
| imperva.abp.bot_triggered_condition_names | security_result.detection_fields | Para cada entrada em imperva.abp.bot_triggered_condition_names, crie uma nova entrada detection_fields com a chave bot_triggered_condition_names_{index} e o valor igual à entrada. |
| imperva.abp.bot_violations | security_result.detection_fields | Para cada entrada em imperva.abp.bot_violations, crie uma nova entrada detection_fields com a chave bot_violations_{index} e o valor igual à entrada. |
| imperva.abp.customer_request_id | network.session_id | Nome mudado de imperva.abp.customer_request_id. |
| imperva.abp.headers_accept_encoding | security_result.detection_fields | Se imperva.abp.headers_accept_encoding não estiver vazio, crie uma nova entrada detection_fields com a chave Accept Encoding e o valor imperva.abp.headers_accept_encoding. |
| imperva.abp.headers_accept_language | security_result.detection_fields | Se imperva.abp.headers_accept_language não estiver vazio, crie uma nova entrada detection_fields com a chave Accept Language e o valor imperva.abp.headers_accept_language. |
| imperva.abp.headers_connection | security_result.detection_fields | Se imperva.abp.headers_connection não estiver vazio, crie uma nova entrada detection_fields com a chave headers_connection e o valor imperva.abp.headers_connection. |
| imperva.abp.headers_referer | network.http.referral_url | Nome mudado de imperva.abp.headers_referer. |
| imperva.abp.hsig | security_result.detection_fields | Se imperva.abp.hsig não estiver vazio, crie uma nova entrada detection_fields com a chave hsig e o valor imperva.abp.hsig. |
| imperva.abp.monitor_action | security_result.action, security_result.severity | Se imperva.abp.monitor_action corresponder à regex (?i)allow, defina security_action como ALLOW e severity como INFORMATIONAL. Se imperva.abp.monitor_action corresponder à regex (?i)captcha ou (?i)block, defina security_action como BLOCK. |
| imperva.abp.pid | principal.process.pid | Nome mudado de imperva.abp.pid. |
| imperva.abp.policy_id | security_result.detection_fields | Se imperva.abp.policy_id não estiver vazio, crie uma nova entrada detection_fields com a chave Policy Id e o valor imperva.abp.policy_id. |
| imperva.abp.policy_name | security_result.detection_fields | Se imperva.abp.policy_name não estiver vazio, crie uma nova entrada detection_fields com a chave Policy Name e o valor imperva.abp.policy_name. |
| imperva.abp.random_id | additional.fields | Se imperva.abp.random_id não estiver vazio, crie uma nova entrada additional.fields com a chave Random Id e o valor imperva.abp.random_id. |
| imperva.abp.request_type | principal.labels | Se imperva.abp.request_type não estiver vazio, crie uma nova entrada principal.labels com a chave request_type e o valor imperva.abp.request_type. |
| imperva.abp.selector | security_result.detection_fields | Se imperva.abp.selector não estiver vazio, crie uma nova entrada detection_fields com a chave selector e o valor imperva.abp.selector. |
| imperva.abp.selector_derived_id | security_result.detection_fields | Se imperva.abp.selector_derived_id não estiver vazio, crie uma nova entrada detection_fields com a chave selector_derived_id e o valor imperva.abp.selector_derived_id. |
| imperva.abp.tls_fingerprint | security_result.description | Nome mudado de imperva.abp.tls_fingerprint. |
| imperva.abp.token_id | target.resource.product_object_id | Nome mudado de imperva.abp.token_id. |
| imperva.abp.zuid | additional.fields | Se imperva.abp.zuid não estiver vazio, crie uma nova entrada additional.fields com a chave zuid e o valor imperva.abp.zuid. |
| imperva.additional_factors | additional.fields | Para cada entrada em imperva.additional_factors, crie uma nova entrada additional.fields com a chave additional_factors_{index} e o valor igual à entrada. |
| imperva.audit_trail.event_action | security_result.detection_fields | Se imperva.audit_trail.event_action não estiver vazio, crie uma nova entrada detection_fields com a chave imperva.audit_trail.event_action e o valor imperva.audit_trail.event_action_description. |
| imperva.audit_trail.event_action_description | security_result.detection_fields | Usado como o valor da entrada detection_fields criada a partir de imperva.audit_trail.event_action. |
| imperva.audit_trail.event_context | security_result.detection_fields | Se imperva.audit_trail.event_context não estiver vazio, crie uma nova entrada detection_fields com a chave imperva.audit_trail.event_context e o valor imperva.audit_trail.event_context_description. |
| imperva.audit_trail.event_context_description | security_result.detection_fields | Usado como o valor da entrada detection_fields criada a partir de imperva.audit_trail.event_context. |
| imperva.country | principal.location.country_or_region | Nome mudado de imperva.country. |
| imperva.declared_client | security_result.detection_fields | Se imperva.declared_client não estiver vazio, crie uma nova entrada detection_fields com a chave declared_client e o valor imperva.declared_client. |
| imperva.device_reputation | additional.fields | Para cada entrada em imperva.device_reputation, crie uma nova entrada additional.fields com a chave device_reputation e um valor de lista que contenha a entrada. |
| imperva.domain_risk | security_result.detection_fields | Se imperva.domain_risk não estiver vazio, crie uma nova entrada detection_fields com a chave domain_risk e o valor imperva.domain_risk. |
| imperva.failed_logins_last_24h | security_result.detection_fields | Convertido em string. Se não estiver vazio, crie uma nova entrada detection_fields com a chave failed_logins_last_24h e o valor failed_logins_last_24h. |
| imperva.fingerprint | security_result.detection_fields | Se imperva.fingerprint não estiver vazio, crie uma nova entrada detection_fields com a chave log_imperva_fingerprint e o valor imperva.fingerprint. |
| imperva.ids.account_id | metadata.product_log_id | Nome mudado de imperva.ids.account_id. |
| imperva.ids.account_name | metadata.product_event_type | Nome mudado de imperva.ids.account_name. |
| imperva.ids.site_id | additional.fields | Se imperva.ids.site_id não estiver vazio, crie uma nova entrada additional.fields com a chave site_id e o valor imperva.ids.site_id. |
| imperva.ids.site_name | additional.fields | Se imperva.ids.site_name não estiver vazio, crie uma nova entrada additional.fields com a chave site_name e o valor imperva.ids.site_name. |
| imperva.referrer | network.http.referral_url | Nome mudado de imperva.referrer. |
| imperva.request_session_id | network.session_id | Nome mudado de imperva.request_session_id. |
| imperva.request_user | security_result.detection_fields | Se imperva.request_user não estiver vazio, crie uma nova entrada detection_fields com a chave request_user e o valor imperva.request_user. |
| imperva.risk_level | security_result.severity_details | Nome mudado de imperva.risk_level. |
| imperva.risk_reason | security_result.description | Nome mudado de imperva.risk_reason. |
| imperva.significant_domain_name | security_result.detection_fields | Se imperva.significant_domain_name não estiver vazio, crie uma nova entrada detection_fields com a chave significant_domain_name e o valor imperva.significant_domain_name. |
| imperva.violated_directives | security_result.detection_fields | Para cada entrada em imperva.violated_directives, crie uma nova entrada detection_fields com a chave violated_directives e o valor igual à entrada. |
| em | network.received_bytes | Nome mudado de in. Convertido em número inteiro sem sinal. |
| log_timestamp | metadata.event_timestamp | Se deviceReceiptTime estiver vazio e kv.start estiver vazio, defina como metadata.event_timestamp. |
| mensagem | metadata.description | Se message não estiver vazio e event.provider, imperva.ids.account_name e client.ip estiverem todos vazios, defina como metadata.description. |
| postbody | security_result.detection_fields | Se postbody não estiver vazio, crie uma nova entrada detection_fields com a chave post_body_info e o valor postbody. |
| proto | network.application_protocol | Nome mudado de proto. |
| protoVer | network.tls.version, network.tls.cipher | Se protoVer não estiver vazio, é analisado para extrair tls_version e tls_cipher, que são, em seguida, mudados para network.tls.version e network.tls.cipher, respetivamente. |
| pedido | target.url | Nome mudado de kv.request. |
| requestClientApplication | network.http.user_agent | Nome mudado de requestClientApplication. |
| requestMethod | network.http.method | Nome mudado de requestMethod. Convertido em maiúsculas. |
| resource_id | target.resource.id | Nome mudado de resource_id. |
| resource_type_key | target.resource.type | Nome mudado de resource_type_key. |
| rt | metadata.event_timestamp | Analisado para extrair deviceReceiptTime, que é então analisado como uma data e definido como metadata.event_timestamp. |
| security_result.action | security_result.action | Unido ao valor do campo _action. |
| security_result.severity | security_result.severity | Se sevs for error ou warning, defina como HIGH. Se sevs for critical, defina como CRITICAL. Se sevs for medium ou notice, defina como MEDIUM. Se sevs for information ou info, defina como LOW. |
| server.domain | target.hostname, target.asset.hostname | Nome mudado de server.domain. |
| server.geo.name | target.location.name | Nome mudado de server.geo.name. |
| gravidade | security_result.threat_id | Nome mudado de severity. |
| siteid | security_result.detection_fields | Se siteid não estiver vazio, crie uma nova entrada detection_fields com a chave siteid e o valor siteid. |
| sourceServiceName | target.hostname | Nome mudado de kv.sourceServiceName. |
| spt | principal.port | Nome mudado de kv.spt. Convertido em número inteiro. |
| src | principal.ip, principal.asset.ip | Se src não estiver vazio, é unida em principal.ip e principal.asset.ip. |
| srcPort | principal.port | Nome mudado de srcPort. Convertido em número inteiro. |
| iniciar | security_result.detection_fields, metadata.event_timestamp | Se start não estiver vazio, crie uma nova entrada detection_fields com a chave event_start_time e o valor start. Também é analisado como uma data e definido como metadata.event_timestamp se deviceReceiptTime estiver vazio. |
| successful_logins_last_24h | security_result.detection_fields | Convertido em string. Se não estiver vazio, crie uma nova entrada detection_fields com a chave successful_logins_last_24h e o valor successful_logins_last_24h. |
| suid | target.user.userid | Nome mudado de suid. |
| tempo | metadata.event_timestamp | Convertido em string. Analisado como uma data e definido como metadata.event_timestamp. |
| type_key | metadata.product_event_type | Nome mudado de type_key. |
| url | target.process.file.full_path | Se url.path não estiver vazio ou for /, defina como target.process.file.full_path. |
| url | target.url | Nome mudado de url. Se qstr não estiver vazio, é anexado a url com um separador ?. |
| user.email | principal.user.email_addresses | Se user.email não estiver vazio e corresponder à regex ^.+@.+$, é unido em principal.user.email_addresses. |
| user_agent | network.http.user_agent | Nome mudado de user_agent. |
| user_agent.original | network.http.parsed_user_agent | Se user_agent.original não estiver vazio ou *, é convertido em parseduseragent e mudado o nome para network.http.parsed_user_agent. |
| user_details | principal.user.email_addresses | Se user_details não estiver vazio e corresponder à regex ^.+@.+$, é unido em principal.user.email_addresses. |
| user_id | principal.user.userid | Nome mudado de user_id. |
| ver | network.tls.version, network.tls.cipher | Se ver não estiver vazio, é analisado para extrair tls_version e tls_cipher, que são, em seguida, mudados para network.tls.version e network.tls.cipher, respetivamente. |
| xff | intermediary.ip, intermediary.asset.ip, intermediary.hostname, intermediary.asset.hostname | Se xff não estiver vazio, é processado para extrair endereços IP e nomes de anfitriões. Os endereços IP são unidos em intermediary.ip e intermediary.asset.ip. Os nomes de anfitrião estão definidos como intermediary.hostname e intermediary.asset.hostname. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.