收集 VMware Avi 负载均衡器 WAF 日志
本文档介绍了如何使用 Bindplane 代理将 VMware Avi Load Balancer WAF 日志注入 Google Security Operations。
VMware Avi Load Balancer(以前称为 Avi Networks)是一种应用交付控制器,可为 WAF 事件、客户端连接日志和虚拟服务活动生成 syslog 消息。解析器会从 syslog 格式的日志中提取字段,并将其映射到统一数据模型 (UDM)。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Windows Server 2016 或更高版本,或者具有
systemd的 Linux 主机 - Bindplane 代理与 AVI 控制器之间的网络连接
- 如果在代理后面运行,请确保按照 Bindplane 代理要求打开防火墙端口
- 对 VMware AVI 负载均衡器的特权访问权限
获取 Bindplane 代理的 Google SecOps 凭据
如需向 Google SecOps 验证 Bindplane 代理,请选择以下方法之一:
- 新部署:使用 Chronicle API(选项 1)。
- 旧版部署:继续使用提取身份验证文件(方法 2),直到提取 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该服务应显示为 RUNNING。
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该服务应显示为 active (running)。
其他安装资源
如需了解其他安装选项和问题排查,请参阅 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_avinetworks_iwaf: 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: VMWARE_AVINETWORKS_IWAF raw_log_field: body service: pipelines: logs/vmware_avinetworks_iwaf_to_chronicle: receivers: - udplog exporters: - chronicle/vmware_avinetworks_iwaf
配置参数
替换以下占位符:
接收器配置:
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/vmware_avinetworks_iwaf: compression: gzip creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: VMWARE_AVINETWORKS_IWAF 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"
- 按
为 VMware AVI WAF 配置外部日志记录
- 登录 AVI 控制器 Web 界面。
- 依次前往模板 > 配置文件 > 分析。
- 创建新分析资料或选择预先存在的分析资料进行修改。
- 在修改分析配置文件界面中,选择客户端日志标签页。
- 滚动到外部日志记录部分,然后选中将日志流式传输到外部服务器复选框。
- 提供以下配置详细信息:
- 日志流式传输协议:选择 UDP。
- 默认端口:输入 514。
- 要流式传输的日志类型:选择所有日志。
- 点击服务器下的添加按钮。
- IP 地址:输入 Bindplane 代理 IP 地址。
- 端口:输入 Bindplane 代理端口号(例如
514)。
- 点击保存。
- 将设置应用于您希望流式传输日志数据的虚拟服务。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
server_name |
about.hostname |
直接映射 |
_field |
additional.fields |
已合并 |
additional_field_label |
additional.fields |
已合并 |
cacheable_label |
additional.fields |
已合并 |
compression_label |
additional.fields |
已合并 |
host_label |
additional.fields |
已合并 |
http_version_label |
additional.fields |
已合并 |
is_internal_label |
additional.fields |
已合并 |
key |
additional.fields |
Mapped: `"all_request_headers_pragma", "all_request_headers_accept", "all_request_headers_co… |
match_element_label |
additional.fields |
已合并 |
match_value_label |
additional.fields |
已合并 |
persistent_session_id_label |
additional.fields |
已合并 |
request_headers_label |
additional.fields |
已合并 |
request_id_label |
additional.fields |
已合并 |
response_content_type_label |
additional.fields |
已合并 |
response_headers_label |
additional.fields |
已合并 |
response_time_first_byte_label |
additional.fields |
已合并 |
response_time_last_byte_label |
additional.fields |
已合并 |
rule_log_msg_label |
additional.fields |
已合并 |
rule_log_phase_label |
additional.fields |
已合并 |
rule_log_rule_group_label |
additional.fields |
已合并 |
rule_log_rule_id_label |
additional.fields |
已合并 |
rule_log_rule_name_label |
additional.fields |
已合并 |
server_connection_reused_label |
additional.fields |
已合并 |
server_response_code_label |
additional.fields |
已合并 |
server_response_length_label |
additional.fields |
已合并 |
server_response_time_first_byte_label |
additional.fields |
已合并 |
server_response_time_last_byte_label |
additional.fields |
已合并 |
server_rtt_label |
additional.fields |
已合并 |
server_side_redirect_uri_label |
additional.fields |
已合并 |
server_ssl_session_id_label |
additional.fields |
已合并 |
servers_tried_label |
additional.fields |
已合并 |
ssl_cipher_label |
additional.fields |
已合并 |
ssl_session_id_label |
additional.fields |
已合并 |
ssl_version_label |
additional.fields |
已合并 |
tag_label |
additional.fields |
已合并 |
value_label |
additional.fields |
已合并 |
waf_log.latency_request_header_phase_label |
additional.fields |
已合并 |
waf_log_latency_request_body_phase_label |
additional.fields |
已合并 |
waf_log_latency_response_body_phase_label |
additional.fields |
已合并 |
waf_log_latency_response_header_phase_label |
additional.fields |
已合并 |
waf_log_rules_configured_label |
additional.fields |
已合并 |
waf_log_rules_executed_label |
additional.fields |
已合并 |
service_engine |
intermediary.hostname |
直接映射 |
intermediary_ip |
intermediary.ip |
已合并 |
server_src_port |
intermediary.port |
直接映射 |
report_timestamp |
metadata.event_timestamp |
解析为 ISO8601 |
timestamp |
metadata.event_timestamp |
已解析为 ISO8601 |
has_principal |
metadata.event_type |
映射:true → NETWORK_HTTP、true → NETWORK_CONNECTION、true → STATUS_UPDATE |
log_id |
metadata.product_log_id |
直接映射 |
log_id_syslog |
metadata.product_log_id |
直接映射 |
http_method |
network.http.method |
直接映射 |
method |
network.http.method |
直接映射 |
http_user_agent |
network.http.parsed_user_agent |
直接映射 |
http_referer |
network.http.referral_url |
直接映射 |
referer |
network.http.referral_url |
直接映射 |
http_status |
network.http.response_code |
直接映射 |
response_code |
network.http.response_code |
直接映射 |
http_user_agent |
network.http.user_agent |
直接映射 |
user_agent |
network.http.user_agent |
直接映射 |
http_bytes_received |
network.received_bytes |
直接映射 |
response_length |
network.received_bytes |
直接映射 |
http_bytes_sent |
network.sent_bytes |
直接映射 |
request_length |
network.sent_bytes |
直接映射 |
client_rtt |
network.session_duration.seconds |
直接映射 |
duration |
network.session_duration.seconds |
直接映射 |
server_conn_src_ip |
observer.ip |
已合并 |
client_ip |
principal.asset.ip |
已合并 |
source_ip |
principal.asset.ip |
已映射:client_ip → source_ip |
src_ip |
principal.asset.ip |
已合并 |
client_ip |
principal.ip |
已合并 |
source_ip |
principal.ip |
已映射:client_ip → source_ip |
src_ip |
principal.ip |
已合并 |
client_src_port |
principal.port |
直接映射 |
user |
principal.user.userid |
直接映射 |
request_state |
security_result.description |
直接映射 |
_field |
security_result.detection_fields |
已合并 |
waf_status_label |
security_result.detection_fields |
已合并 |
dest_ip |
target.asset.ip |
已合并 |
server_ip |
target.asset.ip |
已合并 |
vs_ip |
target.asset.ip |
已合并 |
vs_name_syslog |
target.hostname |
直接映射 |
dest_ip |
target.ip |
已合并 |
server_ip |
target.ip |
已合并 |
vs_ip |
target.ip |
已合并 |
client_dest_port |
target.port |
已重命名/已映射 |
port |
target.port |
直接映射 |
server_dest_port |
target.port |
已重命名/已映射 |
pool_label |
target.resource.attribute.labels |
已合并 |
pool_name_label |
target.resource.attribute.labels |
已合并 |
virtualservice_label |
target.resource.attribute.labels |
已合并 |
redirected_uri |
target.url |
直接映射 |
uri_query |
target.url |
直接映射 |
url |
target.url |
直接映射 |
| 不适用 | metadata.event_type |
常量:NETWORK_HTTP |
| 不适用 | metadata.product_name |
常量:AVI Load Balancer |
| 不适用 | metadata.vendor_name |
常量:Vmware |
| 不适用 | network.direction |
常量:INBOUND |
| 不适用 | network.http.parsed_user_agent |
常量:parseduseragent |
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。