Coletar registros do Cisco Identity Intelligence
Neste documento, explicamos como configurar o Cisco Identity Intelligence para enviar registros ao Google Security Operations usando webhooks.
O Cisco Identity Intelligence (antigo Oort Security) é uma plataforma de detecção e resposta a ameaças de identidade que monitora continuamente o comportamento do usuário, os padrões de autenticação, o uso de dispositivos e os privilégios de acesso em provedores de identidade. Ele detecta ameaças baseadas em identidade, erros de configuração e violações de compliance ao analisar a atividade do usuário, verificações de segurança com falha, pontuações de confiança e comportamentos de risco.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Uma instância do Google SecOps
- Acesso privilegiado a um locatário do Cisco Identity Intelligence
- Permissões administrativas para gerenciar integrações no Cisco Identity Intelligence
- Acesso ao console do Google Cloud (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,
Cisco Identity Intelligence Events). - Selecione Webhook como o Tipo de origem.
- Selecione Cisco Identity Intelligence como o Tipo de registro.
- Clique em Próxima.
- Especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão (opcional): insira
\npara dividir eventos de várias linhas. - Namespace do recurso: o namespace do recurso.
- Rótulos de ingestão: o rótulo a ser aplicado aos eventos desse feed.
- Delimitador de divisão (opcional): insira
- Clique em Próxima.
- Revise a configuração do novo 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.
Encontrar 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.
O formato do URL é:
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:importEm que
{region}é a região da instância do Google SecOps (por exemplo,us,europeouasia-southeast1) e{parent}é o caminho do recurso no formatoprojects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE>.Salve esse URL para as próximas etapas.
Clique em Concluído.
Criar uma chave de API do Google Cloud
O Chronicle exige uma chave de API para autenticação. Crie uma chave de API restrita no console do Google Cloud.
Criar a chave de API
- Acesse a página "Credenciais" do console do Google Cloud.
- Selecione seu projeto (o projeto associado à sua instância do Chronicle).
- 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,
Chronicle 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 o webhook do Cisco Identity Intelligence
Criar o URL do webhook
Combine o URL do endpoint do Chronicle e a chave de API:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>Exemplo:
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
Substitua:
<ENDPOINT_URL>: o URL do endpoint do feed do Chronicle copiado anteriormente<API_KEY>: a chave de API do Google Cloud criada anteriormente.<SECRET_KEY>: a chave secreta do webhook do Chronicle gerada anteriormente
Criar um destino de notificação de webhook no Cisco Identity Intelligence
- Faça login no Cisco Identity Intelligence.
- Acesse Integrações.
- Clique em Adicionar integração.
- Role para baixo até a seção Webhook.
- Clique em Adicionar destino de webhook.
- Informe os seguintes detalhes de configuração:
- Nome: insira um nome descritivo (por exemplo,
Chronicle SIEM Integration). - URL do webhook: cole o URL completo do endpoint com a chave de API e a chave secreta acima.
- Tipo de autorização: selecione Chave de API.
- Nome da chave de API: insira um nome de chave (por exemplo,
x-goog-chronicle-auth). - API Key Value: insira a chave de API do Google Cloud.
- Nome: insira um nome descritivo (por exemplo,
- Expanda a seção Parâmetros HTTP de invocação.
- Adicione os seguintes parâmetros com o tipo Cabeçalho:
- Chave:
Content-Type, Valor:application/json - Chave:
Accept, Valor:application/json
- Chave:
- Na seção Usar este destino para, selecione Verificação com falha para receber notificações quando as verificações de identidade detectarem resultados com falha.
Clique em Salvar.
Testar a conexão do webhook
- Na página Integrações, encontre o destino de notificação de webhook que você criou.
- Clique no menu de três pontos no lado direito da linha.
- Selecione Testar conectividade.
- Verifique se a mensagem de teste foi entregue corretamente.
Ativar o webhook para confirmações de identidade
Depois de criar o destino de notificação do webhook, você precisa ativá-lo para as confirmações de identidade específicas que quer monitorar.
- Acesse a página de detalhes da verificação desejada no Cisco Identity Intelligence.
- Abra o menu suspenso no canto superior direito da página.
- Marque a caixa de seleção do destino de notificação do webhook que você criou.
Repita para cada verificação que você quer enviar ao Google SecOps.
Para mais informações, consulte a documentação do webhook do Cisco Identity Intelligence.
Referência de métodos de autenticação
Os feeds de webhook do Chronicle são compatíveis com vários métodos de autenticação. Escolha o método compatível com seu fornecedor.
Método 1: cabeçalhos personalizados (recomendado)
Se o fornecedor for compatível com cabeçalhos HTTP personalizados, use esse método para aumentar a segurança.
Formato da solicitação:
POST <ENDPOINT_URL> HTTP/1.1 Content-Type: application/json x-goog-chronicle-auth: <API_KEY> x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
Vantagens:
- Chave de API e secret não visíveis no URL
- Mais seguro (cabeçalhos não registrados em registros de acesso ao servidor da Web)
- Método preferido quando o fornecedor oferece suporte
Método 2: parâmetros de consulta
Se o fornecedor não aceitar cabeçalhos personalizados, adicione as credenciais ao final do URL.
Formato do URL:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>Exemplo:
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...Formato da solicitação:
POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1 Content-Type: application/json { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
Desvantagens:
- Credenciais visíveis no URL
- Pode ser registrado em registros de acesso do servidor da Web.
- Menos seguro do que cabeçalhos
Método 3: híbrido (URL + cabeçalho)
Algumas configurações usam a chave de API no URL e a chave secreta no cabeçalho.
Formato da solicitação:
POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1 Content-Type: application/json x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
Nomes de cabeçalhos de autenticação
O Chronicle aceita os seguintes nomes de cabeçalho para autenticação:
Para chave de API:
x-goog-chronicle-auth(recomendado)X-Goog-Chronicle-Auth(não diferencia maiúsculas de minúsculas)
Para a chave secreta:
x-chronicle-auth(recomendado)X-Chronicle-Auth(não diferencia maiúsculas de minúsculas)
Limites e práticas recomendadas de webhook
Limites de solicitações
| Limite | Valor |
|---|---|
| Tamanho máximo da solicitação | 4 MB |
| QPS máximo (consultas por segundo) | 15.000 |
| Tempo limite da solicitação | 30 segundos |
| Comportamento de nova tentativa | Automático com espera exponencial |
Tabela de mapeamento de UDM
| Campo de registro | Mapeamento de UDM | Lógica |
|---|---|---|
| conta | account_label.value | Valor copiado diretamente |
| conta | account_label.key | Defina como "account". |
| account_label | security_result.detection_fields | Mesclado em detection_fields |
| additional_detaildescription.key | additional_detaildescription.key | Definido como "descrição detalhada" |
| detaildescription | additional_detaildescription.value.list_value.values | Mesclado de detaildescription |
| additional_detaildescription | event.idm.read_only_udm.additional.fields | Mesclado em additional.fields |
| additional_recommendedaction.key | additional_recommendedaction.key | Definir como "ação recomendada" |
| recommendedAction | additional_recommendedaction.value.list_value.values | Mesclado de recommendedAction |
| additional_recommendedaction | event.idm.read_only_udm.additional.fields | Mesclado em additional.fields |
| data1 | usersFailing_label | Valor copiado diretamente |
| data.login | login_label | Valor copiado diretamente |
| detail-type | security_result.summary | Valor copiado diretamente |
| detail.id | security_result.rule_id | Valor copiado diretamente |
| detail.title | security_result.rule_name | Valor copiado diretamente |
| detail.severity | security_result.severity | Valor de "detail.severity" se estiver em [CRITICAL,ERROR,HIGH,INFORMATIONAL,LOW,MEDIUM], caso contrário, "MEDIUM" se for moderado |
| detaildescription | value_array.string_value | Valor copiado diretamente |
| detailsdata.key | add_label.value, add_label.key | Valor de detailsdata.value, chave como "loginDetails %{index} details %{detailindex} %{detailsdata.key}" se não for failedSigninDetails ou ips |
| detailsdata.value | add_label.value, add_label.key | |
| detailsdata.key | security_result.detection_fields | Mesclagem de add_label se as condições forem atendidas |
| detailsdata.value | security_result.detection_fields | |
| field_.value | security_result.detection_fields | Mesclado para vários campos aninhados em json_array (msg, ipInfo, asn, coordinates, first_event, second_event, locations) com chaves como "%{index} %{detailindex} %{index1} %{key}" etc., excluindo ipAddress, ip etc. |
| field_.key | security_result.detection_fields | |
| ID | metadata.product_log_id | Valor copiado diretamente |
| login_label | principal.user.email_addresses | Unidas se corresponderem à regex de e-mail |
| msg.ipAddress | principal.ip | Mesclado se não estiver vazio |
| msg.first_event.ip_address | principal.ip | Mesclado se não estiver vazio |
| msg.second_event.ip_address | principal.ip | Mesclado se não estiver vazio |
| msg_travels_first_event_ip_address | principal.ip | Mesclado se não estiver vazio |
| msg_travels_second_event_ip_address | principal.ip | |
| recommendedAction | value_array.string_value | Valor copiado diretamente |
| security_result | event.idm.read_only_udm.security_result | Mesclado em security_result |
| source | source_label.value | Valor copiado diretamente |
| source | source_label.key | Defina como "source" |
| source_label | event.idm.read_only_udm.src.labels | Mesclado em src.labels |
| tempo | @timestamp | Analisado usando o filtro de data com ISO8601, RFC 3339, yyyy-MM-ddTHH:mm:ss.SSSSSSZ |
| usersFailing_label | principal.user.email_addresses | Unidas se corresponderem à regex de e-mail |
| versão | metadata.product_version | Valor copiado diretamente |
| has_principal | event.idm.read_only_udm.metadata.event_type | Definido como "STATUS_UPDATE" se has_principal for verdadeiro, caso contrário, "USER_UNCATEGORIZED" se has_user for verdadeiro, caso contrário, "GENERIC_EVENT" |
| has_user | event.idm.read_only_udm.metadata.event_type | |
| metadata.product_name | metadata.product_name | Definido como "OORT" |
| metadata.vendor_name | metadata.vendor_name | Definido como "OORT" |
detail.published |
event.idm.read_only_udm.metadata.collected_timestamp |
Mapeado do registro de alterações |
detail.login |
event.idm.read_only_udm.principal.user.userid |
Mapeado do registro de alterações |
detail.userTrustLevel |
event.idm.read_only_udm.principal.user.attribute.labels |
Mapeado do registro de alterações |
detail.login |
event.idm.read_only_udm.principal.user.user_display_name |
Mapeado do registro de alterações |
detail.checkTopics |
event.idm.read_only_udm.security_result.category_details |
Mapeado do registro de alterações |
region |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de alterações |
detail.checkId |
event.idm.read_only_udm.security_result.detection_fields |
Mapeado do registro de alterações |
detail.checkScope |
event.idm.read_only_udm.security_result.detection_fields |
Mapeado do registro de alterações |
detail.frameworks |
event.idm.read_only_udm.security_result.detection_fields |
Mapeado do registro de alterações |
detail.explainabilityEventIds |
event.idm.read_only_udm.security_result.detection_fields |
Mapeado do registro de alterações |
data.value |
event.idm.read_only_udm.security_result.detection_fields |
Mapeado do registro de mudanças |
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.