Coletar registros de auditoria do GitHub
Visão geral
Esse analisador processa registros de auditoria do GitHub no formato JSON. Ele limpa a entrada removendo vários campos, realiza várias operações de grok e chave-valor com base no campo process_type para extrair informações relevantes, mapeia os campos extraídos para a UDM e estrutura a saída para ingestão do Google SecOps. Ele também processa casos extremos específicos e realiza transformações de dados para diferentes subtipos de registros nos registros de auditoria do GitHub.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Instância do Google SecOps.
- Acesso privilegiado a repositórios do GitHub.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds
- Central de conteúdo > Pacotes de conteúdo
Configure feeds em "Configurações do SIEM" > "Feeds".
Para configurar um feed, siga estas etapas:
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo, Registros do GitHub).
- Selecione Webhook como o Tipo de origem.
- Selecione GitHub como o Tipo de registro.
- Clique em Próxima.
- Opcional: especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
\n
.
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
- Clique em Próxima.
- Revise a configuração do feed na tela Finalizar e clique em Enviar.
- Clique em Gerar chave secreta para autenticar o feed.
- Copie e armazene a chave secreta. Não é possível ver essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas isso torna a anterior obsoleta.
- Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
- Clique em Concluído.
Configurar feeds na Central de conteúdo
Especifique valores para os seguintes campos:
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
\n
.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Tipo de origem: método usado para coletar registros no Google SecOps.
- Namespace do recurso: namespace associado ao feed.
Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
Clique em Gerar chave secreta para autenticar o feed.
Copie e armazene a chave secreta. Não é possível ver essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas isso torna a anterior obsoleta.
Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
Criar uma chave de API para o feed de webhook
Acesse console doGoogle Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especifique o URL do endpoint
- No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed do webhook.
Ative a autenticação especificando a chave de 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 de API como um cabeçalho em vez de no URL. Se o cliente de webhook não aceitar cabeçalhos personalizados, especifique a chave de API e a chave secreta usando parâmetros de consulta no seguinte formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Substitua:
ENDPOINT_URL
: o URL do endpoint do feed.API_KEY
: a chave de API para autenticar no Google Security Operations.SECRET
: a chave secreta gerada para autenticar o feed.
Criar um webhook no GitHub
Este guia fornece instruções detalhadas para criar um webhook no GitHub e enviar dados ao Google SecOps.
- Navegue até seu repositório do GitHub.
- Acesse Configurações.
- Clique em Webhooks.
- Clique em Add webhook.
- No campo URL de payload, insira o URL do endpoint de API Google SecOps.
Selecione application/json como o Tipo de conteúdo.
Opcional: para aumentar a segurança, defina um Secret. Isso gera uma assinatura para payloads de webhook, permitindo que você verifique a autenticidade deles no lado do Google SecOps. Se você usa um secret, configure-o também no seu feed do Google SecOps.
Escolha os eventos que acionam o webhook. Para um registro abrangente, selecione Quero selecionar eventos individuais e marque os eventos relevantes (por exemplo, Push, Pull Request, Issue). Se você não tiver certeza, comece com Apenas o evento
push
.Verifique se a caixa de seleção Ativo está marcada.
Clique em Adicionar webhook para salvar sua configuração.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
_document_id |
read_only_udm.additional.fields.[].key , read_only_udm.additional.fields.[].value.string_value |
O _document_id do registro bruto é mapeado para um par de chave-valor na matriz additional.fields dentro da UDM. |
action |
read_only_udm.metadata.product_event_type , read_only_udm.security_result.summary |
O campo action é 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 usuário 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 um rótulo na matriz principal.user.attribute.labels . |
actor_ip |
read_only_udm.principal.ip |
O endereço IP do ator é mapeado para principal.ip . |
actor_location.country_code |
read_only_udm.principal.location.country_or_region |
O código do país do ator é mapeado para principal.location.country_or_region . |
application_name |
read_only_udm.target.application |
O nome do aplicativo é 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 de 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 um rótulo na matriz target.resource.attribute.labels . |
config.url |
read_only_udm.target.url |
O URL de configuração é mapeado para target.url . |
created_at |
read_only_udm.metadata.event_timestamp |
O carimbo de data/hora created_at é convertido para o formato adequado e mapeado para metadata.event_timestamp . |
data.cancelled_at |
read_only_udm.extensions.vulns.vulnerabilities.scan_end_time |
O carimbo de data/hora data.cancelled_at é convertido e mapeado para extensions.vulns.vulnerabilities.scan_end_time . |
data.email |
read_only_udm.target.email |
O endereço de e-mail do campo de dados é 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 um rótulo 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 rótulos 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 |
A ramificação principal do campo de dados é mapeada como um rótulo na matriz security_result.about.labels . |
data.head_sha |
read_only_udm.target.file.sha256 |
O SHA principal do campo de dados é 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 hook do campo de dados é mapeado como um rótulo na matriz target.resource.attribute.labels . |
data.started_at |
read_only_udm.extensions.vulns.vulnerabilities.scan_start_time |
O carimbo de data/hora data.started_at é convertido e mapeado para extensions.vulns.vulnerabilities.scan_start_time . |
data.team |
read_only_udm.target.user.group_identifiers |
A equipe 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 um rótulo 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 um rótulo 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 da execução do fluxo de trabalho do campo de dados é mapeado como um rótulo 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 e-mail, a parte do nome de usuário será extraída e mapeada para target.user.userid , e o e-mail completo será adicionado a target.user.email_addresses . Caso contrário, todo o valor será mapeado para target.user.userid . |
external_identity_username |
read_only_udm.target.user.user_display_name |
O nome de usuário da identidade externa é mapeado para target.user.user_display_name . |
hashed_token |
read_only_udm.network.session_id |
O token com hash é 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 é 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 da solicitação é mapeado como um par de chave-valor em additional.fields . |
request_method |
read_only_udm.network.http.method |
O método de solicitação é convertido em letras 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 status é convertido em um 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 do token é 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 escopos de token 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 é mapeado para target.url . |
user |
read_only_udm.target.user.user_display_name |
O usuário é 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 user agent é mapeado para network.http.user_agent , e a versão analisada dele é mapeada para network.http.parsed_user_agent . |
user_id |
read_only_udm.target.user.userid |
O ID do usuário é 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 um rótulo 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 |
A ramificação principal da execução do fluxo de trabalho é mapeada como um rótulo na matriz security_result.about.labels . |
workflow_run.head_sha |
read_only_udm.target.file.sha256 |
O SHA principal da execução do fluxo de trabalho é 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 da execução do fluxo de trabalho é mapeado como um rótulo 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 um rótulo 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 . O padrão é USER_RESOURCE_ACCESS se nenhuma outra condição específica for atendida. |
(Lógica do analisador) | read_only_udm.metadata.log_type |
O tipo de registro é codificado como "GITHUB". |
(Lógica do analisador) | read_only_udm.metadata.product_name |
O nome do produto está fixado no código como "GITHUB". |
(Lógica do analisador) | read_only_udm.metadata.vendor_name |
O nome do fornecedor está fixado como "GITHUB". |
(Lógica do analisador) | read_only_udm.target.resource.resource_type |
O tipo de recurso é 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 eles 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 eles estiverem presentes. "INFO" é mapeado para "INFORMATIONAL", "WARN" para "MEDIUM", e outros valores são mapeados diretamente. Para registros git-daemon , "fatal" é mapeado como "CRITICAL". |
(Lógica do analisador) | read_only_udm.network.application_protocol |
O protocolo de aplicativo é derivado dos campos protocol , proto , babeld_proto , transport_protocol_name ou raw.protocol , convertendo para maiúsculas e verificando "HTTP", "HTTPS" e "SSH". |
(Lógica do analisador) | read_only_udm.network.application_protocol_version |
A versão do protocolo de aplicativo é derivada do campo http_version , se presente. |
(Lógica do analisador) | read_only_udm.network.http.parsed_user_agent |
O user agent analisado é derivado dos campos user_agent , column5 , http_ua ou content , se 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, convertendo para um número inteiro sem sinal. |
(Lógica do analisador) | read_only_udm.network.received_packets |
Os pacotes recebidos são derivados do campo client_recv , se presente, convertendo para um 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 para um número inteiro. |
(Lógica do analisador) | read_only_udm.network.sent_bytes |
Os bytes enviados são derivados do campo client_sent , se presente, convertendo para um 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 presente, convertendo para um 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 presente, convertendo para um número inteiro. |
(Lógica do analisador) | read_only_udm.target.file.full_path |
O caminho completo do arquivo de destino é derivado dos campos path , git_dir ou dir , se presentes. |
(Lógica do analisador) | read_only_udm.target.file.sha1 |
O SHA1 do arquivo de destino é derivado do campo sha , se presente. |
(Lógica do analisador) | read_only_udm.target.hostname |
O nome do host de destino é derivado do campo client_hostname , se 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 presentes. |
(Lógica do analisador) | read_only_udm.target.location.name |
O nome do local de destino é derivado dos campos datacenter ou public_repo , se 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 para um número inteiro. |
(Lógica do analisador) | read_only_udm.target.process.command_line |
A linha de comando do processo de destino é derivada dos campos command , ssh_cmd , cmdline ou cmd , se presentes. |
(Lógica do analisador) | read_only_udm.target.process.parent_process.pid |
O ID do processo pai de destino é derivado do campo ppid , se presente, convertendo para uma string. |
(Lógica do analisador) | read_only_udm.target.process.pid |
O ID do processo de destino é derivado do campo pid , se presente, convertendo para uma 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 é possível construí-lo com path_info e query_string . |
(Lógica do analisador) | read_only_udm.target.user.attribute.roles.[].name |
As funções de usuário de destino são derivadas dos campos actor_type ou user_type , se presentes. |
(Lógica do analisador) | read_only_udm.target.user.email_addresses |
Os endereços de e-mail do usuário de destino são derivados do campo external_identity_nameid , se for um endereço de e-mail. |
(Lógica do analisador) | read_only_udm.target.user.group_identifiers |
Os identificadores do grupo de usuários de destino são derivados do campo data.team , se presente. |
(Lógica do analisador) | read_only_udm.target.user.userid |
O ID do usuário de destino é derivado dos campos userid , external_identity_nameid , current_user , member , user_id , actor_id ou raw.user_id , se presentes. |
(Lógica do analisador) | read_only_udm.target.user.user_display_name |
O nome de exibição do usuário de destino é derivado dos campos login , user , external_identity_username , user_login ou raw.login , se 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 host principal é derivado dos campos hostname , request_host , host ou principal_hostname , se 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 presentes. |
(Lógica do analisador) | read_only_udm.principal.location.country_or_region |
O país ou região principal é derivado do campo actor_location.country_code , se presente. |
(Lógica do analisador) | read_only_udm.principal.port |
A porta principal é derivada dos campos srcp ou log:source:port , se presentes, convertendo para um número inteiro. |
(Lógica do analisador) | read_only_udm.principal.resource.name |
O nome do recurso principal é derivado do campo service.name , se 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 presente. |
(Lógica do analisador) | read_only_udm.principal.user.userid |
O ID do usuário principal é derivado do campo repository_owner_id , se presente, convertendo para uma string. |
(Lógica do analisador) | read_only_udm.principal.user.user_display_name |
O nome de exibição do usuário principal é derivado do campo repo_name , se presente. |
(Lógica do analisador) | read_only_udm.intermediary.hostname |
O nome do host intermediário é derivado do campo hostname , se 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 presentes. |
(Lógica do analisador) | read_only_udm.metadata.product_event_type |
O tipo de evento de produto é derivado dos campos process_type ou action , se presentes. |
(Lógica do analisador) | read_only_udm.metadata.product_log_id |
O ID do registro do produto é derivado dos campos github_request_id , id , request_id ou raw.request_id , se presentes. |
(Lógica do analisador) | read_only_udm.metadata.product_version |
A versão do produto é derivada do campo version , se presente. |
(Lógica do analisador) | read_only_udm.security_result.about.labels.[].key , read_only_udm.security_result.about.labels.[].value |
Vários rótulos são adicionados à 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 presentes. |
(Lógica do analisador) | read_only_udm.security_result.severity_details |
Os detalhes de gravidade do resultado de segurança são derivados do campo userid , se 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 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 presentes. |
(Lógica do analisador) | read_only_udm.network.http.user_agent |
O user agent HTTP é derivado dos campos column5 , http_ua ou user_agent , se 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 presentes, convertendo para um número inteiro sem sinal. |
(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 de 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 , ��, 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 , , , e .repo_id success env job_id job A lógica específica de cada campo é 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 rótulos na matriz target.resource.attribute.labels . |
(Lógica do analisador) | read_only_udm.metadata.event_timestamp |
Se o carimbo de data/hora não estiver disponível diretamente em um formato compatível, o analisador tentará extrair e converter 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 para maiúsculas. |
(Lógica do analisador) | read_only_udm.target.application |
O aplicativo de destino é derivado dos campos process , program ou app , se presentes. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.