Coletar registros do Rubrik Security Cloud
Este documento explica como ingerir registros do Rubrik Security Cloud no Google Security Operations usando webhooks. A Rubrik Security Cloud (RSC) é uma plataforma de segurança de dados baseada em SaaS que oferece recursos de backup, recuperação, detecção de anomalias e governança de dados em ambientes de nuvem e locais. O RSC gera eventos de segurança, registros de auditoria e registros de atividades operacionais em JSON do formato de evento comum do PagerDuty (DP-CEF), que podem ser enviados ao Google SecOps para monitoramento e análise centralizados.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Acesso privilegiado ao console do Rubrik Security Cloud com permissões para gerenciar webhooks
- Conectividade de rede da Rubrik Security Cloud ao endpoint de webhook do Google SecOps
- Acesso ao Google Cloud console para criação de chaves de API
Criar um feed de webhook no Google SecOps
Criar o feed
- 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,
Rubrik Security Cloud Events). - Selecione Webhook como o Tipo de origem.
- Selecione Rubrik Security Cloud como o Tipo de registro.
- Clique em Próxima.
- Especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão (opcional): deixe em branco, já que cada solicitação de webhook contém um único evento.
- 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.
Gerar e salvar a chave secreta
Depois de criar o feed, gere uma chave secreta para autenticação:
- Na página de detalhes do feed, clique em Gerar chave secreta.
- Uma caixa de diálogo mostra a chave secreta.
- Copie e salve a chave secreta com segurança.
Receber o URL do endpoint do feed
- Acesse a guia Detalhes do feed.
- Na seção Informações do endpoint, copie o URL do endpoint do feed.
- Salve esse URL para as próximas etapas.
- Clique em Concluído.
Criar uma Google Cloud chave de API
O Google SecOps exige uma chave de API para autenticação. Crie uma chave de API restrita no console Google Cloud .
Criar a chave de API
- Acesse a página Credenciais do consoleGoogle Cloud .
- Selecione seu projeto (o projeto associado à sua instância do Google SecOps).
- Clique em Criar credenciais > Chave de API.
- Uma chave de API é criada e exibida em uma caixa de diálogo.
- Clique em Editar chave de API para restringir a chave.
Restringir a chave de API
- Na página de configurações da chave de API:
- Nome: insira um nome descritivo, por exemplo,
Google SecOps Webhook API Key.
- Nome: insira um nome descritivo, por exemplo,
- Em Restrições de API:
- Selecione Restringir chave.
- No menu suspenso Selecionar APIs, pesquise e selecione API Google SecOps (ou API Chronicle).
- Clique em Salvar.
- Copie o valor da chave de API do campo Chave de API na parte de cima da página.
Salve a chave de API com segurança.
Configurar um webhook do Rubrik Security Cloud
Criar o URL do webhook
Combine o URL do endpoint do Google SecOps, a chave de API e a chave secreta do feed. As duas credenciais são transmitidas como parâmetros de consulta:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET>Exemplo:
https://<REGION>-chronicle.googleapis.com/v1alpha/projects/<PROJECT_NUMBER>/locations/<REGION>/instances/<INSTANCE_ID>/feeds/<FEED_ID>:importPushLogs?key=AIzaSyD...&secret=a1b2c3d4...
Criar um webhook no Rubrik Security Cloud
- Faça login no Rubrik Security Cloud em
https://<account>.my.rubrik.com. - Clique no ícone de engrenagem no canto superior direito e selecione Configurações.
- Clique em Notificações e selecione Webhooks.
- Clique em Adicionar webhook.
- O assistente "Adicionar webhook" aparece.
Em Provedor, selecione Genérico.
Em Nome do webhook, insira um nome descritivo (por exemplo,
Google SecOps Integration).Em Endpoint, cole o URL do webhook completo acima, incluindo os parâmetros de consulta
keyesecret. A autenticação é feita pelo URL, então a chave Autenticação pode ficar desativada.Clique em Próxima.
Clique em Testar webhook para verificar se a configuração especificada funciona e clique em Próxima.
A janela Selecionar evento e gravidade vai aparecer.
Selecione os eventos que o RSC envia ao endpoint de webhook configurado:
Em Eventos, selecione os tipos de eventos a serem encaminhados:
- Backup
- Recuperação
- Anomalia
- Busca de ameaças
- Monitoramento de ameaças
- Configuração
- Diagnóstico
- Sincronizar
- Manutenção
- Sistema
Em Auditoria, selecione os tipos de auditoria que serão encaminhados. Os tipos de auditoria de autenticação alimentam os mapeamentos de login do analisador.
Em Gravidade, selecione os níveis de gravidade para acionar alertas:
- Crítico
- Aviso
- Informativa
Clique em Próxima.
Revise os detalhes da configuração na janela Confirmação e clique em Salvar.
Verificar se o webhook está funcionando
Verificar o status do webhook do Rubrik Security Cloud
- Faça login no Rubrik Security Cloud.
- Acesse Configurações > Notificações > Webhooks.
- Verifique a coluna Status do webhook (deve mostrar Ativado).
- Monitore as mensagens de erro nos detalhes do webhook.
Verificar o status do feed do Google SecOps
- Acesse Configurações do SIEM > Feeds no Google SecOps.
- Verifique a coluna Status do seu feed de webhook (deve ser Ativo).
Verifique a contagem de Eventos recebidos (ela precisa estar aumentando).
Verificar registros no Google SecOps
- Acesse Pesquisar > Pesquisa do UDM.
Use a seguinte consulta:
metadata.vendor_name = "RUBRIK" nocase AND metadata.product_name = "RUBRIK SECURITY CLOUD" nocaseAjuste o período para a última hora.
Verifique se os eventos aparecem nos resultados.
Referência de payload do webhook
Por padrão, a Rubrik Security Cloud envia eventos no formato de evento comum do PagerDuty (DP-CEF, na sigla em inglês). Confira a seguir um exemplo de payload de evento:
{ "summary": "Failed backup of vSphere VM 'example-vm'.", "source": "Rubrik Security Cloud", "severity": "critical", "timestamp": "2024-07-18T06:39:40.46Z", "class": "Backup", "custom_details": { "seriesId": "ccd7a8a5-4c58-4c88-bff9-7bdffddb6099", "id": "c2b47274-6323-4025-b307-afed1cfb7574", "type": "Event", "objectId": "83c4a80a-4a57-5699-b399-651089135586", "objectName": "example-vm", "objectType": "VmwareVm", "status": "Failure", "clusterId": "6a271636-9392-4cba-90c5-bdbe227854ab", "clusterName": "production-cluster", "eventName": "Snapshot.BackupFailed", "errorId": "Snapshot.VmwareSnapshotError", "errorCode": "", "errorRemedy": "", "errorReason": "", "auditUserName": "", "auditUserId": "", "location": "vcenter.example.com", "url": "", "customerID": "rubrik-customer", "logicalSizeInBytes": "", "dataTransferredInBytes": "", "effectiveThroughput": "" } }
Limites e práticas recomendadas de webhook
Limites de solicitações
| Limite | Valor |
|---|---|
| Linha de registro única máxima | 1 MB |
| QPS máximo (consultas por segundo) | 15.000 |
| Tempo limite da solicitação | 90 segundos |
| Comportamento de repetição | Gerenciada pelo remetente. O Google SecOps retorna HTTP 429 quando o limite de burst é excedido. O sistema de envio precisa armazenar em buffer e tentar novamente. |
Tabela de mapeamento de UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
audit_info_label |
additional.fields |
Mesclado |
effectiveThroughput_label |
additional.fields |
Mesclado |
group_label |
additional.fields |
Mesclado |
isPolarisAudit_label |
additional.fields |
Mesclado |
label_name_label |
additional.fields |
Mesclado |
node_label |
additional.fields |
Mesclado |
orgID_label |
additional.fields |
Mesclado |
snappable_name_label |
additional.fields |
Mesclado |
snappable_type_label |
additional.fields |
Mesclado |
snapshot_date_label |
additional.fields |
Mesclado |
type_label |
additional.fields |
Mesclado |
userNote_label |
additional.fields |
Mesclado |
has_target |
extensions.auth.type |
Mapeado: true → AUTHTYPE_UNSPECIFIED |
hunt_date |
metadata.event_timestamp |
Analisado como ISO8601 |
timestamp |
metadata.event_timestamp |
Analisado como ISO8601 |
has_principal |
metadata.event_type |
Mapeado: true → SCAN_HOST, true → STATUS_UPDATE |
has_target |
metadata.event_type |
Mapeado: true → USER_LOGIN |
custom_details.eventName |
metadata.product_event_type |
Mapeado diretamente |
custom_details.id |
metadata.product_log_id |
Mapeado diretamente |
source |
metadata.product_name |
Mapeado diretamente |
custom_details.url |
metadata.url_back_to_product |
Mapeado diretamente |
custom_details.dataTransferredInBytes |
network.sent_bytes |
Mapeado diretamente |
custom_details.customerID |
principal.administrative_domain |
Mapeado diretamente |
domain |
principal.domain.name |
Mapeado diretamente |
custom_details.ipAddress |
principal.ip |
Mesclado |
ip_address |
principal.ip |
Mesclado |
is_ip_assigned |
principal.ip |
Mapeado: false → ip_address |
custom_details.clusterName |
principal.resource.name |
Mapeado diretamente |
custom_details.clusterId |
principal.resource.product_object_id |
Mapeado diretamente |
user_email |
principal.user.email_addresses |
Mesclado |
custom_details.auditUserName |
principal.user.user_display_name |
Mapeado diretamente |
user_name |
principal.user.user_display_name |
Mapeado diretamente |
action_name |
security_result.action |
Mesclado |
custom_details.status |
security_result.action_details |
Mapeado diretamente |
category_temp |
security_result.category |
Mesclado |
class |
security_result.category_details |
Mesclado |
confidence |
security_result.confidence_details |
Mapeado diretamente |
custom_details.errorMessage |
security_result.description |
Mapeado diretamente |
access_type_label |
security_result.detection_fields |
Mesclado |
action_date_label |
security_result.detection_fields |
Mesclado |
detection_time_label |
security_result.detection_fields |
Mesclado |
directories_snoozed_label |
security_result.detection_fields |
Mesclado |
directories_unsnoozed_label |
security_result.detection_fields |
Mesclado |
document_count_label |
security_result.detection_fields |
Mesclado |
encryption_level_label |
security_result.detection_fields |
Mesclado |
errorCode_label |
security_result.detection_fields |
Mesclado |
errorId_label |
security_result.detection_fields |
Mesclado |
errorReason_label |
security_result.detection_fields |
Mesclado |
errorRemedy_label |
security_result.detection_fields |
Mesclado |
event_info_label |
security_result.detection_fields |
Mesclado |
failed_document_count_label |
security_result.detection_fields |
Mesclado |
file_matches_label |
security_result.detection_fields |
Mesclado |
files_created_count_label |
security_result.detection_fields |
Mesclado |
files_modified_count_label |
security_result.detection_fields |
Mesclado |
files_removed_count_label |
security_result.detection_fields |
Mesclado |
files_suspicious_count_label |
security_result.detection_fields |
Mesclado |
hash_tf_version_label |
security_result.detection_fields |
Mesclado |
identity_name_label |
security_result.detection_fields |
Mesclado |
num_files_with_matches_label |
security_result.detection_fields |
Mesclado |
num_hash_matches_label |
security_result.detection_fields |
Mesclado |
num_of_violating_identities_label |
security_result.detection_fields |
Mesclado |
num_yara_rule_matches_label |
security_result.detection_fields |
Mesclado |
obj_failed_label |
security_result.detection_fields |
Mesclado |
obj_partially_succeeded_label |
security_result.detection_fields |
Mesclado |
obj_succeeded_label |
security_result.detection_fields |
Mesclado |
object_matches_label |
security_result.detection_fields |
Mesclado |
policy_name_label |
security_result.detection_fields |
Mesclado |
reason_label |
security_result.detection_fields |
Mesclado |
remediation_type_label |
security_result.detection_fields |
Mesclado |
remedy_label |
security_result.detection_fields |
Mesclado |
risk_name_label |
security_result.detection_fields |
Mesclado |
seriesID_label |
security_result.detection_fields |
Mesclado |
seriesId_label |
security_result.detection_fields |
Mesclado |
skipped_document_count_label |
security_result.detection_fields |
Mesclado |
strain_name_label |
security_result.detection_fields |
Mesclado |
successful_document_count_label |
security_result.detection_fields |
Mesclado |
total_accessible_files_at_risk_count_label |
security_result.detection_fields |
Mesclado |
vm_count_label |
security_result.detection_fields |
Mesclado |
yara_tf_version_label |
security_result.detection_fields |
Mesclado |
hunt_name |
security_result.rule_name |
Mapeado diretamente |
hunt_type |
security_result.rule_type |
Mapeado diretamente |
is_severity_assigned |
security_result.severity |
Mapeado: false → INFORMATIONAL, false → MEDIUM |
severity |
security_result.severity |
Mapeado: INFO → INFORMATIONAL, WARNING → MEDIUM |
severity_name |
security_result.severity |
Mapeado: INFO → INFORMATIONAL, WARNING → MEDIUM |
severity |
security_result.severity_details |
Mapeado diretamente |
severity_name |
security_result.severity_details |
Mapeado diretamente |
summary |
security_result.summary |
Mapeado diretamente |
threat_feed_type |
security_result.threat_feed_name |
Mapeado diretamente |
custom_details.logicalSizeInBytes |
target.file.size |
Mapeado diretamente |
client_id_label |
target.labels |
Mesclado |
client_name_label |
target.labels |
Mesclado |
custom_details.location |
target.location.name |
Mapeado diretamente |
custom_details.objectName |
target.resource.name |
Mapeado diretamente |
object_name |
target.resource.name |
Mapeado diretamente |
resource_name |
target.resource.name |
Mapeado diretamente |
custom_details.objectId |
target.resource.product_object_id |
Mapeado diretamente |
component |
target.resource.resource_subtype |
Mapeado diretamente |
custom_details.objectType |
target.resource.resource_subtype |
Mapeado diretamente |
is_object_type_assigned |
target.resource.resource_type |
Mapeado: false → UNSPECIFIED |
class |
target.user.email_addresses |
Mapeado: Login → user_email |
user_email |
target.user.email_addresses |
Mesclado |
each_group |
target.user.group_identifiers |
Mesclado |
custom_details.auditUserName |
target.user.user_display_name |
Mapeado diretamente |
user_name |
target.user.user_display_name |
Mapeado diretamente |
custom_details.auditUserId |
target.user.userid |
Mapeado diretamente |
| N/A | extensions.auth.type |
Constante: AUTHTYPE_UNSPECIFIED |
| N/A | metadata.event_type |
Constante: USER_LOGIN |
| N/A | metadata.product_name |
Constante: RUBRIK SECURITY CLOUD |
| N/A | metadata.vendor_name |
Constante: RUBRIK |
| N/A | principal.resource.resource_type |
Constante: CLUSTER |
| N/A | security_result.severity |
Constante: INFORMATIONAL |
| N/A | target.resource.resource_type |
Constante: UNSPECIFIED |
Registro de alterações
Ver o registro de alterações deste analisador
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.