收集 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 后,您必须生成密钥以进行身份验证:

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

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

获取 Feed 端点网址

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

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import
    

    其中,{region} 是 Google SecOps 实例的区域(例如 us、europe 或 asia-southeast1),{parent} 是资源路径,格式为 projects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE>。

  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://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?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 区域端点 (<region>-chronicle.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://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?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 上限(每秒查询次数) 15,000
请求超时 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 专业人士的解答。