Coletar registros do ManageEngine Exchange Reporter Plus
Este documento explica como configurar o ManageEngine Exchange Reporter Plus para enviar registros ao Google Security Operations usando webhooks.
O ManageEngine Exchange Reporter Plus é uma solução de relatórios, auditoria e monitoramento baseada na Web para ambientes do Microsoft Exchange Server e do Exchange Online. Ele fornece relatórios abrangentes sobre tamanhos de caixa de e-mails, tráfego de e-mail, pastas públicas, registros do Exchange ActiveSync e registros de auditoria para atividades de administrador e mudanças de configuração em implantações híbridas do Exchange.
Antes de começar
Verifique se você atende os seguintes pré-requisitos:
- Uma instância do Google SecOps
- ManageEngine Exchange Reporter Plus instalado e configurado para monitorar o Exchange Server ou o Exchange Online
- Acesso administrativo ao console da Web do ManageEngine Exchange Reporter Plus
- 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,
ManageEngine Exchange Reporter Plus Logs). - Selecione Webhook como o Tipo de origem.
- Selecione ManageEngine Exchange Reporter Plus 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 deste feed
- Delimitador de divisão (opcional): insira
- 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.
Importante: a chave secreta é exibida apenas uma vez e não pode ser recuperada depois. Em caso de perda, será necessário gerar uma nova chave secreta.
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.
O formato do URL é:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateou
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateSalve esse URL para as próximas etapas.
Clique em Concluído.
Criar 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 mostrada 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 ManageEngine Exchange Reporter Plus
Criar o URL do webhook
Combine o URL do endpoint do Chronicle, a chave de API e a chave secreta:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>Exemplo:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
Configurar o encaminhamento de registros no Exchange Reporter Plus
- Faça login no console da Web do ManageEngine Exchange Reporter Plus como administrador.
- Acesse Configurações > Administrador > Configurações gerais > Encaminhador de registros.
- Marque a caixa de seleção Ativar encaminhamento de registros.
- Clique na guia Webhook.
- Informe os seguintes detalhes de configuração:
- Método HTTP: selecione POST.
- URL HTTP: cole o URL completo do webhook criado na etapa anterior (o URL do endpoint do Chronicle com a chave de API e a chave secreta anexadas como parâmetros de consulta).
- Na seção Configurações avançadas:
- Clique em Cabeçalhos de solicitação HTTP.
- Adicione o seguinte cabeçalho:
- Chave:
Content-Type - Valor:
application/json
- Chave:
Clique em Salvar.
Verificar o encaminhamento de registros
- Depois de salvar a configuração, o Exchange Reporter Plus vai começar a encaminhar registros de auditoria para o Google SecOps pelo endpoint do webhook.
- Faça login no console do Google SecOps e verifique se os registros aparecem na interface Pesquisar com o rótulo de ingestão
MANAGE_ENGINE_REPORTER_PLUS.
Configuração do firewall
Verifique se as seguintes regras de firewall estão configuradas.
Saída do servidor do Exchange Reporter Plus:
- Protocolo: HTTPS (TCP 443)
- Destino: endpoint regional do Chronicle (
malachiteingestion-pa.googleapis.comou seu endpoint regional) - Finalidade: entrega de registros ao Google SecOps via webhook.
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 aceitar 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:
- A chave de API e o secret não estão visíveis no URL
- Mais seguro (cabeçalhos não registrados nos 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 URL.
Formato do URL:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>Exemplo:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?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 - Podem ser registradas em registros de acesso do servidor da Web - Menos seguras do que os 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 dos 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 repetição | Automático com espera exponencial |
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| msg.OrganizationId | additional.fields | Rótulos mesclados com a chave "OrganizationId" e o valor de msg.OrganizationId; a chave "MailboxGuid" e o valor de msg.MailboxGuid; a chave "RecordType" e o valor de msg.RecordType |
| msg.MailboxGuid | additional.fields | |
| msg.RecordType | additional.fields | |
| msg.CreationTime | metadata.event_type | Definido como o valor de event_type se não estiver vazio. Caso contrário, "USER_UNCATEGORIZED" se msg.Operation == "Update"; "USER_CREATION" se msg.Operation == "Create" e msg.MailboxOwnerUPN não estiver vazio; "USER_UNCATEGORIZED" se msg.Operation == "Create"; "USER_UNCATEGORIZED" se msg.UserId não estiver vazio; "STATUS_UPDATE" se msg.ClientIP não estiver vazio; "GENERIC_EVENT" |
| msg.Operation | metadata.product_event_type | Valor copiado diretamente |
| msg.Id | metadata.product_log_id | Valor copiado diretamente |
| msg.ClientVersion | metadata.product_version | Valor de msg.ClientVersion se não estiver vazio. Caso contrário, msg.Version convertido em string. |
| msg.Version | metadata.product_version | |
| AffectedItems.0.InternetMessageId | network.email.mail_id | Gsub < |
| AffectedItems | network.email.subject | Analisado como JSON, item extraído.Assunto, mesclado se encontrado |
| msg.ClientInfoString | network.http.user_agent | Valor de msg.ClientInfoString se não estiver vazio, caso contrário, msg.Client |
| msg.Client | network.http.user_agent | |
| msg.ClientProcessName | principal.application | Valor copiado diretamente |
| msg.OriginatingServer | principal.hostname | Extraído usando o padrão grok, se for bem-sucedido. Caso contrário, o valor será copiado diretamente. |
| clientIP | principal.ip | Extraído de msg.ClientIP usando grok |
| clientPort | principal.port | Extraído de msg.ClientIP usando grok, convertido em número inteiro. |
| msg.UserKey | principal.user.attribute.labels | Defina a chave do rótulo como "UserKey", o valor como msg.UserKey e mescle. |
| msg.UserType | principal.user.attribute.roles | Defina roles.name como msg.UserType, mesclado |
| msg.UserId | principal.user.email_addresses | Unidas se msg.UserId corresponder à regex de e-mail |
| msg.UserId | principal.user.userid | Valor copiado diretamente |
| msg.MailboxOwnerSid | principal.user.windows_sid | Valor de msg.MailboxOwnerSid se não estiver vazio. Caso contrário, msg.LogonUserSid |
| msg.LogonUserSid | principal.user.windows_sid | |
| security_result | security_result | Mesclado do hash security_result |
| security_result_action | security_result.action | Combinado de "security_result_action" |
| msg.ResultStatus | security_result.action_details | Valor copiado diretamente |
| msg.RecordType | security_result.detection_fields | Convertido para string, definido como chave "RecordType", valor como msg.RecordType, mesclado |
| msg.OrganizationName | target.administrative_domain | Valor copiado diretamente |
| msg.DestFolder | target.file.full_path | Extraiu fileId e filePath usando grok, barras invertidas gsubs, concatenadas como fileId/filePath |
| host | target.hostname | Valor copiado diretamente |
| msg.Folder | target.process.parent_process.file.full_path | Extraiu parentFileId e parentFilePath usando grok, barras invertidas gsubs, concatenadas como parentFileId/parentFilePath |
| msg.MailboxOwnerUPN | target.user.email_addresses | Unidas se corresponderem à regex de e-mail |
| msg.MailboxOwnerUPN | target.user.user_display_name | Definir se contém espaço |
| msg.MailboxOwnerUPN | target.user.userid | Definido se não for e-mail e não houver espaço |
| metadata.product_name | metadata.product_name | Defina como "Manage Engine". |
| metadata.vendor_name | metadata.vendor_name | Defina como "Gerenciar o Engine Reporter Plus" |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.