Coletar registros de auditoria do GitHub

Compatível com:

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:

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, Registros do GitHub).
  5. Selecione Webhook como o Tipo de origem.
  6. Selecione GitHub como o Tipo de registro.
  7. Clique em Próxima.
  8. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registro, como \n.
  9. Clique em Próxima.
  10. Revise a configuração do feed na tela Finalizar e clique em Enviar.
  11. Clique em Gerar chave secreta para autenticar o feed.
  12. 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.
  13. 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.
  14. 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

  1. Acesse console doGoogle Cloud > Credenciais.

    Ir para Credenciais

  2. Clique em Criar credenciais e, em seguida, selecione Chave de API.

  3. Restrinja o acesso da chave de API à API Google Security Operations.

Especifique o URL do endpoint

  1. No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed do webhook.
  2. 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.

  1. Navegue até seu repositório do GitHub.
  2. Acesse Configurações.
  3. Clique em Webhooks.
  4. Clique em Add webhook.
  5. No campo URL de payload, insira o URL do endpoint de API Google SecOps.
  6. 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.

  7. 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.

  8. Verifique se a caixa de seleção Ativo está marcada.

  9. 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_idsuccessenvjob_idjob 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.