收集 ManageEngine Exchange Reporter Plus 日志

支持:

本文档介绍了如何配置 ManageEngine Exchange Reporter Plus 以使用 Webhook 将日志推送到 Google Security Operations。

ManageEngine Exchange Reporter Plus 是一款基于 Web 的报告、审核和监控解决方案,适用于 Microsoft Exchange Server 和 Exchange Online 环境。它提供有关邮箱大小、电子邮件流量、公用文件夹、Exchange ActiveSync 日志以及混合 Exchange 部署中管理员活动和配置更改的审核日志的全面报告。

准备工作

请确保满足以下前提条件:

  • Google SecOps 实例
  • ManageEngine Exchange Reporter Plus 已安装并配置为监控 Exchange Server 或 Exchange Online
  • 对 ManageEngine Exchange Reporter Plus Web 控制台的管理员访问权限
  • 访问 Google Cloud Console(用于创建 API 密钥)

在 Google SecOps 中创建 Webhook Feed

创建 Feed

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. 在下一页上,点击配置单个 Feed
  4. Feed 名称 字段中,输入 Feed 的名称(例如 ManageEngine Exchange Reporter Plus Logs)。
  5. 选择 Webhook 作为来源类型
  6. 选择 ManageEngine Exchange Reporter Plus 作为日志类型
  7. 点击下一步
  8. 为以下输入参数指定值:
    • 拆分定界符 (可选):输入 \n 以拆分多行事件。
    • 资产命名空间资产命名空间
    • 提取标签:要应用于此 Feed 中事件的标签
  9. 点击下一步
  10. 最终确定 屏幕中检查新 Feed 配置,然后点击提交

生成并保存密钥

创建 Feed 后,您必须生成一个密钥以进行身份验证:

  1. 在 Feed 详情页面上,点击生成密钥
  2. 对话框会显示密钥。
  3. 复制并妥善保存 密钥。

重要提示:密钥只会显示一次,之后无法检索。如果您丢失了密钥,则必须生成新的密钥。

获取 Feed 端点网址

  1. 前往 Feed 的详情 标签页。
  2. 端点信息 部分,复制 Feed 端点网址
  3. 网址格式为:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. 保存此网址,以在后续步骤中使用。

  5. 点击完成

创建 Google Cloud API 密钥

Chronicle 需要 API 密钥进行身份验证。在 Google Cloud Console 中创建受限 API 密钥。

创建 API 密钥

  1. 前往 Google Cloud 控制台的凭据页面
  2. 选择您的项目(与您的 Chronicle 实例关联的项目)。
  3. 点击创建凭据 > API 密钥
  4. 系统会创建 API 密钥,并在对话框中显示。
  5. 点击修改 API 密钥 以限制密钥。

限制 API 密钥

  1. API 密钥 设置页面中:
    • 名称:输入描述性名称(例如 Chronicle Webhook API Key
  2. API 限制 下:
    1. 选择限制密钥
    2. 选择 API 下拉列表中,搜索并选择 Google SecOps API (或 Chronicle API )。
  3. 点击保存
  4. 从页面顶部的 API 密钥 字段中复制 API 密钥值。
  5. 妥善保存 API 密钥。

配置 ManageEngine Exchange Reporter Plus Webhook

构建网络钩子网址

  • 将 Chronicle 端点网址、API 密钥和密钥组合在一起:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • 示例

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
    

在 Exchange Reporter Plus 中配置日志转发

  1. 以管理员身份登录 ManageEngine Exchange Reporter Plus Web 控制台。
  2. 依次前往设置 > 管理员 > 常规设置 > 日志转发器
  3. 选中启用日志转发 复选框。
  4. 点击 Webhook 标签页。
  5. 提供以下配置详细信息:
    • HTTP 方法:选择 POST
    • HTTP 网址:粘贴在上一步中构建的完整网络钩子网址(Chronicle 端点网址,其中 API 密钥和 Secret 作为查询参数附加)。
  6. 高级设置 部分中:
    1. 点击 HTTP 请求标头
    2. 添加以下标头:
      • : Content-Type
      • application/json
  7. 点击保存

验证日志转发

  1. 保存配置后,Exchange Reporter Plus 将开始通过 Webhook 端点将审核日志转发到 Google SecOps。
  2. 登录 Google SecOps 控制台,并验证日志是否显示在搜索 界面中,且带有提取标签 MANAGE_ENGINE_REPORTER_PLUS

防火墙配置

确保已配置以下防火墙规则。

从 Exchange Reporter Plus 服务器出站

  • 协议:HTTPS (TCP 443)
  • 目标:Chronicle 区域端点(malachiteingestion-pa.googleapis.com 或您的区域端点)
  • 用途:通过 Webhook 将日志传送到 Google SecOps

身份验证方法参考

Chronicle Webhook Feed 支持多种身份验证方法。选择您的供应商支持的方法。

如果您的供应商支持自定义 HTTP 标头,请使用此方法以提高安全性。

  • 请求格式

    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"
    }
    

