收集 VMware vRealize 日志
支持的语言:
Google SecOps
SIEM
本文档介绍了如何使用 Bindplane 将 VMware Aria Suite(之前称为 VMware vRealize)日志注入到 Google Security Operations。解析器使用基于 msg_type
字段的 grok 模式从 syslog 消息中提取字段。然后,它会将这些提取的字段映射到 UDM,处理各种日志格式,并使用网络信息、用户详细信息和资源属性等其他上下文来丰富数据。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Windows 2016 或更高版本,或者具有
systemd
的 Linux 主机 - 如果通过代理运行,请确保防火墙端口处于开放状态
- 对 VMware Aria Suite 软件的特权访问权限
获取 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: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'VMWARE_VREALIZE' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- 根据基础架构的需要替换端口和 IP 地址。
- 将
<customer_id>
替换为实际的客户 ID。 - 将
/path/to/ingestion-authentication-file.json
更新为获取 Google SecOps 提取身份验证文件部分中保存身份验证文件的路径。
重启 Bindplane 代理以应用更改
如需在 Linux 中重启 Bindplane 代理,请运行以下命令:
sudo systemctl restart bindplane-agent
如需在 Windows 中重启 Bindplane 代理,您可以使用服务控制台,也可以输入以下命令:
net stop BindPlaneAgent && net start BindPlaneAgent
为 VMware Aria Suite 配置 Syslog
- 登录 VMware Aria Suite 网页界面。
- 依次前往管理 > 事件转发。
- 点击新建目的地。
- 提供以下配置详细信息:
- 名称:输入用于标识服务器的唯一名称。
- 主机:输入 Bindplane 代理 IP 地址。
- 协议:选择 Syslog。
- 传输:根据实际的 Bindplane 代理配置,选择 UDP 或 TCP。
- 端口:输入 Bindplane 代理端口号。
- 点击测试。
- 点击保存。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
actorDomain |
principal.hostname |
原始日志中的 actorDomain 值会映射到 UDM 字段。 |
actorId |
principal.resource.attribute.labels.key |
字符串“actorId”已分配给该键。 |
actorId |
principal.resource.attribute.labels.value |
原始日志中的 actorId 值会分配给该值。 |
actorId |
additional.fields.key |
字符串“actorId”已分配给该键。 |
actorId |
additional.fields.value.string_value |
原始日志中的 actorId 值会分配给该值。 |
actorUserName |
principal.user.userid |
原始日志中的 actorUserName 值会映射到 UDM 字段。 |
actorUuid |
principal.resource.attribute.labels.key |
字符串“actorUuid”已分配给该键。 |
actorUuid |
principal.resource.attribute.labels.value |
原始日志中的 actorUuid 值会分配给该值。 |
actorUuid |
additional.fields.key |
字符串“actorUuid”已分配给该键。 |
actorUuid |
additional.fields.value.string_value |
原始日志中的 actorUuid 值会分配给该值。 |
all_request_headers.sec-ch-ua-platform |
principal.platform |
该值派生自 all_request_headers.sec-ch-ua-platform 。如果包含“win”或“windows”(不区分大小写),则值为“WINDOWS”。如果包含“Mac”(不区分大小写),则值为“MAC”。如果包含“lin”或“linux”(不区分大小写),则值为“LINUX”。 |
all_request_headers.X-Requested-With |
network.application_protocol |
如果值包含“http”(不区分大小写),则将值设置为“HTTP”。 |
automation_tag |
metadata.product_event_type |
原始日志中的 automation_tag 值会映射到 UDM 字段。 |
client_ip |
principal.ip |
原始日志中的 client_ip 值会映射到 UDM 字段。 |
client_src_port |
principal.port |
原始日志中的 client_src_port 值会映射到 UDM 字段。 |
comp |
about.resource.attribute.labels.key |
字符串“Component”已分配给该键。 |
comp |
about.resource.attribute.labels.value |
原始日志中的 comp 值会分配给该值。 |
compression |
additional.fields.key |
字符串“compression”已分配给该键。 |
compression |
additional.fields.value.string_value |
原始日志中的 compression 值会分配给该值。 |
data |
about.resource.attribute.labels.key |
逻辑取决于 msg_type 。如果 msg_type 为“Vpxa”“Hostd”或“VSANMGMTSVC”,则使用键值对解析 data 字段,并将特定键(例如 opID 、sub )映射到 about.resource.attribute.labels 。如果 msg_type 为“SWITCHING”“FABRIC”“MONITORING”“SYSTEM”“ROUTING”“LOAD”“nsx”“nestdb”“cfgAgent”“NSX”或“NSXV”,则会解析 data 字段以查找 comp 、subcomp 、s2comp 等键,然后将其映射到 about.resource.attribute.labels 。 |
data |
about.resource.attribute.labels.value |
请参阅 about.resource.attribute.labels.key 的逻辑。 |
data |
security_result.description |
如果 msg_type 为“Vpxa”“Hostd”或“VSANMGMTSVC”,并且在解析 data 以获取键值对后,如果存在 msg 字段,则其值会分配给 security_result.description 。 |
description |
security_result.description |
如果原始日志中存在 description 字段,则其值会映射到 UDM 字段。 |
deviceId |
principal.resource.attribute.labels.key |
字符串“deviceType”已分配给该键。 |
deviceId |
principal.resource.attribute.labels.value |
原始日志中的 values.deviceType 值会分配给该值。 |
deviceId |
additional.fields.key |
字符串“deviceType”已分配给该键。 |
deviceId |
additional.fields.value.string_value |
原始日志中的 values.deviceType 值会分配给该值。 |
direction |
network.direction |
如果值为“OUT”,则映射到“OUTBOUND”。如果值为“IN”,则映射到“INBOUND”。 |
dst_ip |
target.ip |
原始日志中的 dst_ip 值会映射到 UDM 字段。 |
dst_port |
target.port |
原始日志中的 dst_port 值会映射到 UDM 字段。 |
event_source |
principal.url |
原始日志中的 event_source 值会映射到 UDM 字段。 |
headers_received_from_server.Access-Control-Allow-Origin |
target.resource.attribute.labels.key |
字符串“headers_received_from_server.Access-Control-Allow-Origin”已分配给该键。 |
headers_received_from_server.Access-Control-Allow-Origin |
target.resource.attribute.labels.value |
原始日志中的 headers_received_from_server.Access-Control-Allow-Origin 值会分配给该值。 |
headers_received_from_server.Content-Security-Policy |
principal.resource.attribute.labels.key |
字符串“headers_received_from_server.Content-Security-Policy”已分配给该键。 |
headers_received_from_server.Content-Security-Policy |
principal.resource.attribute.labels.value |
原始日志中的 headers_received_from_server.Content-Security-Policy 值会分配给该值。 |
headers_received_from_server.Cookie |
target.resource.attribute.labels.key |
字符串“headers_received_from_server.Cookie”已分配给该键。 |
headers_received_from_server.Cookie |
target.resource.attribute.labels.value |
原始日志中的 headers_sent_to_server.Cookie 值会分配给该值。 |
headers_received_from_server.set-cookie |
target.resource.attribute.labels.key |
字符串“headers_received_from_server.set-cookie”已分配给该键。 |
headers_received_from_server.set-cookie |
target.resource.attribute.labels.value |
原始日志中的 headers_received_from_server.set-cookie 值会分配给该值。 |
headers_sent_to_server.sec-ch-ua |
principal.resource.attribute.labels.key |
字符串“headers_sent_to_server.sec-ch-ua”已分配给该键。 |
headers_sent_to_server.sec-ch-ua |
principal.resource.attribute.labels.value |
原始日志中的 headers_sent_to_server.sec-ch-ua 值会分配给该值。 |
headers_sent_to_server.X-CSRF-TOKEN |
principal.resource.attribute.labels.key |
字符串“headers_sent_to_server.X-CSRF-TOKEN”已分配给该键。 |
headers_sent_to_server.X-CSRF-TOKEN |
principal.resource.attribute.labels.value |
原始日志中的 headers_sent_to_server.X-CSRF-TOKEN 值会分配给该值。 |
hostname |
principal.hostname |
原始日志中的 hostname 值会映射到 UDM 字段。 |
hostname |
intermediary.hostname |
原始日志中的 hostname 值会映射到 UDM 字段。 |
host |
principal.hostname |
原始日志中的 host 值会映射到 UDM 字段。 |
isLocal |
additional.fields.key |
字符串“isLocal”已分配给该键。 |
isLocal |
additional.fields.value.string_value |
原始日志中的 isLocal 值会分配给该值。 |
json_data |
principal 、target 、additional 和 security_result 中的各个字段 |
原始日志中的 json_data 字段会解析为 JSON,提取的字段会根据其名称和解析器的逻辑映射到各种 UDM 字段。这包括 uuid 、tenantId 、actorId 、actorUserName 、actorDomain 、sourceIp 、objectName 、objectType 、objectId 、values.resourceType 、values.success 等字段。 |
kv_data |
各种字段 | kv_data 字段会解析为键值对,提取的字段会根据其名称和解析器的逻辑映射到各种 UDM 字段。 |
level |
security_result.severity |
如果值为“info”(不区分大小写),则映射到“INFORMATIONAL”。 |
log_id |
metadata.product_log_id |
原始日志中的 log_id 值会映射到 UDM 字段。 |
message |
各种字段 | message 字段是主要的数据源,系统会使用 grok 模式对其进行广泛解析,以提取各种字段,例如 ts 、hostname 、msg_type 、sub_msg 等。然后,系统会根据解析器的逻辑使用这些提取的字段来填充不同的 UDM 字段。 |
method |
network.http.method |
原始日志中的 method 值会映射到 UDM 字段。 |
msg |
security_result.description |
如果 msg_type 为“Vpxa”“Hostd”“VSANMGMTSVC”“SWITCHING”“FABRIC”“ROUTING”“LOAD-BALANCER”“nsx”“nestdb”“cfgAgent”“NSX”“NSXV”或“Rhttpproxy”,并且在进行任何相关的 grok 解析后,如果 msg 字段存在,则将其值分配给 security_result.description 。此逻辑中针对特定消息内容(例如“keepalive connection”)存在特殊情况。 |
msg_type |
metadata.product_event_type |
如果 msg_type 为“FIREWALL_PKTLOG”或“FIREWALL-PKTLOG”,则其值会映射到 UDM 字段。 |
msg_type |
event_type |
event_type 的值取决于 msg_type 。如果 msg_type 为“FIREWALL_PKTLOG”或“FIREWALL-PKTLOG”,则 event_type 为“NETWORK_CONNECTION”。如果 msg_type 是“Vpxa”“Hostd”“VSANMGMTSVC”“nsx”“LOAD”“ROUTING”“SWITCHING”“FABRIC”“MONITORING”“SYSTEM”“nestdb”“cfgAgent”“NSX”“NSXV”“Rhttpproxy”“audispd”或“vsantraceUrgent”,则 event_type 为“GENERIC_EVENT”。如果 msg_type 为“queries”或“responses”,则 event_type 为“NETWORK_DNS”。如果 msg_type 为“sudo”,则 event_type 为“STATUS_UPDATE”。如果 description 字段包含“cmmdsTimeMachineDump”,则 event_type 为“GENERIC_EVENT”。如果 description 字段包含“prodjbossapp”,则 event_type 为“GENERIC_EVENT”。如果 description 字段包含“liagent@6876”,则 event_type 为“GENERIC_EVENT”。如果上述条件均不满足,且 description 字段不为空,则 event_type 为“GENERIC_EVENT”。如果 src_ip 和 dst_ip 同时存在,则 event_type 为“NETWORK_CONNECTION”。如果存在 src_ip 或 dst_ip 或 hostname ,则 event_type 为“STATUS_UPDATE”。如果 has_principal_ip 为 true 且 has_target_ip 为 true,则 event_type 为“SCAN_UNCATEGORIZED”。如果 has_principal_ip 为 true 或 has_principal_host 为 true,则 event_type 为“STATUS_UPDATE”。如果上述任何条件均不满足,则 event_type 为“GENERIC_EVENT”。 |
objectName |
target.resource.attribute.labels.key |
字符串“objectName”已分配给该键。 |
objectName |
target.resource.attribute.labels.value |
原始日志中的 objectName 值会分配给该值。 |
objectName |
additional.fields.key |
字符串“objectName”已分配给该键。 |
objectName |
additional.fields.value.string_value |
原始日志中的 objectName 值会分配给该值。 |
objectId |
target.resource.attribute.labels.key |
字符串“objectId”已分配给该键。 |
objectId |
target.resource.attribute.labels.value |
原始日志中的 objectId 值会分配给该值。 |
objectId |
additional.fields.key |
字符串“objectId”已分配给该键。 |
objectId |
additional.fields.value.string_value |
原始日志中的 objectId 值会分配给该值。 |
objectType |
target.resource.attribute.labels.key |
字符串“objectType”已分配给该键。 |
objectType |
target.resource.attribute.labels.value |
原始日志中的 objectType 值会分配给该值。 |
objectType |
additional.fields.key |
字符串“objectType”已分配给该键。 |
objectType |
additional.fields.value.string_value |
原始日志中的 objectType 值会分配给该值。 |
objectType |
security_result.description |
如果 objectType 为“LAUNCH”且 success 不为“true”,则说明为“应用启动尝试成功”。如果 objectType 为“LAUNCH_ERROR”且 success 不为“true”,则说明为“用户启动了应用,但请求无效”。 |
opID |
about.resource.attribute.labels.key |
字符串“opId”已分配给该键。 |
opID |
about.resource.attribute.labels.value |
原始日志中的 opID 值会分配给该值。 |
pool |
additional.fields.key |
字符串“pool”已分配给该键。 |
pool |
additional.fields.value.string_value |
原始日志中的 pool 值会分配给该值。 |
pool_name |
additional.fields.key |
字符串“pool_name”已分配给该键。 |
pool_name |
additional.fields.value.string_value |
原始日志中的 pool_name 值会分配给该值。 |
protocol |
network.ip_protocol |
原始日志中的 protocol 值会转换为大写形式,并映射到 UDM 字段。如果值为“PROTO”,则不进行映射。 |
protocol |
additional.fields.key |
如果 protocol 的值为“PROTO”,则将字符串“ip_protocol”分配给该键。 |
protocol |
additional.fields.value.string_value |
如果 protocol 的值为“PROTO”,则将原始日志中的 protocol 的值分配给该值。 |
query_data |
network.dns.questions.name |
系统会解析 query_data 字段以提取 question_name ,然后将其映射到 UDM 字段。 |
query_data |
network.dns.questions.type |
系统会解析 query_data 字段以提取 query_type ,然后使用从“dns_record_type.include”中包含的查找功能将 query_type 映射到 UDM 字段。 |
query_data |
network.dns.questions.class |
系统会解析 query_data 字段以提取 dns_class ,然后使用从“dns_query_class_mapping.include”中包含的查找功能将 dns_class 映射到 UDM 字段。 |
referer |
principal.url |
原始日志中的 referer 值会映射到 UDM 字段。 |
request_content_type |
additional.fields.key |
字符串“request_content_type”已分配给该键。 |
request_content_type |
additional.fields.value.string_value |
原始日志中的 request_content_type 值会分配给该值。 |
request_state |
additional.fields.key |
字符串“request_state”已分配给该键。 |
request_state |
additional.fields.value.string_value |
原始日志中的 request_state 值会分配给该值。 |
response_code |
network.http.response_code |
原始日志中的 response_code 或 server_response_code 值会映射到 UDM 字段。 |
response_content_type |
additional.fields.key |
字符串“response_content_type”已分配给该键。 |
response_content_type |
additional.fields.value.string_value |
原始日志中的 response_content_type 值会分配给该值。 |
rule_id |
security_result.rule_id |
原始日志中的 rule_id 值会映射到 UDM 字段。 |
s2comp |
about.resource.attribute.labels.key |
字符串“S2-Component”已分配给该键。 |
s2comp |
about.resource.attribute.labels.value |
原始日志中的 s2comp 值会分配给该值。 |
server_ip |
target.ip |
原始日志中的 server_ip 值会映射到 UDM 字段。 |
server_name |
target.hostname |
原始日志中的 server_name 值会映射到 UDM 字段。 |
server_response_code |
network.http.response_code |
请参阅 response_code 的逻辑。 |
server_src_port |
target.port |
原始日志中的 server_src_port 值会映射到 UDM 字段。 |
service_engine |
additional.fields.key |
字符串“service_engine”已分配给该键。 |
service_engine |
additional.fields.value.string_value |
原始日志中的 service_engine 值会分配给该值。 |
sourceIp |
principal.ip |
原始日志中的 sourceIp 值会映射到 UDM 字段。 |
ssl_cipher |
network.tls.cipher |
原始日志中的 ssl_cipher 值会映射到 UDM 字段。 |
ssl_session_id |
network.session_id |
原始日志中的 ssl_session_id 值会映射到 UDM 字段。 |
ssl_version |
network.tls.version_protocol |
原始日志中的 ssl_version 值会映射到 UDM 字段。 |
sub |
about.resource.attribute.labels.key |
字符串“子组件”已分配给该键。 |
sub |
about.resource.attribute.labels.value |
原始日志中的 sub 值会分配给该值。 |
subClusterUuid |
additional.fields.key |
字符串“subClusterUuid”已分配给该键。 |
subClusterUuid |
additional.fields.value.string_value |
原始日志中的 subClusterUuid 值会分配给该值。 |
sub_msg |
principal 、target 、network 、security_result 和 about 中的各个字段 |
系统会根据 msg_type 以不同的方式解析 sub_msg 字段。可以使用 JSON、grok 模式或键值对进行解析。然后,根据提取的字段的名称和解析器的逻辑,将这些字段映射到各种 UDM 字段。这包括 ip_type 、action 、rule_id 、direction 、protocol 、tcp_flag 、src_ip 、src_port 、dst_ip 、dst_port 、data 、msg 等字段。 |
subcomp |
about.resource.attribute.labels.key |
字符串“子组件”已分配给该键。 |
subcomp |
about.resource.attribute.labels.value |
原始日志中的 subcomp 值会分配给该值。 |
tenantId |
principal.resource.attribute.labels.key |
字符串“tenantId”已分配给该键。 |
tenantId |
principal.resource.attribute.labels.value |
原始日志中的 tenantId 值会分配给该值。 |
tenantId |
additional.fields.key |
字符串“tenantId”已分配给该键。 |
tenantId |
additional.fields.value.string_value |
原始日志中的 tenantId 值会分配给该值。 |
ts |
metadata.event_timestamp |
原始日志中的 ts 值会被解析为时间戳并映射到 UDM 字段。 |
ts |
timestamp |
原始日志中的 ts 值会被解析为时间戳并映射到 UDM 字段。 |
updateType |
additional.fields.key |
字符串“updateType”已分配给该键。 |
updateType |
additional.fields.value.string_value |
原始日志中的 updateType 值会分配给该值。 |
uri_path |
network.http.referral_url |
原始日志中的 uri_path 值会映射到 UDM 字段。 |
user_agent |
network.http.user_agent |
原始日志中的 user_agent 值会映射到 UDM 字段。 |
user_agent |
network.http.parsed_user_agent |
原始日志中的 user_agent 值会被解析为用户代理字符串并映射到 UDM 字段。 |
USER |
principal.user.user_display_name |
原始日志中的 USER 值会映射到 UDM 字段。 |
values.actorExternalId |
principal.resource.attribute.labels.key |
字符串“actorExternalId”已分配给该键。 |
values.actorExternalId |
principal.resource.attribute.labels.value |
原始日志中的 values.actorExternalId 值会分配给该值。 |
values.actorExternalId |
additional.fields.key |
字符串“actorExternalId”已分配给该键。 |
values.actorExternalId |
additional.fields.value.string_value |
原始日志中的 values.actorExternalId 值会分配给该值。 |
values.deviceType |
principal.resource.attribute.labels.key |
字符串“deviceType”已分配给该键。 |
values.deviceType |
principal.resource.attribute.labels.value |
原始日志中的 values.deviceType 值会分配给该值。 |
values.deviceType |
additional.fields.key |
字符串“deviceType”已分配给该键。 |
values.deviceType |
additional.fields.value.string_value |
原始日志中的 values.deviceType 值会分配给该值。 |
values.resourceType |
principal.resource.resource_subtype |
原始日志中的 values.resourceType 值会映射到 UDM 字段。principal.resource.type 设置为“VIRTUAL_MACHINE”。 |
values.success |
security_result.action |
如果值为“true”(不区分大小写),则映射到“ALLOW”。如果值为“false”(不区分大小写),则映射到“BLOCK”。 |
virtualservice |
additional.fields.key |
字符串“virtualservice”已分配给该键。 |
virtualservice |
additional.fields.value.string_value |
原始日志中的 virtualservice 值会分配给该值。 |
vmw_vr_ops_appname |
about.resource.attribute.labels.key |
字符串“Ops AppName”已分配给该键。 |
vmw_vr_ops_appname |
about.resource.attribute.labels.value |
原始日志中的 vmw_vr_ops_appname 值会分配给该值。 |
vmw_vr_ops_clustername |
about.resource.attribute.labels.key |
字符串“Ops ClusterName”已分配给该键。 |
vmw_vr_ops_clustername |
about.resource.attribute.labels.value |
原始日志中的 vmw_vr_ops_clustername 值会分配给该值。 |
vmw_vr_ops_logtype |
about.resource.attribute.labels.key |
字符串“Ops Logtype”已分配给该键。 |
vmw_vr_ops_logtype |
about.resource.attribute.labels.value |
原始日志中的 vmw_vr_ops_logtype 值会分配给该值。 |
vmw_vr_ops_nodename |
about.resource.attribute.labels.key |
字符串“Ops NodeName”已分配给该键。 |
vmw_vr_ops_nodename |
about.resource.attribute.labels.value |
原始日志中的 vmw_vr_ops_nodename 值会分配给该值。 |
vs_name |
additional.fields.key |
字符串“vs_name”已分配给该键。 |
vs_name |
additional.fields.value.string_value |
原始日志中的 vs_name 值会分配给该值。已分配字符串“VMWARE”。已分配字符串“VMWARE_VREALIZE”。分配了字符串“VMWARE_VREALIZE”。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。