收集 VMware vCenter 日志
支持的平台:
Google SecOps
SIEM
本文档介绍了如何使用 Bindplane 代理将 VMware vCenter 日志注入到 Google Security Operations。
VMware vCenter 是一种服务器管理平台,可针对虚拟机操作、主机管理、身份验证和配置更改生成 JSON 和 syslog 消息。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Windows Server 2016 或更高版本,或者具有
systemd的 Linux 主机 - Bindplane 代理与 VMware vCenter 服务器之间的网络连接
- 如果在代理后面运行,请确保防火墙端口已根据 Bindplane 代理要求打开
- 对 VMware vCenter Server 管理 Web 界面具有特权访问权限
获取 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等待安装完成。
运行以下命令,验证安装是否成功:
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/vmware_vcenter: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: VMWARE_VCENTER raw_log_field: body service: pipelines: logs/vmware_vcenter_to_chronicle: receivers: - udplog exporters: - chronicle/vmware_vcenter
配置参数
替换以下占位符:
接收器配置:
listen_address:要监听的 IP 地址和端口:0.0.0.0侦听所有接口(推荐)- 端口
514是标准 syslog 端口(在 Linux 上需要 root 权限;对于非 root 用户,请使用1514)
导出器配置:
creds_file_path:提取身份验证文件的完整路径:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id:从 Google SecOps 控制台复制的客户 IDendpoint:区域端点网址:- 美国:
malachiteingestion-pa.googleapis.com - 欧洲:
europe-malachiteingestion-pa.googleapis.com - 亚洲:
asia-southeast1-malachiteingestion-pa.googleapis.com - 如需查看完整列表,请参阅区域级端点
- 美国:
保存配置文件
- 修改后,保存文件:
- 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"
- 按
在 VMware vCenter 中配置 syslog
- 登录 vCenter Server 管理 Web 界面。
- 依次前往 Syslog > Forwarding Configuration。
- 点击配置以创建新的转发配置。
- 提供以下配置详细信息:
- 服务器地址:输入 Bindplane 代理 IP 地址。
- 协议:选择 UDP。
- 端口:输入 Bindplane 代理端口号(例如
514)。
- 点击保存。
- 点击发送测试消息以验证配置。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
Access Mask |
principal.process.access_mask |
从十六进制转换为十进制。 |
Account Domain |
principal.administrative_domain |
|
Account Name |
principal.user.userid |
|
ApplicationProtocol |
additional.fields |
|
Authentication Package |
security_result.about.resource.name |
|
Client Address |
principal.ip,,principal.asset.ip |
解析为 IP。 |
Client Port |
principal.port |
转换为整数。 |
cmd |
target.process.command_line |
|
date |
时间戳 | 解析为 yyyy-MM-dd,并与时间合并为 yyyy-MM-dd HH:mm:ss,解析为日期。 |
date_time |
时间戳 | 解析为采用 RFC 3339、TIMESTAMP_ISO8601、SYSLOGTIMESTAMP 格式的日期。 |
desc |
metadata.description |
|
eventid |
metadata.product_event_type |
与任务合并,作为 eventid - task。 |
host_name |
principal.hostname,,principal.asset.hostname |
|
http_method |
network.http.method |
|
ip |
target.ip,,target.asset.ip |
|
kv_data1 |
解析为键值对。 | |
kv_data2 |
解析为键值对。 | |
kv_msg1.cipher |
network.tls.cipher |
|
kv_msg1.ctladdr |
intermediary.labels |
|
kv_msg1.daemon |
security_result.about.labels |
|
kv_msg1.from |
network.email.from |
如果 mail_from 不包含 @,则附加 @local。 |
kv_msg1.msgid |
network.email.mail_id |
|
kv_msg1.proto |
security_result.about.labels |
|
kv_msg1.relay |
intermediary.hostname,,intermediary.ip |
是否解析为 (HOSTNAME)?[IP] 或 HOSTNAME,如果存在 relay_domain,则设置为 intermediary.hostname;如果存在 relay_ip,则合并到 intermediary.ip。 |
kv_msg1.size |
network.sent_bytes |
转换为无符号整数。 |
kv_msg1.stat |
security_result.summary |
|
kv_msg1.verify |
security_result.description,,security_result.action |
如果 kv_msg1.verify 为 FAIL,则将 security_result.action 设置为 BLOCK。 |
kv_msg1.version |
network.tls.version |
|
labels.log_type |
metadata.product_event_type |
|
labels.net.host.ip |
principal.ip,,principal.asset.ip |
|
labels.net.host.port |
principal.port |
|
labels.net.peer.ip |
target.ip,,target.asset.ip |
|
labels.net.peer.port |
target.port |
|
labels.net.transport |
network.ip_protocol |
如果 labels.net.transport 为 TCP,则为 TCP。 |
level |
security_result.severity |
如果级别为 INFO/Informational/DEBUG/info/Information,则为 INFORMATIONAL;如果级别为 ERROR/error,则为 ERROR;如果级别为 WARNING,则为 LOW。 |
log.file.path |
target.process.file.full_path |
|
logName |
security_result.category_details |
|
Logon Account |
principal.user.userid |
|
Logon Type |
extensions.auth.mechanism |
如果 logon_type 为 2/Interactive,则为 INTERACTIVE;如果 logon_type 为 3/8,则为 NETWORK;如果 logon_type 为 4,则为 BATCH;如果 logon_type 为 5,则为 SERVICE;如果 logon_type 为 7,则为 UNLOCK;如果 logon_type 为 9,则为 NEW_CREDENTIALS;如果 logon_type 为 10,则为 REMOTE_INTERACTIVE;如果 logon_type 为 11,则为 CACHED_INTERACTIVE;否则为 MECHANISM_UNSPECIFIED。 |
mail_from |
network.email.from |
如果 mail_from 不包含 @,则附加 @local。 |
mail_to |
network.email.to |
如果 mail_to 不包含 @,则附加 @local。 |
message |
使用 grok 模式进行解析。 | |
namespace |
principal.namespace |
|
port |
target.port |
转换为整数。 |
process_id |
target.process.pid |
|
providername |
principal.application |
|
Relative Target Name |
target.file.full_path |
|
resource.labels.project_id |
src.cloud.project.id |
|
resource.type |
src.labels |
|
response_status |
network.http.response_code |
转换为整数。 |
sec_desc |
security_result.description |
|
Security ID |
target.user.windows_sid |
|
security_result_action_detail |
security_result.action_details |
|
server_name |
target.hostname,,target.asset.hostname |
|
Share Name |
target.resource.name |
|
Source Network Address |
principal.ip,,principal.asset.ip |
解析为 IP。 |
Source Port |
principal.port |
转换为整数。 |
summary |
security_result.summary |
|
target_host |
target.hostname,,target.asset.hostname |
|
target_url |
target.url |
|
target_userid |
target.user.userid |
|
time |
时间戳 | 解析为 HH:mm:ss,并与日期合并为 yyyy-MM-dd HH:mm:ss,解析为日期。 |
upn_name |
intermediary.url |
|
URL |
target.url |
|
User ID |
target.user.windows_sid |
|
user_id |
principal.user.userid |
|
UserAgent |
network.http.user_agent |
|
metadata.event_type |
如果消息包含 API_HEALTH 或 JobDispatcher,则设置为 STATUS_UPDATE;如果消息包含“logged in as”且 target_userid 不为空,则设置为 USER_LOGIN;如果消息包含“Leave Validate”,则设置为 SCAN_HOST;如果消息包含“Getting IP Address from host”,则设置为 NETWORK_UNCATEGORIZED;如果消息包含“Wrote vpxd health”,则设置为 RESOURCE_WRITTEN;如果 has_principal 和 has_target 为 true 且 application_protocol 不为空,则设置为 NETWORK_HTTP;如果 process_id 和 cmd 不为空,则设置为 PROCESS_LAUNCH;如果 user_id 不为空或 eventid 为 4776,则设置为 USER_UNCATEGORIZED;如果 eventid 为 4624/4768/4769,则设置为 USER_LOGIN;如果 eventid 为 4634/4647,则设置为 USER_LOGOUT;如果 eventid 为 5145,则设置为 USER_RESOURCE_ACCESS;如果 host_name 不为空,则设置为 STATUS_UPDATE;否则设置为 GENERIC_EVENT。 | |
extensions.auth.type |
如果 eventid 为 4624/4768/4769,则设置为 MACHINE。 | |
metadata.log_type |
设置为 VMWARE_VCENTER。 | |
metadata.vendor_name |
设置为 VMWARE。 | |
metadata.product_name |
设置为 VCENTER。 | |
security_result.action |
如果 response_status 为 200 或 action 为“允许”,则设置为 ALLOW。 | |
r_name |
event.idm.read_only_udm.principal.resource.name |
从变更日志映射 |
ppid |
event.idm.read_only_udm.principal.process.pid |
从变更日志映射 |
p_ip |
event.idm.read_only_udm.principal.ip |
从变更日志映射 |
p_ip |
event.idm.read_only_udm.principal.asset.ip |
从变更日志映射 |
p_port |
event.idm.read_only_udm.principal.port |
从变更日志映射 |
i_ip |
event.idm.read_only_udm.intermediary.ip |
从变更日志映射 |
i_ip |
event.idm.read_only_udm.intermediary.asset.ip |
从变更日志映射 |
i_port |
event.idm.read_only_udm.intermediary.port |
从变更日志映射 |
t_ip |
event.idm.read_only_udm.target.ip |
从变更日志映射 |
t_ip |
event.idm.read_only_udm.target.asset.ip |
从变更日志映射 |
o_ip |
event.idm.read_only_udm.observer.ip |
从变更日志映射 |
o_ip |
event.idm.read_only_udm.observer.asset.ip |
从变更日志映射 |
o_port |
event.idm.read_only_udm.observer.port |
从变更日志映射 |
tls_details |
event.idm.read_only_udm.network.tls.version_protocol |
从变更日志映射 |
duration |
event.idm.read_only_udm.network.session_duration.seconds |
从变更日志映射 |
r_bytes |
event.idm.read_only_udm.network.received_bytes |
从变更日志映射 |
s_bytes |
event.idm.read_only_udm.network.sent_bytes |
从变更日志映射 |
response_flag |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
unknown_metric_2 |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
unknown_metric_1 |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
http_path |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
pusername |
event.idm.read_only_udm.principal.user.user_display_name |
从变更日志映射 |
puserid |
event.idm.read_only_udm.principal.user.userid |
从变更日志映射 |
log_level |
event.idm.read_only_udm.security_result.severity |
从变更日志映射 |
response_code |
event.idm.read_only_udm.network.http.response_code |
从变更日志映射 |
http_details |
event.idm.read_only_udm.network.http.user_agent |
从变更日志映射 |
http_details |
event.idm.read_only_udm.network.http.parsed_user_agent |
从变更日志映射 |
t_url |
event.idm.read_only_udm.target.url |
从变更日志映射 |
hmethod |
event.idm.read_only_udm.network.http.method |
从变更日志映射 |
p_log_id |
event.idm.read_only_udm.metadata.product_log_id |
从变更日志映射 |
meta_description |
event.idm.read_only_udm.metadata.description |
从变更日志映射 |
p_event_type |
event.idm.read_only_udm.metadata.product_event_type |
从变更日志映射 |
p_hostname |
event.idm.read_only_udm.principal.hostname |
从变更日志映射 |
p_hostname |
event.idm.read_only_udm.principal.asset.hostname |
从变更日志映射 |
c_timestamp |
event.idm.read_only_udm.metadata.collected_timestamp |
从变更日志映射 |
action |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
conn_id |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
facility |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
process |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
tenant |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
duration_ms |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
provider |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
provider_type |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
cor_id |
event.idm.read_only_udm.metadata.product_log_id |
从变更日志映射 |
inter_ip |
event.idm.read_only_udm.intermediary.ip |
从变更日志映射 |
tls_cipher |
event.idm.read_only_udm.network.tls.cipher |
从变更日志映射 |
event_status |
event.idm.read_only_udm.security_result.summary |
从变更日志映射 |
file_path |
event.idm.read_only_udm.target.file.full_path |
从变更日志映射 |
target_userid |
event.idm.read_only_udm.target.user.userid |
从变更日志映射 |
open_connections |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
total_connections |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
channel_id |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
line_number |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
timestamps' |
read_only_udm.metadata.event_timestamp |
从变更日志映射 |
event_name' |
event.idm.read_only_udm.metadata.product_event_type |
从变更日志映射 |
srcip |
event.idm.read_only_udm.principal.ip和event.idm.read_only_udm.principal.asset.ip之间 |
从变更日志映射 |
usrName |
event.idm.read_only_udm.target.user.userid |
从变更日志映射 |
user_agent |
event.idm.read_only_udm.network.http.user_agent |
从变更日志映射 |
LEEF_version_label |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
msg |
event.idm.read_only_udm.metadata.description |
从变更日志映射 |
opID |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
sub |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
api_invocations |
additional.fields |
从变更日志映射 |
response_details |
target.resource.attribute.labels |
从变更日志映射 |
usr_agnt |
network.http.user_agent |
从变更日志映射 |
ver_proto |
network.tls.version |
从变更日志映射 |
DeviceUUID |
metadata.product_log_id |
从变更日志映射 |
InstanceId |
target.asset_id |
从变更日志映射 |
EventPriority |
security_result.severity |
从变更日志映射 |
AccessControlRuleAction |
security_result_action |
从变更日志映射 |
SrcIP |
principal.ip |
从变更日志映射 |
DstIP |
target.ip |
从变更日志映射 |
ICMPType", "ICMPCode", "IngressInterface", "EgressInterface", "WebApplication", "DNSQuery", "DNSRecordType", "DNSResponseType", "DNS_TTL", "service.type", "log.syslog.facility.code", "log.syslog.facility.name", "log.syslog.severity.code","log.syslog.severity.name", "log.syslog.priority |
additional.fields |
从变更日志映射 |
IngressZone |
principal.location.name |
从变更日志映射 |
EgressZone |
target.location.name |
从变更日志映射 |
ACPolicy |
security_result.rule_labels |
从变更日志映射 |
AccessControlRuleName |
security_result.rule_name |
从变更日志映射 |
NAPPolicy |
security_result.rule_labels |
从变更日志映射 |
InitiatorPackets |
network.sent_packets |
从变更日志映射 |
ResponderPackets |
network.received_packets |
从变更日志映射 |
InitiatorBytes |
network.sent_bytes |
从变更日志映射 |
ResponderBytes |
network.received_bytes |
从变更日志映射 |
FirstPacketSecond" and "ConnectionID |
security_result.about.labels |
从变更日志映射 |
Client |
target.labels |
从变更日志映射 |
ClientVersion |
target.platform_version |
从变更日志映射 |
ReferencedHost |
target.hostname |
从变更日志映射 |
HTTPResponse |
network.http.response_code |
从变更日志映射 |
ApplicationProtocol |
network.application_protocol |
从变更日志映射 |
host1.ip |
principal.ip |
从变更日志映射 |
version |
metadata.product_version |
从变更日志映射 |
principal_ip1 |
principal.ip |
从变更日志映射 |
principal_ip2 |
principal.ip |
从变更日志映射 |
target_ip1 |
target.ip |
从变更日志映射 |
target_ip2 |
target.ip |
从变更日志映射 |
principal_port |
principal.port |
从变更日志映射 |
target_port |
target.port |
从变更日志映射 |
Client port |
principal.port |
从变更日志映射 |
Source port |
principal.port |
从变更日志映射 |
insertId |
metadata.product_log_id |
从变更日志映射 |
@fields.host |
principal.hostname |
从变更日志映射 |
@fields.facility |
principal.resource.type |
从变更日志映射 |
@fields.company_name |
principal.user.company_name |
从变更日志映射 |
@fields.privatecloud_id |
principal.cloud.project.id |
从变更日志映射 |
@fields.privatecloud_name |
principal.cloud.project.name |
从变更日志映射 |
@fields.procid |
principal.process.pid |
从变更日志映射 |
@fields.region_id |
principal.location.country_or_region |
从变更日志映射 |
@version |
principal.platform_version |
从变更日志映射 |
basedn_group_iden |
target.user.group_identifiers |
从变更日志映射 |
get_error |
intermediary.labels |
从变更日志映射 |
ssh_proto |
network.application_protocol |
从变更日志映射 |
file_path |
target.process.file.full_path |
从变更日志映射 |