优点

  • API 密钥和密钥在网址中不可见
  • 更安全(标头不会记录在 Web 服务器访问日志中)
  • 如果供应商支持,则首选此方法

方法 2:查询参数

如果您的供应商不支持自定义标头,请将凭据附加到网址。

  • 网址格式

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • 示例

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
    
  • 请求格式

    POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1
    Content-Type: application/json
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

缺点: - 凭据在网址中可见 - 可能会记录在 Web 服务器访问日志中 - 安全性不如标头

方法 3:混合(网址 + 标头)

某些配置在网址中使用 API 密钥,在标头中使用密钥。

  • 请求格式

    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"
    }
    

身份验证标头名称

Chronicle 接受以下标头名称进行身份验证:

对于 API 密钥

  • x-goog-chronicle-auth(推荐)
  • X-Goog-Chronicle-Auth(不区分大小写)

对于密钥

  • x-chronicle-auth(推荐)
  • X-Chronicle-Auth(不区分大小写)

Webhook 限制和最佳实践

请求限制

限制
最大请求大小 4 MB
最大 QPS(每秒查询次数) 15000
请求超时 30 秒
重试行为 自动重试,使用指数退避算法

UDM 映射表

日志字段 UDM 映射 逻辑
msg.OrganizationId additional.fields 合并标签,键为“OrganizationId”,值为 msg.OrganizationId;键为“MailboxGuid”,值为 msg.MailboxGuid;键为“RecordType”,值为 msg.RecordType
msg.MailboxGuid additional.fields
msg.RecordType additional.fields
msg.CreationTime metadata.event_type 如果 event_type 不为空,则设置为 event_type 中的值;否则,如果 msg.Operation == "Update",则设置为“USER_UNCATEGORIZED”;如果 msg.Operation == "Create" 且 msg.MailboxOwnerUPN 不为空,则设置为“USER_CREATION”;如果 msg.Operation == "Create",则设置为“USER_UNCATEGORIZED”;如果 msg.UserId 不为空,则设置为“USER_UNCATEGORIZED”;如果 msg.ClientIP 不为空,则设置为“STATUS_UPDATE”;否则设置为“GENERIC_EVENT”
msg.Operation metadata.product_event_type 直接复制值
msg.Id metadata.product_log_id 直接复制值
msg.ClientVersion metadata.product_version 如果 msg.ClientVersion 不为空,则使用 msg.ClientVersion 中的值;否则,将 msg.Version 转换为字符串
msg.Version metadata.product_version
AffectedItems.0.InternetMessageId network.email.mail_id Gsub <
AffectedItems network.email.subject 解析为 JSON,提取 item.Subject,如果找到则合并
msg.ClientInfoString network.http.user_agent 如果 msg.ClientInfoString 不为空,则使用 msg.ClientInfoString 中的值;否则使用 msg.Client
msg.Client network.http.user_agent
msg.ClientProcessName principal.application 直接复制值
msg.OriginatingServer principal.hostname 使用 grok 模式提取,如果成功,则直接复制值
clientIP principal.ip 使用 grok 从 msg.ClientIP 中提取
clientPort principal.port 使用 grok 从 msg.ClientIP 中提取,转换为整数
msg.UserKey principal.user.attribute.labels 将标签键设置为“UserKey”,将值设置为 msg.UserKey,合并
msg.UserType principal.user.attribute.roles 将 roles.name 设置为 msg.UserType,合并
msg.UserId principal.user.email_addresses 如果 msg.UserId 与电子邮件正则表达式匹配,则合并
msg.UserId principal.user.userid 直接复制值
msg.MailboxOwnerSid principal.user.windows_sid 如果 msg.MailboxOwnerSid 不为空,则使用 msg.MailboxOwnerSid 中的值;否则使用 msg.LogonUserSid
msg.LogonUserSid principal.user.windows_sid
security_result security_result 从 security_result 哈希合并
security_result_action security_result.action 从 security_result_action 合并
msg.ResultStatus security_result.action_details 直接复制值
msg.RecordType security_result.detection_fields 转换为字符串,将键设置为“RecordType”,将值设置为 msg.RecordType,合并
msg.OrganizationName target.administrative_domain 直接复制值
msg.DestFolder target.file.full_path 使用 grok 提取 fileId 和 filePath,替换反斜杠,连接为 fileId/filePath
host target.hostname 直接复制值
msg.Folder target.process.parent_process.file.full_path 使用 grok 提取 parentFileId 和 parentFilePath,替换反斜杠,连接为 parentFileId/parentFilePath
msg.MailboxOwnerUPN target.user.email_addresses 如果与电子邮件正则表达式匹配,则合并
msg.MailboxOwnerUPN target.user.user_display_name 如果包含空格,则设置
msg.MailboxOwnerUPN target.user.userid 如果不是电子邮件且不包含空格,则设置
metadata.product_name metadata.product_name 设置为“Manage Engine”
metadata.vendor_name metadata.vendor_name 设置为“Manage Engine Reporter Plus”

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。