Coletar registros do Netwrix Auditor
Este documento explica como ingerir registros do Netwrix Auditor no Google Security Operations usando o Google Cloud Storage V2.
O Netwrix Auditor é uma plataforma de visibilidade para análise de comportamento do usuário e mitigação de riscos que permite o controle de mudanças, configurações e acesso em ambientes de TI híbridos. A plataforma oferece análises de segurança para detectar anomalias no comportamento do usuário e investigar padrões de ameaças antes que ocorra uma violação de dados. Com uma API de integração RESTful, a plataforma oferece visibilidade e controle de todos os seus sistemas de TI locais ou baseados na nuvem de maneira unificada.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Uma instância do Google SecOps
- Um projeto do GCP com as APIs Cloud Storage, Cloud Run, Pub/Sub e Cloud Scheduler ativadas
- Permissões para criar e gerenciar intervalos do GCS
- Permissões para gerenciar políticas do IAM em buckets do GCS
- Permissões para criar serviços do Cloud Run, tópicos do Pub/Sub e jobs do Cloud Scheduler
- Acesso administrativo ao servidor do Netwrix Auditor
- Uma conta de domínio do Windows com as permissões adequadas para acesso à API
- Servidor do Netwrix Auditor com a API de integração ativada (ativada por padrão)
- Banco de dados de auditoria configurado no Netwrix Auditor
- Conectividade de rede da função do Cloud Run com o servidor Netwrix Auditor na porta 9699 (padrão)
Configurar o acesso à API do Netwrix Auditor
Para permitir que a função do Cloud Run recupere registros de atividade, verifique se a API Integration está ativada e crie uma conta de domínio do Windows com a função apropriada no Netwrix Auditor.
Verificar se a API Integration está ativada
- No computador em que o Netwrix Auditor Server está instalado, inicie o Netwrix Auditor.
- Acesse Configurações > Integrações.
- Verifique se a opção Aproveitar a API Integration está ativada.
- Anote o número da Porta (o padrão é
9699). Se você precisar mudar a porta:
- Clique em Modificar na seção Configurações da API.
- Especifique um novo número de porta.
- Clique em OK.
Criar uma conta de serviço para acesso à API
- No controlador de domínio do Windows, abra Usuários e computadores do Active Directory.
- Navegue até a unidade organizacional em que você quer criar a conta de serviço.
- Clique com o botão direito do mouse na unidade organizacional > Novo > Usuário.
- No campo Nome, digite
Chronicle Integration. - No campo Nome de logon do usuário, insira
chronicle-api(ou seu nome de usuário preferido). - Clique em Próxima.
- Insira uma senha forte e configure as configurações de senha de acordo com a política da sua organização.
- Desmarque a caixa de seleção O usuário precisa mudar a senha no próximo login.
- Selecione A senha nunca expira (recomendado para contas de serviço).
- Clique em Próxima > Concluir.
Atribuir a função de revisor global
- Na janela principal do Netwrix Auditor, navegue até Planos de monitoramento.
- Na árvore de planos de monitoramento, selecione Todos os planos de monitoramento (a pasta raiz).
- Clique em Delegar.
- Na caixa de diálogo Delegação, clique em Adicionar usuário.
- Na caixa de diálogo Selecionar usuário ou grupo:
- Clique em Procurar.
- No campo Digite o nome do objeto a ser selecionado, insira o nome de usuário
chronicle-api. - Clique em Verificar nomes para verificar a conta.
- Clique em OK.
- No menu suspenso Papel, selecione Revisor global.
- Clique em OK.
Clique em Salvar.
Registrar credenciais de API
Registre as seguintes informações para configurar as variáveis de ambiente da função do Cloud Run:
- Nome de usuário: a conta de domínio no formato
DOMAIN\username(por exemplo,ENTERPRISE\chronicle-api) - Senha: a senha da conta de serviço
- Nome do host: o nome de domínio totalmente qualificado (FQDN) ou o endereço IP do servidor Netwrix Auditor (por exemplo,
auditor.enterprise.localou172.28.6.15) Porta: a porta da API Integration (o padrão é
9699)
Verifique as permissões
Para verificar se a conta tem as permissões necessárias:
- No Netwrix Auditor, navegue até Planos de monitoramento.
- Selecione Todos os planos de monitoramento.
- Clique em Delegar.
- Verifique se a conta
chronicle-apiaparece com a função Revisor global. - Se a conta não aparecer, siga as etapas acima em Atribuir a função de revisor global.
Testar o acesso à API
Teste suas credenciais antes de prosseguir com a integração:
# Replace with your actual values NETWRIX_HOST="auditor.enterprise.local" NETWRIX_PORT="9699" NETWRIX_USER="ENTERPRISE\\chronicle-api" NETWRIX_PASS="your-password" # Test API access (retrieve first batch of activity records) curl -k --ntlm -u "${NETWRIX_USER}:${NETWRIX_PASS}" \ "https://${NETWRIX_HOST}:${NETWRIX_PORT}/netwrix/api/v1/activity_records/enum" \ -H "Content-Type: application/json" \ -H "Accept: application/json"
Uma resposta bem-sucedida retorna um objeto JSON que contém uma matriz de registros de atividade e um ContinuationMark para paginação.
Criar um bucket do Google Cloud Storage
- Acesse o Console do Google Cloud.
- Selecione seu projeto ou crie um novo.
- No menu de navegação, acesse Cloud Storage > Buckets.
- Clique em Criar bucket.
Informe os seguintes detalhes de configuração:
Configuração Valor Nomeie seu bucket Insira um nome exclusivo globalmente, por exemplo, netwrix-auditor-logs.Tipo de local Escolha com base nas suas necessidades (região, birregional, multirregional) Local Selecione o local (por exemplo, us-central1).Classe de armazenamento Padrão (recomendado para registros acessados com frequência) Controle de acesso Uniforme (recomendado) Ferramentas de proteção Opcional: ativar o controle de versões de objetos ou a política de retenção Clique em Criar.
Criar uma conta de serviço para a função do Cloud Run
- No Console do GCP, acesse IAM e administrador > Contas de serviço.
- Clique em Criar conta de serviço.
- Informe os seguintes detalhes de configuração:
- Nome da conta de serviço: insira
netwrix-audit-collector-sa - Descrição da conta de serviço: insira
Service account for Cloud Run function to collect Netwrix Auditor logs
- Nome da conta de serviço: insira
- Clique em Criar e continuar.
- Na seção Conceder acesso a essa conta de serviço ao projeto, adicione os seguintes papéis:
- Clique em Selecionar papel.
- Pesquise e selecione Administrador de objetos do Storage.
- Clique em + Adicionar outro papel.
- Pesquise e selecione Invocador do Cloud Run.
- Clique em + Adicionar outro papel.
- Pesquise e selecione Invocador do Cloud Functions.
- Clique em Continuar.
- Clique em Concluído.
Conceder permissões do IAM no bucket do GCS
- Acesse Cloud Storage > Buckets.
- Clique no nome do bucket (
netwrix-auditor-logs). - Acesse a guia Permissões.
- Clique em Conceder acesso.
- Informe os seguintes detalhes de configuração:
- Adicionar principais: insira o e-mail da conta de serviço (
netwrix-audit-collector-sa@PROJECT_ID.iam.gserviceaccount.com). - Atribuir papéis: selecione Administrador de objetos do Storage.
- Adicionar principais: insira o e-mail da conta de serviço (
- Clique em Salvar.
Criar tópico Pub/Sub
- No Console do GCP, acesse Pub/Sub > Tópicos.
- Selecione Criar tópico.
- Informe os seguintes detalhes de configuração:
- ID do tópico: insira
netwrix-audit-trigger - Não mude as outras configurações.
- ID do tópico: insira
- Clique em Criar.
Criar uma função do Cloud Run para coletar registros
A função do Cloud Run será acionada por mensagens do Pub/Sub do Cloud Scheduler para buscar registros de atividade da API de integração do Netwrix Auditor e gravá-los no GCS.
- No console do GCP, acesse o Cloud Run.
- Clique em Criar serviço.
- Selecione Função (use um editor in-line para criar uma função).
Na seção Configurar, forneça os seguintes detalhes de configuração:
Configuração Valor Nome do serviço netwrix-audit-collectorRegião Selecione a região correspondente ao seu bucket do GCS (por exemplo, us-central1).Ambiente de execução Selecione Python 3.12 ou uma versão mais recente. Na seção Acionador (opcional):
- Clique em + Adicionar gatilho.
- Selecione Cloud Pub/Sub.
- Em Selecionar um tópico do Cloud Pub/Sub, escolha
netwrix-audit-trigger. - Clique em Salvar.
Na seção Autenticação:
- Selecione Exigir autenticação.
- Confira o Identity and Access Management (IAM).
Role a tela para baixo e abra Contêineres, rede, segurança.
Acesse a guia Segurança:
- Conta de serviço: selecione
netwrix-audit-collector-sa
- Conta de serviço: selecione
Acesse a guia Contêineres:
- Clique em Variáveis e secrets.
- Clique em + Adicionar variável para cada variável de ambiente:
Nome da variável Valor de exemplo Descrição GCS_BUCKETnetwrix-auditor-logsNome do bucket do GCS GCS_PREFIXnetwrix-auditPrefixo para arquivos de registro STATE_KEYnetwrix-audit/state.jsonCaminho do arquivo de estado NETWRIX_HOSTauditor.enterprise.localFQDN ou IP do servidor Netwrix Auditor NETWRIX_PORT9699Porta da API Integration NETWRIX_USERENTERPRISE\chronicle-apiConta de domínio no formato DOMÍNIO\nomedeusuario NETWRIX_PASSyour-passwordSenha da conta de serviço MAX_RECORDS10000Máximo de registros por execução LOOKBACK_HOURS24Período de lookback inicial Na seção Variáveis e secrets, role a tela para baixo até Solicitações:
- Tempo limite da solicitação: insira
600segundos (10 minutos)
- Tempo limite da solicitação: insira
Acesse a guia Configurações:
- Na seção Recursos:
- Memória: selecione 512 MiB ou mais.
- CPU: selecione 1
- Na seção Recursos:
Na seção Escalonamento de revisão:
- Número mínimo de instâncias: insira
0 - Número máximo de instâncias: insira
100
- Número mínimo de instâncias: insira
Clique em Criar.
Aguarde a criação do serviço (1 a 2 minutos).
Depois que o serviço for criado, o editor de código inline será aberto automaticamente.
Adicionar código da função
- Insira main no campo Ponto de entrada.
No editor de código inline, crie dois arquivos:
- main.py:
import functions_framework from google.cloud import storage import json import os import requests from requests_ntlm import HttpNtlmAuth from datetime import datetime, timezone, timedelta import time import urllib3 # Suppress insecure HTTPS warnings for self-signed certificates urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # Initialize Storage client storage_client = storage.Client() # Environment variables GCS_BUCKET = os.environ.get('GCS_BUCKET') GCS_PREFIX = os.environ.get('GCS_PREFIX', 'netwrix-audit') STATE_KEY = os.environ.get('STATE_KEY', 'netwrix-audit/state.json') NETWRIX_HOST = os.environ.get('NETWRIX_HOST') NETWRIX_PORT = os.environ.get('NETWRIX_PORT', '9699') NETWRIX_USER = os.environ.get('NETWRIX_USER') NETWRIX_PASS = os.environ.get('NETWRIX_PASS') MAX_RECORDS = int(os.environ.get('MAX_RECORDS', '10000')) LOOKBACK_HOURS = int(os.environ.get('LOOKBACK_HOURS', '24')) def parse_datetime(value): """Parse ISO datetime string to datetime object.""" if value.endswith("Z"): value = value[:-1] + "+00:00" return datetime.fromisoformat(value) @functions_framework.cloud_event def main(cloud_event): """ Cloud Run function triggered by Pub/Sub to fetch Netwrix Auditor activity records and write to GCS. Args: cloud_event: CloudEvent object containing Pub/Sub message """ if not all([GCS_BUCKET, NETWRIX_HOST, NETWRIX_USER, NETWRIX_PASS]): print('Error: Missing required environment variables') return try: bucket = storage_client.bucket(GCS_BUCKET) state = load_state(bucket) now = datetime.now(timezone.utc) if isinstance(state, dict) and state.get('last_event_time'): try: last_time = parse_datetime(state['last_event_time']) last_time = last_time - timedelta(minutes=2) except Exception as e: print(f"Warning: Could not parse last_event_time: {e}") last_time = now - timedelta(hours=LOOKBACK_HOURS) else: last_time = now - timedelta(hours=LOOKBACK_HOURS) print(f"Fetching activity records from {last_time.isoformat()} " f"to {now.isoformat()}") records, newest_event_time = fetch_activity_records( last_time, now ) if not records: print("No new activity records found.") save_state(bucket, now.isoformat()) return timestamp = now.strftime('%Y%m%d_%H%M%S') object_key = ( f"{GCS_PREFIX}/netwrix_audit_{timestamp}.ndjson" ) blob = bucket.blob(object_key) ndjson = '\n'.join( [json.dumps(r, ensure_ascii=False, default=str) for r in records] ) + '\n' blob.upload_from_string( ndjson, content_type='application/x-ndjson' ) print(f"Wrote {len(records)} records to " f"gs://{GCS_BUCKET}/{object_key}") if newest_event_time: save_state(bucket, newest_event_time) else: save_state(bucket, now.isoformat()) print(f"Successfully processed {len(records)} records") except Exception as e: print(f'Error processing activity records: {str(e)}') raise def load_state(bucket): """Load state from GCS.""" try: blob = bucket.blob(STATE_KEY) if blob.exists(): return json.loads(blob.download_as_text()) except Exception as e: print(f"Warning: Could not load state: {e}") return {} def save_state(bucket, last_event_time_iso): """Save the last event timestamp to GCS state file.""" try: state = { 'last_event_time': last_event_time_iso, 'last_run': datetime.now(timezone.utc).isoformat() } blob = bucket.blob(STATE_KEY) blob.upload_from_string( json.dumps(state, indent=2), content_type='application/json' ) print(f"Saved state: last_event_time={last_event_time_iso}") except Exception as e: print(f"Warning: Could not save state: {e}") def fetch_activity_records(start_time, end_time): """ Fetch activity records from Netwrix Auditor Integration API using the enum endpoint with continuation mark pagination. The API returns up to 1000 records per request. Subsequent requests include the ContinuationMark from the previous response to retrieve the next batch. Args: start_time: Start time for filtering records end_time: End time for filtering records Returns: Tuple of (records list, newest_event_time ISO string) """ base_url = ( f"https://{NETWRIX_HOST}:{NETWRIX_PORT}" f"/netwrix/api/v1/activity_records/enum" ) auth = HttpNtlmAuth(NETWRIX_USER, NETWRIX_PASS) session = requests.Session() session.auth = auth session.verify = False session.headers.update({ 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'GoogleSecOps-NetwrixCollector/1.0' }) all_records = [] newest_time = None continuation_mark = None page_num = 0 backoff = 1.0 while True: page_num += 1 if len(all_records) >= MAX_RECORDS: print(f"Reached max_records limit ({MAX_RECORDS})") break try: if continuation_mark: response = session.post( base_url, json={"ContinuationMark": continuation_mark}, timeout=(10, 60) ) else: response = session.get( base_url, timeout=(10, 60) ) if response.status_code == 429: retry_after = int( response.headers.get( 'Retry-After', str(int(backoff)) ) ) print(f"Rate limited (429). Retrying after " f"{retry_after}s...") time.sleep(retry_after) backoff = min(backoff * 2, 30.0) continue backoff = 1.0 if response.status_code != 200: print(f"HTTP Error: {response.status_code}") print(f"Response body: {response.text}") return all_records, newest_time data = response.json() page_results = data.get('ActivityRecordList', []) continuation_mark = data.get('ContinuationMark') if not page_results: print("No more activity records (empty page)") break # Filter records by time window filtered = [] for record in page_results: when = record.get('When') if when: try: record_time = parse_datetime(when) if start_time <= record_time <= end_time: filtered.append(record) if (newest_time is None or record_time > parse_datetime(newest_time)): newest_time = when except Exception as e: print(f"Warning: Could not parse " f"record time: {e}") filtered.append(record) else: filtered.append(record) print(f"Page {page_num}: Retrieved " f"{len(page_results)} records, " f"{len(filtered)} within time window") all_records.extend(filtered) if not continuation_mark: print("No more pages (no ContinuationMark)") break except requests.exceptions.Timeout: print(f"Request timeout on page {page_num}") return all_records, newest_time except Exception as e: print(f"Error fetching activity records: {e}") return all_records, newest_time print(f"Retrieved {len(all_records)} total records " f"from {page_num} pages") return all_records, newest_time- requirements.txt:
functions-framework==3.* google-cloud-storage==2.* requests>=2.31.0 requests-ntlm>=1.2.0Clique em Implantar para salvar e implantar a função.
Aguarde a conclusão da implantação (2 a 3 minutos).
Criar o job do Cloud Scheduler
- No Console do GCP, acesse o Cloud Scheduler.
- Clique em Criar job.
Informe os seguintes detalhes de configuração:
Configuração Valor Nome netwrix-audit-collector-hourlyRegião Selecione a mesma região da função do Cloud Run Frequência 0 * * * *(a cada hora, na hora)Fuso horário Selecione o fuso horário (UTC recomendado) Tipo de destino Pub/Sub Tópico Selecionar netwrix-audit-triggerCorpo da mensagem {}(objeto JSON vazio)Clique em Criar.
Opções de frequência de programação
Escolha a frequência com base no volume de registros e nos requisitos de latência:
| Frequência | Expressão Cron | Caso de uso |
|---|---|---|
| A cada 5 minutos | */5 * * * * |
Alto volume e baixa latência |
| A cada 15 minutos | */15 * * * * |
Volume médio |
| A cada hora | 0 * * * * |
Padrão (recomendado) |
| A cada 6 horas | 0 */6 * * * |
Baixo volume, processamento em lote |
| Diariamente | 0 0 * * * |
Coleta de dados históricos |
Testar a integração
- No console do Cloud Scheduler, encontre seu job (
netwrix-audit-collector-hourly). - Clique em Forçar execução para acionar o job manualmente.
- Aguarde alguns segundos.
- Acesse Cloud Run > Serviços.
- Clique em
netwrix-audit-collector. - Clique na guia Registros.
Verifique se a função foi executada com sucesso. Procure:
Fetching activity records from YYYY-MM-DDTHH:MM:SS+00:00 to YYYY-MM-DDTHH:MM:SS+00:00 Page 1: Retrieved X records, X within time window Wrote X records to gs://netwrix-auditor-logs/netwrix-audit/netwrix_audit_YYYYMMDD_HHMMSS.ndjson Successfully processed X recordsAcesse Cloud Storage > Buckets.
Clique em
netwrix-auditor-logs.Navegue até a pasta
netwrix-audit/.Verifique se um novo arquivo
.ndjsonfoi criado com o carimbo de data/hora atual.
Se você encontrar erros nos registros:
- HTTP 401: verifique se as variáveis de ambiente
NETWRIX_USEReNETWRIX_PASSestão corretas e use o formatoDOMAIN\username. - HTTP 403: verifique se a conta de serviço tem a função de Revisor global no Netwrix Auditor.
- HTTP 429: limitação de taxa. A função vai tentar de novo automaticamente com espera exponencial.
- Tempo limite de conexão: verifique a conectividade de rede do Cloud Run com o servidor do Netwrix Auditor na porta 9691. Verifique se um conector de VPC ou o Cloud VPN está configurado se o servidor for local.
- Variáveis de ambiente ausentes: verifique se todas as variáveis necessárias estão definidas na configuração da função do Cloud Run.
Recuperar a conta de serviço do Google SecOps
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Netwrix Auditor Activity Records). - Selecione Google Cloud Storage V2 como o Tipo de origem.
- Selecione Netwrix como o Tipo de registro.
- Clique em Receber conta de serviço.
Um e-mail exclusivo da conta de serviço vai aparecer. Exemplo:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopie esse endereço de e-mail para usar na próxima etapa.
Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
URL do bucket de armazenamento: insira o URI do bucket do GCS com o caminho do prefixo:
gs://netwrix-auditor-logs/netwrix-audit/
- Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência:
- Nunca: nunca exclui arquivos após as transferências (recomendado para testes).
- Excluir arquivos transferidos: exclui os arquivos após a transferência ser concluída.
- Excluir arquivos transferidos e diretórios vazios: exclui arquivos e diretórios vazios após a transferência bem-sucedida.
- Idade máxima do arquivo: inclui arquivos modificados nos últimos dias (o padrão é 180 dias).
- Namespace do recurso: o namespace do recurso
- Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed
Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Conceder permissões do IAM à conta de serviço do Google SecOps
- Acesse Cloud Storage > Buckets.
- Clique em
netwrix-auditor-logs. - Acesse a guia Permissões.
- Clique em Conceder acesso.
- Informe os seguintes detalhes de configuração:
- Adicionar principais: cole o e-mail da conta de serviço do Google SecOps.
- Atribuir papéis: selecione Leitor de objetos do Storage.
Clique em Salvar.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| Opcode | about.labels | Rótulos associados às informações "Sobre" |
| Legenda | about.resource.attribute.labels | Rótulos de atributos para o recurso na seção "Sobre" |
| Tarefa | additional.fields | Campos extras com mais informações sobre o evento |
| O que | additional.fields | |
| Aviso | additional.fields | |
| Descrição | additional.fields | |
| Adicionado | additional.fields | |
| Removido | additional.fields | |
| service_type | additional.fields | |
| Detalhes | additional.fields | |
| extensions.auth.type | extensions.auth.type | Tipo de autenticação usado |
| EventReceivedTime | metadata.collected_timestamp | Carimbo de data/hora em que o evento foi coletado pelo sistema. |
| Mensagem | metadata.description | A descrição do evento |
| event_type | metadata.event_type | Tipo de evento |
| EventType | metadata.product_event_type | Tipo de evento específico do produto |
| EventID | metadata.product_log_id | Identificador de registro específico do produto |
| SourceModuleType | observer.application | Aplicativo que observou o evento |
| Nome do host | principal.asset.hostname | Nome do host do recurso associado ao principal |
| Onde | principal.asset.hostname | |
| Estação de trabalho | principal.asset.hostname | |
| device_name | principal.asset.hostname | |
| Estação de trabalho | principal.hostname | Nome do host do principal |
| device_name | principal.hostname | |
| ProcessID | principal.process.pid | ID do processo do principal |
| Nome | principal.resource.name | Nome do recurso associado ao principal |
| Quem | principal.user.user_display_name | Nome de exibição do usuário |
| SourceName | security_result.about.resource.attribute.labels | Rótulos de atributos de recursos para o resultado "Sobre segurança" |
| ação | security_result.action | Ação realizada no resultado de segurança |
| action_details | security_result.action_details | Detalhes da ação no resultado de segurança |
| backup_name | security_result.description | Descrição do resultado de segurança |
| service_failed | security_result.description | |
| Palavras-chave | security_result.detection_fields | Campos usados para detecção no resultado de segurança |
| RecordNumber | security_result.detection_fields | |
| session_ID | security_result.detection_fields | |
| allow_connection_with_desktop | security_result.detection_fields | |
| service_account | security_result.detection_fields | |
| Gravidade | security_result.severity | Nível de gravidade do resultado de segurança |
| SeverityValue | security_result.severity | |
| resumo | security_result.summary | Resumo do resultado de segurança |
| application_name | target.application | Aplicativo no destino |
| Nome do host | target.asset.hostname | Nome do host do recurso associado ao destino |
| Onde | target.asset.hostname | |
| file_path | target.file.full_path | Caminho completo do arquivo de destino |
| Tamanho | target.file.size | Tamanho do arquivo de destino |
| Nome do host | target.hostname | Nome do host do destino |
| Onde | target.hostname | |
| Tipo | target.resource.attribute.labels | Rótulos de atributos para o recurso de destino |
| SourceModuleName | target.resource.name | Nome do recurso de destino |
| DataSource | metadata.product_name | Nome do produto que gerou o evento |
| metadata.vendor_name | metadata.vendor_name | Nome do fornecedor |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.