收集 Vectra 提醒日志
本文档介绍了如何使用 Vectra SIEM 连接器和 Bindplane 将 Vectra 提醒日志注入到 Google Security Operations。
Vectra AI 是一种网络检测和响应平台,可针对云、数据中心和 IoT 环境中的威胁检测生成安全提醒。该平台使用 AI 驱动的行为分析来实时识别隐藏的网络攻击。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Windows Server 2016 或更高版本,或者具有
systemd的 Linux 主机 - Bindplane 代理与 Vectra AI 平台之间的网络连接
- 如果通过代理运行,请确保防火墙端口根据 Bindplane 代理要求处于开放状态
- 具有管理员权限的 Vectra AI 平台特权访问权限
获取 Bindplane 代理的 Google SecOps 凭据
如需向 Google SecOps 验证 Bindplane 代理,请选择以下方法之一:
- 新部署:使用 Chronicle API(选项 1)。
- 旧版部署:继续使用数据注入身份验证文件(方法 2),直到 Ingestion API 于 2027 年 7 月 20 日停用。
方法 1:为 Chronicle API 创建服务账号(推荐)
- 登录 Google Cloud 控制台,然后选择与您的 Google SecOps 实例关联的 Google Cloud 项目。
- 前往 IAM 和管理 > 服务账号。
- 点击创建服务账号。
- 提供以下配置详细信息:
- 服务账号名称:输入账号的名称(例如
bindplane-ingest)。 - 服务账号说明:输入说明(例如
Bindplane agent log ingestion)。
- 服务账号名称:输入账号的名称(例如
- 点击创建并继续。
- 在向此服务账号授予对项目的访问权限部分,点击选择角色,然后选择 Chronicle Editor。
- 点击继续,然后点击完成。
- 点击您创建的服务账号,然后前往密钥标签页。
- 依次点击添加密钥 > 创建新密钥。
- 选择 JSON,然后点击创建。密钥文件会下载到您的计算机上。
- 将密钥文件另存为 Bindplane 收集器目录(Linux 上的
/opt/observiq-otel-collector/ingestion-auth.json或 Windows 上的C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json)中的ingestion-auth.json,或更新config.yaml中的creds_file_path以匹配您保存该文件的路径。 - 前往 IAM 和管理 > 设置,然后复制项目编号。您需要此信息才能配置导出器。
方法 2:下载数据注入身份验证文件(旧版)
- 登录 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等待安装完成。
运行以下命令,验证安装是否成功:
sc query observiq-otel-collector
该服务应显示为正在运行。
Linux 安装
- 打开具有 root 或 sudo 权限的终端。
运行以下命令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh等待安装完成。
运行以下命令,验证安装是否成功:
sudo systemctl status observiq-otel-collector
该服务应显示为有效(正在运行)。
其他安装资源
如需了解其他安装选项和问题排查,请参阅 Bindplane 代理安装指南。
配置 Bindplane 代理以注入 syslog 并将其发送到 Google SecOps
找到配置文件
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
修改配置文件
将
config.yaml的全部内容替换为以下配置:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/vectra_alerts: protocol: https # Region of your instance, for example us, europe, asia-southeast1 location: <LOCATION> # Project number of the Google Cloud project linked to the instance project: '<PROJECT_NUMBER>' compression: gzip creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json' customer_id: '<customer_id>' endpoint: chronicle.googleapis.com log_type: VECTRA_ALERTS raw_log_field: body service: pipelines: logs/vectra_alerts_to_chronicle: receivers: - udplog exporters: - chronicle/vectra_alerts
配置参数
替换以下占位符:
接收器配置:
listen_address:要监听的 IP 地址和端口:0.0.0.0在所有接口上监听(推荐)- 端口
514是标准 syslog 端口(在 Linux 上需要 root 权限;对于非 root 用户,请使用1514)
导出器配置:
creds_file_path:服务账号 JSON 密钥文件的完整路径(选项 1):- Linux:
/opt/observiq-otel-collector/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id:从 Google SecOps 控制台复制的客户 IDlocation:将<LOCATION>替换为 Google SecOps 实例所在的区域(例如us、europe或asia-southeast1)。导出工具会在此值前面加上chronicle.googleapis.com。如需查看完整列表,请参阅区域级端点。project:将<PROJECT_NUMBER>替换为“IAM 和管理”>“设置”中的项目编号。endpoint:保持设置为chronicle.googleapis.com。
旧版提取 API 导出工具
如果您使用选项 2 中的数据注入身份验证文件,请将
exporters代码块替换为以下内容。将creds_file_path设置为提取身份验证文件的路径,如果您的实例位于美国境外,请将malachiteingestion-pa.googleapis.com替换为您的区域端点(例如europe-malachiteingestion-pa.googleapis.com)。exporters: chronicle/vectra_alerts: compression: gzip creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: VECTRA_ALERTS raw_log_field: body
保存配置文件
- 修改后,保存文件:
- Linux:依次按
Ctrl+O、Enter和Ctrl+X - Windows:依次点击文件 > 保存
- Linux:依次按
重启 Bindplane 代理以应用更改
如需在 Linux 中重启 Bindplane 代理,请执行以下操作:
运行以下命令:
sudo systemctl restart observiq-otel-collector验证服务是否正在运行:
sudo systemctl status observiq-otel-collector检查日志中是否存在错误:
sudo journalctl -u observiq-otel-collector -f
如需在 Windows 中重启 Bindplane 代理,请执行以下操作:
请从下列选项中选择一项:
以管理员身份运行命令提示符或 PowerShell:
net stop observiq-otel-collector && net start observiq-otel-collector服务控制台:
- 按
Win+R,输入services.msc,然后按 Enter 键。 - 找到 observIQ OpenTelemetry 收集器。
- 右键点击,然后选择重新启动。
- 按
验证服务是否正在运行:
sc query observiq-otel-collector检查日志中的错误:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
配置 Vectra Alerts syslog 转发
部署 Vectra SIEM 连接器,以将提醒数据转发到 Bindplane 代理。
- 部署 Vectra SIEM Connector(以 Docker 容器或独立应用的形式提供)。
- 使用 Vectra AI Platform 网址(例如
https://your-tenant.vectra.ai)和 API 凭证配置连接器。 - 使用以下参数将输出目标位置设置为 syslog:
- Syslog 服务器:输入 Bindplane 代理主机的 IP 地址。
- 端口:输入
514(或在 Bindplane 代理中配置的端口)。 - 协议:选择 UDP(与 Bindplane 接收器配置相匹配)。
- 选择要转发的事件类别:
- 检测
- 审核
- 健康事件
启动连接器,并通过检查 Bindplane 代理日志来验证是否正在转发提醒日志。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
| assigned_date | additional.fields.assigned_date_label | 设置标签,键为“Assigned Date”,值为 assigned_date |
| assigned_to | additional.fields.assigned_to_label | 设置键为“Assigned To”且值来自 assigned_to 的标签 |
| c_score | additional.fields.c_score_label | 设置键为“c_score”且值来自 c_score 的标签 |
| 类别 | security_result.category_details | 直接复制的值 |
| 确定性 | additional.fields.certainty_label | 设置键为“确定性”且值来自确定性的标签 |
| created_timestamp | metadata.event_timestamp | 已使用 yyyy-MM-ddTHH:mm:ssZ 格式进行转换 |
| custom_detection | additional.fields.custom_detection_label | 设置键为“Custom Detection”且值为 custom_detection 的标签 |
| data_source.connection_id | security_result.detection_fields.connection_id_label | 将标签的键设置为“Connection ID”,值设置为 data_source.connection_id |
| data_source.connection_name | security_result.detection_fields.connection_name_label | 设置标签,键为“连接名称”,值为 data_source.connection_name |
| data_source.type | security_result.detection_fields.data_source_type_label | 设置键为“Data Source Type”且值来自 data_source.type 的标签 |
| 说明 | metadata.description | 直接复制值 |
| 检测 | additional.fields.detection_label | 设置标签,键为“Detection”,值为检测结果 |
| detection_category | additional.fields.detection_category_label | 设置键为“检测类别”且值来自 detection_category 的标签 |
| detection_type | additional.fields.detection_type_label | 设置标签,键为“Detection Type”,值为 detection_type |
| detection_url | principal.url | 直接复制的值 |
| filtered_by_ai | additional.fields.filtered_by_ai_label | 设置键为“Filtered By AI”且值来自 filtered_by_ai 的标签 |
| filtered_by_rule | additional.fields.filtered_by_rule_label | 设置键为“Filtered By Rule”且值为 filtered_by_rule 的标签 |
| filtered_by_user | additional.fields.filtered_by_user_label | 设置键为“Filtered By User”且值为 filtered_by_user 的标签 |
| first_timestamp | additional.fields.first_timestamp_label | 设置键为“First Timestamp”且值为 first_timestamp 的标签 |
| gd_first_timestamp | security_result.detection_fields.gd_first_timestamp_label | 设置标签,键为“first_timestamp”,值为 gd_first_timestamp |
| gd_grouping_field | security_result.detection_fields.gd_grouping_field_label | 设置键为“grouping_field”且值来自 gd_grouping_field 的标签 |
| gd_last_timestamp | security_result.detection_fields.gd_last_timestamp_label | 设置键为“group_details_last_timestamp”且值为 gd_last_timestamp 的标签 |
| gd_uuid | security_result.detection_fields.gd_uuid_label | 设置键为“gd_uuid”且值为 gd_uuid 的标签 |
| grp_description | security_result.detection_fields.grp_description_label | 设置键为“grp_description”且值来自 grp_description 的标签 |
| grp_id | security_result.detection_fields.grp_id_label | 设置键为“grp_id”且值为 grp_id 的标签 |
| grp_last_modified | security_result.detection_fields.grp_last_modified_label | 设置键为“grp_last_modified”且值来自 grp_last_modified 的标签 |
| grp_last_modified_by | security_result.detection_fields.grp_last_modified_by_label | 设置键为“grp_last_modified_by”且值为 grp_last_modified_by 的标签 |
| grp_name | security_result.detection_fields.grp_name_label | 设置键为“grp_name”且值来自 grp_name 的标签 |
| grp_type | security_result.detection_fields.grp_type_label | 设置键为“grp_type”且值来自 grp_type 的标签 |
| id | metadata.product_log_id | 直接复制的值 |
| 中介 | 中介 | 直接复制的值 |
| is_custom_model | additional.fields.is_custom_model_label | 设置键为“is_custom_model”且值为 is_custom_model 的标签 |
| is_marked_custom | additional.fields.is_marked_custom_label | 设置标签,其键为“is_marked_custom”,值为 is_marked_custom 的值 |
| is_targeting_key_asset | additional.fields.is_targeting_key_asset_label | 设置标签,其键为“is_targeting_key_asset”,值为 is_targeting_key_asset 的值 |
| is_triaged | additional.fields.is_triaged_label | 设置标签,键为“is_triaged”,值为 is_triaged 的值 |
| last_timestamp | additional.fields.last_timestamp_label | 设置键为“last_timestamp”且值来自 last_timestamp 的标签 |
| note | additional.fields.note_label | 设置键为“note”且值为 note 的标签 |
| note_modified_by | additional.fields.note_modified_by_label | 设置标签,键为“note_modified_by”,值为 note_modified_by 的值 |
| note_modified_timestamp | additional.fields.note_modified_timestamp_label | 设置键为“note_modified_timestamp”的标签,并使用 note_modified_timestamp 中的值作为标签值 |
| notes | additional.fields.notes_label | 设置标签,键为“notes”,值为备注内容 |
| 主体 | 主体 | 直接复制的值 |
| security_result | security_result | 直接复制的值 |
| 传感器 | additional.fields.sensor_label | 设置键为“sensor”且值为传感器值的标签 |
| sensor_name | additional.fields.sensor_name_label | 设置键为“sensor_name”且值为 sensor_name 的标签 |
| src | src | 直接复制值 |
| src_account | additional.fields.src_account_label | 设置键为“src_account”且值为 src_account 的标签 |
| src_host.certainty | additional.fields.src_certainty_label | 设置键为“src_host_certainty”且值来自 src_host.certainty 的标签 |
| src_host.id | principal.user.userid | 直接复制的值 |
| gd_src_host_ip、src_ip、src_host.ip | principal.ip | 合并自 gd_src_host_ip、src_ip、src_host.ip;最后一次合并胜出 |
| src_ip, src_host.ip | principal.asset.ip | 从 src_ip、src_host.ip 合并;最后一次合并获胜 |
| src_host.is_key_asset | additional.fields.src_host_is_key_asset_label | 设置键为“src_host_is_key_asset”且值来自 src_host.is_key_asset 的标签 |
| src_host.name | principal.hostname | 直接复制值 |
| src_host.threat | additional.fields.src_host_threat_label | 设置键为“src_host_threat”且值来自 src_host.threat 的标签 |
| src_host.url | src.url | 直接复制的值 |
| src_host_group_description | security_result.detection_fields.src_host_group_description_label | 设置键为“src_host_group_description”且值来自 src_host_group_description 的标签 |
| src_host_group_id | security_result.detection_fields.src_host_group_id_label | 设置键为“src_host_group_id”且值来自 src_host_group_id 的标签 |
| src_host_group_last_modified | security_result.detection_fields.src_host_group_last_modified_label | 设置键为“src_host_group_last_modified”的标签,并使用 src_host_group_last_modified 中的值 |
| src_host_group_last_modified_by | security_result.detection_fields.src_host_group_last_modified_by_label | 设置键为“src_host_group_last_modified_by”且值来自 src_host_group_last_modified_by 的标签 |
| src_host_group_name | security_result.detection_fields.src_host_group_name_label | 设置键为“src_host_group_name”且值来自 src_host_group_name 的标签 |
| src_host_group_type | security_result.detection_fields.src_host_group_type_label | 设置键为“src_host_group_type”且值为 src_host_group_type 的标签 |
| state | security_result.detection_fields.state_label | 设置键为“state”且值来自 state 的标签 |
| summary.num_attempts | additional.fields.num_attempts_label | 设置键为“num_attempts”且值为 summary.num_attempts 的标签 |
| 目标 | 目标 | 直接复制值 |
| dst_host_ip, dst_ip1 | target.ip | 从 dst_host_ip、dst_ip1 合并;最后一次合并生效 |
| 标签 | additional.fields.tags_label | 设置键为“tags”且值来自标记的标签 |
| t_score | additional.fields.t_score_label | 设置键为“t_score”且值来自 t_score 的标签 |
| targets_key_asset | additional.fields.targets_key_asset_label | 设置键为“targets_key_asset”且值来自 targets_key_asset 的标签 |
| 威胁 | security_result.detection_fields.threat_label | 设置键为“threat”且值为威胁名称的标签 |
| triage_rule_id | security_result.rule_id | 直接复制值 |
| 类型 | additional.fields.type_label | 设置键为“type”且值为 type 的标签 |
| 网址 | metadata.url_back_to_product | 直接复制的值 |
| uuid1 | security_result.detection_fields.uuid_label | 设置键为“uuid”且值来自 uuid1 的标签 |
| dst_host_id | security_result.detection_fields.dst_host_id_label | 设置键为“dst_host_id”且值来自 dst_host_id 的标签 |
| dst_host_name | security_result.detection_fields.dst_host_name_label | 设置键为“dst_host_name”且值为 dst_host_name 的标签 |
| dst_port1 | security_result.detection_fields.dst_port_label | 设置键为“dst_port”且值来自 dst_port1 的标签 |
| dst_last_timestamp | security_result.detection_fields.dst_last_timestamp_label | 设置键为“dst_last_timestamp”且值为 dst_last_timestamp 的标签 |
| metadata.event_type | 如果 has_principal == "true" 且 has_target == "true",则设置为“NETWORK_CONNECTION”;如果 has_user == "true",则设置为“USER_UNCATEGORIZED”;如果 has_principal == "true",则设置为“STATUS_UPDATE”;否则设置为“GENERIC_EVENT” | |
| metadata.product_name | 设置为“Vectra 提醒” | |
| metadata.vendor_name | 设置为“Vectra 提醒” |
更新日志
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。