收集 Cisco DNA Center 平台日志
本文档介绍了如何使用两种不同的方法将 Cisco DNA Center Platform 日志注入到 Google Security Operations。请选择最符合您的环境和要求的选项。解析器会将 Cisco DNA Center SYSLOG+JSON 日志转换为统一数据模型 (UDM)。它从原始日志消息和 JSON 载荷中提取字段,将这些字段映射到相应的 UDM 属性,并根据严重程度和涉及的实体等事件特征,使用标签和安全情境来丰富数据。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 对 Cisco DNA Center 平台管理控制台的特权访问权限
- 选择您首选的集成方法:
- 对于选项 2:Cisco DNA Center 与 Google SecOps 网络钩子端点之间的网络连接
- 对于选项 1:Windows 2016 或更高版本,或者具有
systemd
的 Linux 主机(用于安装 Bindplane 代理)
选项 1:使用 Bindplane 代理进行系统日志集成
此选项使用从 Cisco DNA Center 到 Bindplane 的 syslog 转发,然后将结构化日志转发到 Google SecOps。
获取 Google SecOps 注入身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载注入身份验证文件。将文件安全地保存在将要安装 Bindplane 的系统上。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 个人资料。
- 复制并保存组织详细信息部分中的客户 ID。
安装 Bindplane 代理
按照以下说明在 Windows 或 Linux 操作系统上安装 Bindplane 代理。
Windows 安装
- 以管理员身份打开命令提示符或 PowerShell。
运行以下命令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 安装
- 打开具有 root 或 sudo 权限的终端。
运行以下命令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
其他安装资源
- 如需了解其他安装选项,请参阅此安装指南。
配置 Bindplane 代理以注入 Syslog 并将其发送到 Google SecOps
访问配置文件:
- 找到
config.yaml
文件。通常,它位于 Linux 上的/etc/bindplane-agent/
目录中,或位于 Windows 上的安装目录中。 - 使用文本编辑器(例如
nano
、vi
或记事本)打开该文件。
- 找到
按如下方式修改
config.yaml
文件:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: YOUR_CUSTOMER_ID endpoint: malachiteingestion-pa.googleapis.com log_type: 'CISCO_DNAC' raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- 根据基础架构的需要替换端口和 IP 地址。
- 将
<YOUR_CUSTOMER_ID>
替换为实际的客户 ID。 - 将
/path/to/ingestion-authentication-file.json
更新为获取 Google SecOps 提取身份验证文件部分中保存身份验证文件的路径。 - 此配置使用 Bindplane 代理 Syslog (UDP) 接收器从 DNA Center 收集结构化 syslog 消息。
重启 Bindplane 代理以应用更改
如需在 Linux 中重启 Bindplane 代理,请运行以下命令:
sudo systemctl restart bindplane-agent
如需在 Windows 中重启 Bindplane 代理,您可以使用服务控制台,也可以输入以下命令:
net stop BindPlaneAgent && net start BindPlaneAgent
在 Cisco DNA Center 平台上配置 Syslog 转发
- 登录 Cisco DNA Center 平台。
- 依次前往系统 > 设置 > 外部服务 > 目的地 > Syslog。
- 点击 + 添加以创建新的 syslog 目标。
- 提供以下配置详细信息:
- 名称:输入一个描述性名称(例如
Google SecOps BindPlane
)。 - 主机:输入 BindPlane 代理 IP 地址。
- 端口:输入
514
(或在 BindPlane 中配置的端口)。 - 协议:根据您的 BindPlane 配置,选择 UDP 或 TCP。
- 设施:选择合适的设施(例如 Local0)。
- 严重程度:选择信息可捕获所有事件级别。
- 名称:输入一个描述性名称(例如
- 点击保存。
选项 2:实时网络钩子集成
此选项使用 Cisco DNA Center 的原生 webhook 功能,可将结构化 JSON 事件直接实时传递给 Google SecOps。
概览
Cisco DNA Center 原生支持 webhook 通知,可用于实时事件传递。此选项提供包含丰富事件上下文的结构化 JSON 载荷,可将事件直接传递给 Google SecOps,而无需使用 Bindplane 作为中介。
配置 Google SecOps Webhook Feed
- 在 Google SecOps 中,依次前往 SIEM 设置 > Feed。
- 点击 + 添加新 Feed。
- 在Feed 名称字段中,输入 Feed 的名称(例如
Cisco DNA Center Webhook
)。 - 选择 Webhook 作为来源类型。
- 选择 Cisco DNA Center Platform 作为日志类型。
- 点击下一步。
- 为以下输入参数指定值:
- 拆分分隔符:可选
\n
。 - 资产命名空间:资产命名空间。
- 注入标签:要应用于此 Feed 中事件的标签。
- 拆分分隔符:可选
- 点击下一步。
- 检查 Feed 配置,然后点击提交。
- 点击生成密钥,生成用于对此 Feed 进行身份验证的密钥。
- 请复制并保存此密钥,因为您将无法再次查看此密钥。
- 点击详细信息标签页。
- 从端点信息字段复制 Feed 端点网址。
- 点击完成。
为 webhook Feed 创建 API 密钥
- 前往 Google Cloud 控制台的凭据页面。
- 点击创建凭据,然后选择 API 密钥。
- 将 API 密钥的访问权限限制为 Google SecOps API。
在 Cisco DNA Center 中配置 Webhook 目标
- 登录 Cisco DNA Center 平台。
- 依次前往系统 > 设置 > 外部服务 > 目的地 > Webhook。
- 点击 + 添加以创建新的 Webhook 目标。
- 提供以下配置详细信息:
- 名称:输入一个描述性名称(例如
Google SecOps Webhook
)。 - 说明:输入 Webhook 的说明。
- 网址:输入上一步中的 Google SecOps webhook 端点网址。
- 方法:选择 POST。
- 信任证书:如果使用自签名证书,请选择否。
- 标头:添加必需的标头:
- Content-Type:
application/json
- X-goog-api-key:您的 Google Cloud API 密钥
- X-Webhook-Access-Key:您的 Google SecOps Feed 密钥
- Content-Type:
- 名称:输入一个描述性名称(例如
- 点击测试连接以验证连接。
- 点击保存。
订阅网络钩子通知的事件
- 在 Cisco DNA Center 中,依次前往 Platform > Developer Toolkit > Event Notifications。
- 点击 + 订阅。
- 提供以下配置详细信息:
- 订阅名称:输入一个描述性名称(例如
Google SecOps Events
)。 - 连接器类型:选择 REST 端点。
- 目标位置:选择在上一步中创建的网络钩子目标位置。
- 订阅名称:输入一个描述性名称(例如
- 选择要监控的事件类型:
- 网络事件:设备无法访问、接口关闭、配置更改。
- 安全事件:安全政策违规、身份验证失败。
- 系统事件:平台事件、软件更新、维护。
- 保证事件:性能下降、连接问题。
- 根据需要配置事件过滤条件:
-
<x0A>
- 严重程度:选择最低严重程度级别(例如 P1、P2)。
- 网域:按特定网域(例如连接、性能)过滤。
- 点击订阅。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
类别 | security_result.severity_details | 直接从原始日志中的 category 字段映射。 |
ciscoDnaEventLink | target.url | 直接从原始日志中的 ciscoDnaEventLink 字段映射。 |
date_time | metadata.event_timestamp | 使用 Grok 模式从原始日志消息中提取,并转换为时间戳格式。 |
details.Assurance_Issue_Category | security_result.about.resource.attribute.labels[].value | 直接从原始日志中的 details.Assurance_Issue_Category 字段映射。此标签的键为“Assurance_Issue_Category”。 |
details.Assurance_Issue_Details | security_result.summary | 直接从原始日志中的 details.Assurance_Issue_Details 字段映射。 |
details.Assurance_Issue_Name | security_result.about.resource.attribute.labels[].value | 直接从原始日志中的 details.Assurance_Issue_Name 字段映射。相应标签的键为“Assurance_Issue_Name”。 |
details.Assurance_Issue_Priority | security_result.about.resource.attribute.labels[].value | 直接从原始日志中的 details.Assurance_Issue_Priority 字段映射。相应标签的键为“Assurance_Issue_Priority”。 |
details.Assurance_Issue_Status | security_result.about.resource.attribute.labels[].value | 直接从原始日志中的 details.Assurance_Issue_Status 字段映射。相应标签的键为“Assurance_Issue_Status”。 |
details.Device | target.ip 或 target.hostname | 从原始日志中的 details.Device 字段映射而来。如果值为 IP 地址,则映射到 target.ip ,否则映射到 target.hostname 。 |
dnacIp | target.ip | 如果原始日志中的 dnacIp 字段是 IP 地址,则直接从该字段映射。 |
域名 | additional.fields[].value.string_value | 直接从原始日志中的 domain 字段映射。此字段的键为“domain”。 |
eventId | metadata.product_event_type | 直接从原始日志中的 eventId 字段映射。 |
instanceId | target.resource.product_object_id | 直接从原始日志中的 instanceId 字段映射。 |
name | target.resource.attribute.labels[].value | 直接从原始日志中的 name 字段映射。相应标签的键为“name”。 |
命名空间 | target.namespace | 直接从原始日志中的 namespace 字段映射。 |
network.deviceId | target.asset.asset_id | 直接从原始日志中的 network.deviceId 字段映射,并以“deviceId: ”为前缀。 |
note | additional.fields[].value.string_value | 直接从原始日志中的 note 字段映射。此字段的键为“note”。 |
metadata.event_type | 根据 has_principal 、has_target 和 userId 字段的存在情况和值来确定。可能的值:NETWORK_CONNECTION、USER_UNCATEGORIZED、STATUS_UPDATE、GENERIC_EVENT。 |
|
is_alert | 如果严重程度为 0 或 1,则返回 True;否则,返回 False。 | |
is_significant | 如果严重程度为 0 或 1,则返回 True;否则,返回 False。 | |
和程度上减少 | 用于确定 security_result.severity 、is_alert 和 is_significant 的值。 |
|
来源 | target.resource.attribute.labels[].value | 直接从原始日志中的 source 字段映射。相应标签的键为“source”。 |
src_ip | principal.ip | 使用 Grok 模式从原始日志消息中提取。 |
subDomain | additional.fields[].value.string_value | 直接从原始日志中的 subDomain 字段映射。相应字段的键为“subDomain”。 |
tntId | target.resource.attribute.labels[].value | 直接从原始日志中的 tntId 字段映射。相应标签的键为“tntId”。 |
类型 | target.resource.attribute.labels[].value | 直接从原始日志中的 type 字段映射。相应标签的键为“type”。 |
userId | target.user.userid | 直接从原始日志中的 userId 字段映射。 |
版本 | metadata.product_version | 直接从原始日志中的 version 字段映射。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。