收集 Cisco Identity Intelligence 日志

支持的平台:

本文档介绍了如何配置 Cisco Identity Intelligence,以使用 Webhook 将日志推送到 Google Security Operations。

Cisco Identity Intelligence(原名 Oort Security)是一个身份威胁检测和响应平台,可跨身份提供方持续监控用户行为、身份验证模式、设备使用情况和访问权限。它通过分析用户活动、失败的安全检查、信任分数和风险行为来检测基于身份的威胁、错误配置和违规行为。

准备工作

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

  • Google SecOps 实例
  • 对 Cisco Identity Intelligence 租户的特权访问权限
  • 在 Cisco Identity Intelligence 中管理集成的管理权限
  • 对 Google Cloud Console 的访问权限(用于创建 API 密钥)

在 Google SecOps 中创建 Webhook Feed

创建 Feed

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. 在下一页上,点击配置单个 Feed
  4. Feed 名称字段中,输入 Feed 的名称(例如 Cisco Identity Intelligence Events)。
  5. 选择 Webhook 作为来源类型
  6. 选择 Cisco Identity Intelligence 作为日志类型
  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 密钥。

配置 Cisco Identity Intelligence Webhook

构建网络钩子网址

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

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

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

替换以下内容:

  • <ENDPOINT_URL>:之前复制的 Chronicle Feed 端点网址
  • <API_KEY>:之前创建的 Google Cloud API 密钥
  • <SECRET_KEY>:之前生成的 Chronicle Webhook 密钥

在 Cisco Identity Intelligence 中创建 webhook 通知目标

  1. 登录 Cisco Identity Intelligence
  2. 前往集成
  3. 点击添加集成
  4. 向下滚动到 Webhook 部分。
  5. 点击 Add Webhook Target
  6. 提供以下配置详细信息:
    • 名称:输入一个描述性名称(例如 Chronicle SIEM Integration)。
    • 网络钩子网址:粘贴包含 API 密钥和 Secret 的完整端点网址(如上所示)。
    • 授权类型:选择 API 密钥
    • API Key Name:输入密钥名称(例如 x-goog-chronicle-auth)。
    • API Key Value:输入 Google Cloud API 密钥。
  7. 展开调用 HTTP 参数部分。
  8. 添加以下类型为 Header 的参数:
    • Content-Typeapplication/json
    • Acceptapplication/json
  9. 将此目标用于部分中,选择检查失败,以便在身份检查检测到失败结果时收到通知。
  10. 点击保存

测试 Webhook 连接

  1. 集成页面上,找到您创建的 Webhook 通知目标。
  2. 点击相应行右侧的三点状菜单
  3. 选择测试连接
  4. 验证测试消息是否已成功传送。

为身份检查启用 webhook

创建 Webhook 通知目标后,您必须针对要监控的特定身份检查启用该目标。

  1. 前往 Cisco Identity Intelligence 中所需的检查详情页面。
  2. 展开页面右上角的下拉菜单。
  3. 选中您创建的 Webhook 通知目标对应的复选框。
  4. 针对要发送给 Google SecOps 的每项检查重复执行上述步骤。

如需了解详情,请参阅 Cisco Identity Intelligence webhook 文档

身份验证方法参考

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 映射 逻辑
账号 account_label.value 直接复制值
账号 account_label.key 设置为“账号”
account_label security_result.detection_fields 已合并到 detection_fields 中
additional_detaildescription.key additional_detaildescription.key 设置为“详细说明”
detaildescription additional_detaildescription.value.list_value.values 从 detaildescription 合并
additional_detaildescription event.idm.read_only_udm.additional.fields 已合并到 additional.fields 中
additional_recommendedaction.key additional_recommendedaction.key 设置为“推荐措施”
recommendedAction additional_recommendedaction.value.list_value.values 从 recommendedAction 合并
additional_recommendedaction event.idm.read_only_udm.additional.fields 已合并到 additional.fields 中
data1 usersFailing_label 直接复制值
data.login login_label 直接复制值
detail-type security_result.summary 直接复制值
detail.id security_result.rule_id 直接复制值
detail.title security_result.rule_name 直接复制值
detail.severity security_result.severity 如果 detail.severity 中的值为 [CRITICAL,ERROR,HIGH,INFORMATIONAL,LOW,MEDIUM],则使用该值;如果为 moderate,则使用 MEDIUM
detaildescription value_array.string_value 直接复制值
detailsdata.key add_label.value、add_label.key 如果不是 failedSigninDetails 或 ips,则值为 detailsdata.value,键为“loginDetails %{index} details %{detailindex} %{detailsdata.key}”
detailsdata.value add_label.value、add_label.key
detailsdata.key security_result.detection_fields 如果满足条件,则合并了 add_label
detailsdata.value security_result.detection_fields
field_.value security_result.detection_fields 合并了 json_array(msg、ipInfo、asn、coordinates、first_event、second_event、locations)中具有“%{index} %{detailindex} %{index1} %{key}”等键的各种嵌套字段,但不包括 ipAddress、ip 等。
field_.key security_result.detection_fields
id metadata.product_log_id 直接复制值
login_label principal.user.email_addresses 如果匹配电子邮件正则表达式,则合并
msg.ipAddress principal.ip 如果不为空,则合并
msg.first_event.ip_address principal.ip 如果不为空,则合并
msg.second_event.ip_address principal.ip 如果不为空,则合并
msg_travels_first_event_ip_address principal.ip 如果不为空,则合并
msg_travels_second_event_ip_address principal.ip
recommendedAction value_array.string_value 直接复制值
security_result event.idm.read_only_udm.security_result 已合并到 security_result 中
来源 source_label.value 直接复制值
来源 source_label.key 设置为“source”
source_label event.idm.read_only_udm.src.labels 已合并到 src.labels 中
时间 @timestamp 使用日期过滤条件进行解析,格式为 ISO8601、RFC 3339、yyyy-MM-ddTHH:mm:ss.SSSSSSZ
usersFailing_label principal.user.email_addresses 如果匹配电子邮件正则表达式,则合并
版本 metadata.product_version 直接复制值
has_principal event.idm.read_only_udm.metadata.event_type 如果 has_principal 为 true,则设置为“STATUS_UPDATE”;否则,如果 has_user 为 true,则设置为“USER_UNCATEGORIZED”;否则,设置为“GENERIC_EVENT”
has_user event.idm.read_only_udm.metadata.event_type
metadata.product_name metadata.product_name 设置为“OORT”
metadata.vendor_name metadata.vendor_name 设置为“OORT”
detail.published event.idm.read_only_udm.metadata.collected_timestamp 从变更日志映射
detail.login event.idm.read_only_udm.principal.user.userid 从变更日志映射
detail.userTrustLevel event.idm.read_only_udm.principal.user.attribute.labels 从变更日志映射
detail.login event.idm.read_only_udm.principal.user.user_display_name 从变更日志映射
detail.checkTopics event.idm.read_only_udm.security_result.category_details 从变更日志映射
region event.idm.read_only_udm.additional.fields 从变更日志映射
detail.checkId event.idm.read_only_udm.security_result.detection_fields 从变更日志映射
detail.checkScope event.idm.read_only_udm.security_result.detection_fields 从变更日志映射
detail.frameworks event.idm.read_only_udm.security_result.detection_fields 从变更日志映射
detail.explainabilityEventIds event.idm.read_only_udm.security_result.detection_fields 从变更日志映射
data.value event.idm.read_only_udm.security_result.detection_fields 从变更日志映射

更新日志

查看相应解析器的更改日志

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