Recolha registos de auditoria do GitHub
Vista geral
Este analisador processa registos de auditoria do GitHub no formato JSON. Limpa a entrada removendo vários campos, executa várias operações grok e de valor-chave com base no campo process_type para extrair informações relevantes, mapeia os campos extraídos para o UDM e estrutura a saída para carregamento do Google SecOps. Também processa casos extremos específicos e realiza transformações de dados para diferentes subtipos de registos nos registos de auditoria do GitHub.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps.
- Acesso privilegiado a repositórios do GitHub.
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 GitHub).
- Selecione Webhook como o Tipo de origem.
- Selecione GitHub como o Tipo de registo.
- Clicar em Seguinte.
- Opcional: especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão: o delimitador usado para separar linhas de registo, como
\n
.
- Delimitador de divisão: o delimitador usado para separar linhas de registo, como
- Clicar em Seguinte.
- Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
- Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
- Copie e armazene a chave secreta. Não pode ver esta chave secreta novamente. Se necessário, pode regenerar uma nova chave secreta, mas esta ação torna a chave secreta anterior obsoleta.
- No separador Detalhes, copie o URL do ponto final do feed do campo Informações do ponto final. Tem de especificar este URL do ponto final na sua aplicação cliente.
- Clique em Concluído.
Crie uma chave da API para o feed de webhook
Aceda à Google Cloud consola > Credenciais.
Clique em Criar credenciais e, de seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especifique o URL do ponto final
- Na aplicação cliente, especifique o URL do ponto final HTTPS fornecido no feed do webhook.
Ative a autenticação especificando a chave da API e a chave secreta como parte do cabeçalho personalizado no seguinte formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendação: especifique a chave da API como um cabeçalho em vez de a especificar no URL. Se o seu cliente de webhook não suportar cabeçalhos personalizados, pode especificar a chave da API e a chave secreta através de parâmetros de consulta no seguinte formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Substitua o seguinte:
ENDPOINT_URL
: o URL do ponto final do feed.API_KEY
: a chave da API para autenticar no Google Security Operations.SECRET
: a chave secreta que gerou para autenticar o feed.
Crie um webhook no GitHub
Este guia fornece instruções passo a passo para criar um webhook no GitHub para enviar dados para o Google SecOps.
- Navegue para o seu repositório do GitHub.
- Aceda a Definições.
- Clique em Webhooks.
- Clique em Adicionar webhook.
- No campo URL de carga útil, introduza o URL do ponto final da API Google SecOps.
Selecione application/json como o Tipo de conteúdo.
Opcional: para maior segurança, defina um segredo. Isto gera uma assinatura para payloads de webhook, o que lhe permite verificar a respetiva autenticidade no lado do Google SecOps. Se usar um segredo, configure-o também no feed do Google SecOps.
Escolha os eventos que acionam o webhook. Para um registo abrangente, selecione Permitir-me selecionar eventos individuais e selecione os eventos relevantes (por exemplo, Push, Pedido de obtenção, Problema). Se não tiver a certeza, comece com Apenas o evento
push
.Certifique-se de que a caixa de verificação Ativo está selecionada.
Clique em Adicionar webhook para guardar a configuração.
Tabela de mapeamento da UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
_document_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
O _document_id do registo não processado é mapeado para um par de chave-valor na matriz additional.fields no UDM. |
action |
read_only_udm.metadata.product_event_type , read_only_udm.security_result.summary |
O campo action está mapeado para product_event_type nos metadados e summary no security_result . |
actor |
read_only_udm.principal.user.userid |
O campo actor , que representa o utilizador que realiza a ação, é mapeado para principal.user.userid . |
actor_id |
read_only_udm.principal.user.attribute.labels.[].key , read_only_udm.principal.user.attribute.labels.[].value |
O actor_id é mapeado como uma etiqueta na matriz principal.user.attribute.labels . |
actor_ip |
read_only_udm.principal.ip |
O endereço IP do ator está mapeado para principal.ip . |
actor_location.country_code |
read_only_udm.principal.location.country_or_region |
O código do país do ator está mapeado para principal.location.country_or_region . |
application_name |
read_only_udm.target.application |
O nome da aplicação está mapeado para target.application . |
business |
read_only_udm.target.user.company_name , read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
O nome da empresa é mapeado para target.user.company_name e como um par chave-valor em additional.fields . |
business_id |
read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
O ID da empresa é mapeado como uma etiqueta na matriz target.resource.attribute.labels . |
config.url |
read_only_udm.target.url |
O URL de configuração está mapeado para target.url . |
created_at |
read_only_udm.metadata.event_timestamp |
A data/hora created_at é convertida para o formato adequado e mapeada para metadata.event_timestamp . |
data.cancelled_at |
read_only_udm.extensions.vulns.vulnerabilities.scan_end_time |
A data/hora data.cancelled_at é convertida e mapeada para extensions.vulns.vulnerabilities.scan_end_time . |
data.email |
read_only_udm.target.email |
O endereço de email do campo de dados está mapeado para target.email . |
data.event |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
O evento do campo de dados é mapeado como uma etiqueta na matriz security_result.about.labels . |
data.events |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
Os eventos do campo de dados são mapeados como etiquetas na matriz security_result.about.labels . |
data.head_branch |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
O ramo principal do campo de dados é mapeado como uma etiqueta na matriz security_result.about.labels . |
data.head_sha |
read_only_udm.target.file.sha256 |
O SHA do cabeçalho do campo de dados está mapeado para target.file.sha256 . |
data.hook_id |
read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
O ID do gancho do campo de dados é mapeado como uma etiqueta na matriz target.resource.attribute.labels . |
data.started_at |
read_only_udm.extensions.vulns.vulnerabilities.scan_start_time |
A data/hora data.started_at é convertida e mapeada para extensions.vulns.vulnerabilities.scan_start_time . |
data.team |
read_only_udm.target.user.group_identifiers |
A equipa do campo de dados é mapeada para target.user.group_identifiers . |
data.trigger_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
O ID do acionador do campo de dados é mapeado como uma etiqueta na matriz security_result.about.labels . |
data.workflow_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
O ID do fluxo de trabalho do campo de dados é mapeado como uma etiqueta na matriz security_result.about.labels . |
data.workflow_run_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
O ID de execução do fluxo de trabalho do campo de dados é mapeado como uma etiqueta na matriz security_result.about.labels . |
enterprise.name |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
O nome da empresa é mapeado como um par de chave-valor em additional.fields . |
external_identity_nameid |
read_only_udm.target.user.userid , read_only_udm.target.user.email_addresses |
Se o external_identity_nameid for um endereço de email, a parte do nome de utilizador é extraída e mapeada para target.user.userid , e o email completo é adicionado a target.user.email_addresses . Caso contrário, todo o valor é mapeado para target.user.userid . |
external_identity_username |
read_only_udm.target.user.user_display_name |
O nome de utilizador da identidade externa está mapeado para target.user.user_display_name . |
hashed_token |
read_only_udm.network.session_id |
O token com hash está mapeado para network.session_id . |
org |
read_only_udm.target.administrative_domain |
A organização está mapeada para target.administrative_domain . |
org_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
O ID da organização é mapeado como um par de chave-valor em additional.fields . |
programmatic_access_type |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
O tipo de acesso programático é mapeado como um par de chave-valor em additional.fields . |
public_repo |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value , read_only_udm.target.location.name |
O valor public_repo determina o valor mapeado para um par de chave-valor em additional.fields e target.location.name . "false" é mapeado para "PRIVATE" e outros valores são mapeados para "PUBLIC". |
query_string |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
A string de consulta é mapeada como um par de chave-valor em additional.fields . |
rate_limit_remaining |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
O limite de taxa restante é mapeado como um par de chave-valor em additional.fields . |
repo |
read_only_udm.target.resource.name |
O repositório está mapeado para target.resource.name . |
repo_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
O ID do repositório é mapeado como um par de chave-valor em additional.fields . |
repository_public |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
A flag pública do repositório é mapeada como um par de chave-valor em additional.fields . |
request_body |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
O corpo do pedido é mapeado como um par de chave-valor em additional.fields . |
request_method |
read_only_udm.network.http.method |
O método de pedido é convertido em maiúsculas e mapeado para network.http.method . |
route |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
A rota é mapeada como um par de chave-valor em additional.fields . |
status_code |
read_only_udm.network.http.response_code |
O código de estado é convertido num número inteiro e mapeado para network.http.response_code . |
token_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
O ID da chave é mapeado como um par de chave-valor em additional.fields . |
token_scopes |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Os âmbitos dos tokens são mapeados como um par de chave-valor em additional.fields . |
transport_protocol_name |
read_only_udm.network.application_protocol |
O nome do protocolo de transporte é convertido em maiúsculas e mapeado para network.application_protocol . |
url_path |
read_only_udm.target.url |
O caminho do URL está mapeado para target.url . |
user |
read_only_udm.target.user.user_display_name |
O utilizador está mapeado para target.user.user_display_name . |
user_agent |
read_only_udm.network.http.user_agent , read_only_udm.network.http.parsed_user_agent |
O agente do utilizador é mapeado para network.http.user_agent e a respetiva versão analisada é mapeada para network.http.parsed_user_agent . |
user_id |
read_only_udm.target.user.userid |
O ID do utilizador está mapeado para target.user.userid . |
workflow.name |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
O nome do fluxo de trabalho é mapeado como uma etiqueta na matriz security_result.about.labels . |
workflow_run.event |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
O evento de execução do fluxo de trabalho é mapeado como um par de chave-valor em additional.fields . |
workflow_run.head_branch |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
O ramo principal da execução do fluxo de trabalho é mapeado como uma etiqueta na matriz security_result.about.labels . |
workflow_run.head_sha |
read_only_udm.target.file.sha256 |
O SHA do cabeçalho da execução do fluxo de trabalho está mapeado para target.file.sha256 . |
workflow_run.id |
read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
O ID de execução do fluxo de trabalho é mapeado como uma etiqueta na matriz target.resource.attribute.labels . |
workflow_run.workflow_id |
read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
O ID do fluxo de trabalho de execução do fluxo de trabalho é mapeado como uma etiqueta na matriz security_result.about.labels . |
(Lógica do analisador) | read_only_udm.metadata.event_type |
O tipo de evento é determinado pelo analisador com base na presença e nos valores de outros campos, como data.team , action e actor . A predefinição é USER_RESOURCE_ACCESS se não for cumprida nenhuma outra condição específica. |
(Lógica do analisador) | read_only_udm.metadata.log_type |
O tipo de registo está codificado como "GITHUB". |
(Lógica do analisador) | read_only_udm.metadata.product_name |
O nome do produto está codificado como "GITHUB". |
(Lógica do analisador) | read_only_udm.metadata.vendor_name |
O nome do fornecedor está codificado como "GITHUB". |
(Lógica do analisador) | read_only_udm.target.resource.resource_type |
O tipo de recurso está definido como STORAGE_OBJECT quando o campo repo está presente. |
(Lógica do analisador) | read_only_udm.target.resource.type |
O tipo de recurso é derivado do campo action . |
(Lógica do analisador) | read_only_udm.security_result.action |
A ação de segurança (ALLOW/BLOCK) é derivada dos campos at ou raw.at , se estiverem presentes e forem iguais a "success" ou não. |
(Lógica do analisador) | read_only_udm.security_result.severity |
A gravidade da segurança é derivada dos campos level ou SeverityText , se estiverem presentes. "INFO" é mapeado para "INFORMATIONAL", "WARN" para "MEDIUM" e outros valores são mapeados diretamente. Para os registos git-daemon , "fatal" é mapeado para "CRITICAL". |
(Lógica do analisador) | read_only_udm.network.application_protocol |
O protocolo de aplicação é derivado dos campos protocol , proto , babeld_proto , transport_protocol_name ou raw.protocol , convertendo-se em maiúsculas e verificando se existem "HTTP", "HTTPS" e "SSH". |
(Lógica do analisador) | read_only_udm.network.application_protocol_version |
A versão do protocolo de aplicação é derivada do campo http_version , se estiver presente. |
(Lógica do analisador) | read_only_udm.network.http.parsed_user_agent |
O agente do utilizador analisado é derivado dos campos user_agent , column5 , http_ua ou content , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.network.received_bytes |
Os bytes recebidos são derivados dos campos column3 , read_bytes , fs_recv ou uploaded_bytes , se presentes, convertidos num número inteiro não assinado. |
(Lógica do analisador) | read_only_udm.network.received_packets |
Os pacotes recebidos são derivados do campo client_recv , se estiver presente, convertendo-se num número inteiro. |
(Lógica do analisador) | read_only_udm.network.response_code |
O código de resposta é derivado dos campos column2 , status , status_code ou http_status , se presentes, convertendo-os num número inteiro. |
(Lógica do analisador) | read_only_udm.network.sent_bytes |
Os bytes enviados são derivados do campo client_sent , se estiver presente, convertendo-o num número inteiro sem sinal. |
(Lógica do analisador) | read_only_udm.network.sent_packets |
Os pacotes enviados são derivados do campo fs_sent , se estiver presente, convertendo-o num número inteiro. |
(Lógica do analisador) | read_only_udm.network.session_duration.seconds |
A duração da sessão em segundos é derivada do campo time_duration , se estiver presente, convertendo-o num número inteiro. |
(Lógica do analisador) | read_only_udm.target.file.full_path |
O caminho completo do ficheiro de destino é derivado dos campos path , git_dir ou dir , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.target.file.sha1 |
O SHA1 do ficheiro de destino é derivado do campo sha , se estiver presente. |
(Lógica do analisador) | read_only_udm.target.hostname |
O nome do anfitrião de destino é derivado do campo client_hostname , se estiver presente. |
(Lógica do analisador) | read_only_udm.target.ip |
O IP de destino é derivado dos campos x_real_ip , remote_address , client_ip ou remote_addr , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.target.location.name |
O nome da localização de destino é derivado dos campos datacenter ou public_repo , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.target.port |
A porta de destino é derivada dos campos client_port , dstp ou remote_port , se presentes, convertendo-se num número inteiro. |
(Lógica do analisador) | read_only_udm.target.process.command_line |
A linha de comandos do processo de destino é derivada dos campos command , ssh_cmd , cmdline ou cmd , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.target.process.parent_process.pid |
O ID do processo principal do processo de destino é derivado do campo ppid , se estiver presente, convertendo-o numa string. |
(Lógica do analisador) | read_only_udm.target.process.pid |
O ID do processo de destino é derivado do campo pid , se estiver presente, convertendo-o numa string. |
(Lógica do analisador) | read_only_udm.target.url |
O URL de destino é derivado dos campos url , http_url , request_url , http_request , dest_url , config.url ou url_path , se estiverem presentes. Também pode ser construído a partir de path_info e query_string . |
(Lógica do analisador) | read_only_udm.target.user.attribute.roles.[].name |
As funções de utilizador de destino são derivadas dos campos actor_type ou user_type , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.target.user.email_addresses |
Os endereços de email do utilizador de destino são derivados do campo external_identity_nameid se for um endereço de email. |
(Lógica do analisador) | read_only_udm.target.user.group_identifiers |
Os identificadores do grupo de utilizadores de destino são derivados do campo data.team , se estiver presente. |
(Lógica do analisador) | read_only_udm.target.user.userid |
O ID do utilizador de destino é derivado dos campos userid , external_identity_nameid , current_user , member , user_id , actor_id ou raw.user_id , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.target.user.user_display_name |
O nome a apresentar do utilizador de destino é derivado dos campos login , user , external_identity_username , user_login ou raw.login , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.principal.asset.asset_id |
O ID do recurso principal é derivado do campo guid , com o prefixo "GUID: ". |
(Lógica do analisador) | read_only_udm.principal.hostname |
O nome do anfitrião principal é derivado dos campos hostname , request_host , host ou principal_hostname , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.principal.ip |
O IP principal é derivado dos campos column6 , ip , x_real_ip , remote_address , raw.ip , actor_ip ou log:source:ip , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.principal.location.country_or_region |
O país ou a região da localização principal é derivado do campo actor_location.country_code , se estiver presente. |
(Lógica do analisador) | read_only_udm.principal.port |
A porta principal é derivada dos campos srcp ou log:source:port , se estiverem presentes, convertendo-se num número inteiro. |
(Lógica do analisador) | read_only_udm.principal.resource.name |
O nome do recurso principal é derivado do campo service.name , se estiver presente. |
(Lógica do analisador) | read_only_udm.principal.resource.product_object_id |
O ID do objeto do produto do recurso principal é derivado dos campos service.instance.id ou subject_id , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.principal.url |
O URL principal é derivado do campo repo , se estiver presente. |
(Lógica do analisador) | read_only_udm.principal.user.userid |
O ID do utilizador principal é derivado do campo repository_owner_id , se estiver presente, convertendo-o numa string. |
(Lógica do analisador) | read_only_udm.principal.user.user_display_name |
O nome a apresentar do utilizador principal é derivado do campo repo_name , se estiver presente. |
(Lógica do analisador) | read_only_udm.intermediary.hostname |
O nome de anfitrião do intermediário é derivado do campo hostname , se estiver presente. |
(Lógica do analisador) | read_only_udm.intermediary.ip |
O IP intermediário é derivado dos campos x_forwarded_for ou xff_ip , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.metadata.description |
A descrição dos metadados é derivada dos campos content , at ou raw.message , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.metadata.product_event_type |
O tipo de evento do produto é derivado dos campos process_type ou action , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.metadata.product_log_id |
O ID do registo do produto é derivado dos campos github_request_id , id , request_id ou raw.request_id , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.metadata.product_version |
A versão do produto é derivada do campo version , se estiver presente. |
(Lógica do analisador) | read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
São adicionadas várias etiquetas à matriz security_result.about.labels com base na presença e nos valores de campos como data.events , data.workflow_id , workflow.name , data.head_branch , data.trigger_id , data.workflow_run_id e data.event . |
(Lógica do analisador) | read_only_udm.security_result.description |
A descrição do resultado de segurança é derivada dos campos auth_status , data_msg , msg , Body , desc ou content , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.security_result.severity_details |
Os detalhes da gravidade do resultado de segurança são derivados do campo userid , se estiver presente. |
(Lógica do analisador) | read_only_udm.security_result.summary |
O resumo dos resultados de segurança é derivado dos campos creason , action ou reason , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.network.http.referral_url |
O URL de referência HTTP é derivado dos campos column4 ou referer , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.network.http.user_agent |
O agente do utilizador HTTP é derivado dos campos column5 , http_ua ou user_agent , se estiverem presentes. |
(Lógica do analisador) | read_only_udm.network.sent_bytes |
Os bytes enviados pela rede são derivados dos campos client_sent ou fs_sent , se estiverem presentes, convertendo-se num número inteiro não assinado. |
(Lógica do analisador) | read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
Muitos campos são mapeados condicionalmente como pares chave-valor na matriz additional.fields , incluindo auth_fingerprint , controller , oauth_access_id , oauth_application_id , oauth_scopes , route , worker_request_count , repo , repo_visibility , auth , content_length , elapsed , catalog_service , action , method , failure_type , failure_reason , hashed_token , token_type , gitauth_version , enterprise.name , programmatic_access_type , token_id , token_scopes , integration , query_string , rate_limit_remaining , request_body , org_id , repo_id , repository_public , raw.method , raw.failure_type , raw.failure_reason , raw.from , raw.raw_login , device_cookie , operation , operation_type , category_type , business , note , read , pre_perform_allocation_count , backend , queue , class , success , env , job_id e job . A lógica específica de cada campo está detalhada no código do analisador. |
(Lógica do analisador) | read_only_udm.security_result.detection_fields.[].key , read_only_udm.security_result.detection_fields.[].value |
Os campos controller_action , two_factor , delay_time , queued_time , delivery_build , delivery_send e stages são mapeados condicionalmente para a matriz security_result.detection_fields . |
(Lógica do analisador) | read_only_udm.target.resource.attribute.labels.[].key , read_only_udm.target.resource.attribute.labels.[].value |
Os campos hook_id , job_name , job_workflow_ref , runner_group_id , runner_group_name , runner_name , runner_id , workflow_run_id e business_id são mapeados condicionalmente como etiquetas na matriz target.resource.attribute.labels . |
(Lógica do analisador) | read_only_udm.metadata.event_timestamp |
Se a data/hora não estiver diretamente disponível num formato suportado, o analisador tenta extraí-la e convertê-la a partir de vários campos, incluindo ts , now , created_at , Timestamp , time e raw.now . |
(Lógica do analisador) | read_only_udm.network.http.method |
O método HTTP é derivado dos campos method , column1 , request_method , http_method ou raw.method , convertendo-os em letras maiúsculas. |
(Lógica do analisador) | read_only_udm.target.application |
A aplicação de destino é derivada dos campos process , program ou app , se estiverem presentes. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.