收集 Cisco Catalyst SD-WAN Manager 日志
解析器版本:7.0
本文档介绍了如何使用 Google Cloud Storage 将 Cisco Catalyst SD-WAN Manager(以前称为 vManage)日志注入到 Google Security Operations。Cisco Catalyst SD-WAN Manager 是一种集中式网络管理系统,可提供对 SD-WAN 结构的可见性和控制,使管理员能够监控网络性能、配置政策以及管理分布式企业网络中的安全性。
准备工作
请确保您满足以下前提条件:
- Google SecOps 实例
- 已启用 Cloud Storage API 的 GCP 项目
- 创建和管理 GCS 存储分区的权限
- 管理 GCS 存储分区的 IAM 政策的权限
- 创建 Cloud Run 服务、Pub/Sub 主题和 Cloud Scheduler 作业的权限
- 对 Cisco Catalyst SD-WAN Manager 管理控制台的特权访问权限
- 具有 API 访问权限的 Cisco Catalyst SD-WAN Manager 用户账号
创建 Google Cloud Storage 存储桶
- 前往 Google Cloud 控制台。
- 选择您的项目或创建新项目。
- 在导航菜单中,依次前往 Cloud Storage > 存储分区。
- 点击创建存储分区。
提供以下配置详细信息:
设置 值 为存储桶命名 输入一个全局唯一的名称(例如 cisco-sdwan-logs-bucket)位置类型 根据您的需求进行选择(区域级、双区域、多区域) 位置 选择营业地点(例如 us-central1)存储类别 标准(建议用于经常访问的日志) 访问权限控制 均匀(推荐) 保护工具 可选:启用对象版本控制或保留政策 点击创建。
收集 Cisco Catalyst SD-WAN Manager API 凭据
创建 API 用户账号
- 登录 Cisco Catalyst SD-WAN Manager 控制台。
- 在菜单中,依次前往管理 > 管理用户。
- 点击添加用户。
- 提供以下配置详细信息:
- 用户名:输入用于 API 访问的用户名(例如
chronicle-api)。 - 密码:输入安全系数高的密码。
- 确认密码:重新输入密码。
- 用户组:选择具有适当权限的用户组(请参阅下一部分)。
- 用户名:输入用于 API 访问的用户名(例如
- 点击 Add(添加)。
复制以下详细信息并将其保存在安全的位置:
- 用户名:您的 Catalyst SD-WAN Manager 用户名。
- 密码:您的 Catalyst SD-WAN Manager 密码。
- Catalyst SD-WAN Manager 基础网址:Catalyst SD-WAN Manager 服务器的基础网址(例如
https://sdwan-manager.example.com:8443)。
配置用户权限
API 用户账号需要特定权限才能访问审核日志、提醒和事件。
- 在 Cisco Catalyst SD-WAN Manager 控制台中,依次前往菜单中的管理 > 管理用户 > 用户群组。
- 选择分配给 API 用户的用户组(或点击添加用户组以创建新组)。
- 点击修改。
- 在功能部分中,确保已启用以下权限:
- 审核日志:选择读取权限。
- 闹钟:选择读取权限。
- 活动:选择读取权限。
- 点击更新。
验证 API 访问权限
在继续进行集成之前,请先测试您的凭据:
- 打开终端或命令提示符。
运行以下命令以测试身份验证:
# Replace with your actual credentials SDWAN_HOST="https://sdwan-manager.example.com:8443" SDWAN_USERNAME="chronicle-api" SDWAN_PASSWORD="your-password" # Test authentication using session-based login (returns JSESSIONID cookie) curl -c cookies.txt -X POST \ "${SDWAN_HOST}/j_security_check" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "j_username=${SDWAN_USERNAME}&j_password=${SDWAN_PASSWORD}" # Get CSRF token (X-XSRF-TOKEN) curl -b cookies.txt \ "${SDWAN_HOST}/dataservice/client/token"
如果身份验证成功,第二个命令将返回 CSRF 令牌字符串。
为 Cloud Run 函数创建服务账号
Cloud Run 函数需要一个服务账号,该账号具有写入 GCS 存储桶的权限,并且可以由 Pub/Sub 调用。
创建服务账号
- 在 GCP 控制台中,依次前往 IAM 和管理 > 服务账号。
- 点击创建服务账号。
- 提供以下配置详细信息:
- 服务账号名称:输入
cisco-sdwan-collector-sa。 - 服务账号说明:输入
Service account for Cloud Run function to collect Cisco Catalyst SD-WAN Manager logs。
- 服务账号名称:输入
- 点击创建并继续。
- 在向此服务账号授予对项目的访问权限部分中,添加以下角色:
- 点击选择角色。
- 搜索并选择 Storage Object Admin。
- 点击 + 添加其他角色。
- 搜索并选择 Cloud Run Invoker。
- 点击 + 添加其他角色。
- 搜索并选择 Cloud Functions Invoker。
- 点击继续。
- 点击完成。
必须拥有这些角色,才能:
- Storage Object Admin:将日志写入 GCS 存储桶并管理状态文件
- Cloud Run Invoker:允许 Pub/Sub 调用函数
- Cloud Functions Invoker:允许调用函数
授予对 GCS 存储桶的 IAM 权限
向服务账号授予对 GCS 存储桶的写入权限:
- 前往 Cloud Storage > 存储分区。
- 点击您的存储桶名称。
- 前往权限标签页。
- 点击授予访问权限。
- 提供以下配置详细信息:
- 添加主账号:输入服务账号电子邮件地址(例如
cisco-sdwan-collector-sa@PROJECT_ID.iam.gserviceaccount.com)。 - 分配角色:选择 Storage Object Admin。
- 添加主账号:输入服务账号电子邮件地址(例如
- 点击保存。
创建 Pub/Sub 主题
创建一个 Pub/Sub 主题,Cloud Scheduler 将向该主题发布消息,而 Cloud Run 函数将订阅该主题。
- 在 GCP 控制台中,前往 Pub/Sub > 主题。
- 点击创建主题。
- 提供以下配置详细信息:
- 主题 ID:输入
cisco-sdwan-trigger。 - 将其他设置保留为默认值。
- 主题 ID:输入
- 点击创建。
创建 Cloud Run 函数以收集日志
Cloud Run 函数将由来自 Cloud Scheduler 的 Pub/Sub 消息触发,以从 Cisco Catalyst SD-WAN Manager API 中提取日志并将其写入 GCS。
- 在 GCP 控制台中,前往 Cloud Run。
- 点击创建服务。
- 选择函数(使用内嵌编辑器创建函数)。
在配置部分中,提供以下配置详细信息:
设置 值 Service 名称 cisco-sdwan-log-collector区域 选择与您的 GCS 存储桶匹配的区域(例如 us-central1)运行时 选择 Python 3.12 或更高版本 在触发器(可选)部分中:
- 点击 + 添加触发器。
- 选择 Cloud Pub/Sub。
- 在选择 Cloud Pub/Sub 主题中,选择相应主题 (
cisco-sdwan-trigger)。 - 点击保存。
在身份验证部分中:
- 选择需要进行身份验证。
- 检查 Identity and Access Management (IAM)。
向下滚动并展开容器、网络、安全性。
前往安全性标签页:
- 服务账号:选择服务账号 (
cisco-sdwan-collector-sa)。
- 服务账号:选择服务账号 (
前往容器标签页:
- 点击变量和密钥。
- 为每个环境变量点击+ 添加变量:
变量名称 示例值 GCS_BUCKETcisco-sdwan-logs-bucketGCS_PREFIXcisco-sdwanSTATE_KEYcisco-sdwan/state.jsonSDWAN_HOSThttps://sdwan-manager.example.com:8443SDWAN_USERNAMEchronicle-apiSDWAN_PASSWORDyour-sdwan-passwordLOOKBACK_HOURS1在变量和密钥标签页中,向下滚动到请求:
- 请求超时:输入
600秒(10 分钟)。
- 请求超时:输入
前往容器中的设置标签页:
- 在资源部分中:
- 内存:选择 512 MiB 或更高值。
- CPU:选择 1。
- 在资源部分中:
在修订版本伸缩部分中:
- 实例数下限:输入
0。 - 实例数上限:输入
100(或根据预期负载进行调整)。
- 实例数下限:输入
点击创建。
等待服务创建完成(1-2 分钟)。
创建服务后,系统会自动打开内嵌代码编辑器。
添加函数代码
- 在入口点字段中输入 main。
在内嵌代码编辑器中,创建两个文件:
main.py:
import functions_framework from google.cloud import storage import json import os import urllib3 import urllib.parse from datetime import datetime, timezone, timedelta import time # Disable SSL warnings for self-signed certificates (testing only) urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # Initialize HTTP client with timeouts http = urllib3.PoolManager( timeout=urllib3.Timeout(connect=10.0, read=60.0), cert_reqs='CERT_NONE', retries=urllib3.Retry(total=3, backoff_factor=1) ) # Initialize Storage client storage_client = storage.Client() # Environment variables SDWAN_HOST = os.environ.get('SDWAN_HOST', '').rstrip('/') SDWAN_USERNAME = os.environ.get('SDWAN_USERNAME', '') SDWAN_PASSWORD = os.environ.get('SDWAN_PASSWORD', '') GCS_BUCKET = os.environ.get('GCS_BUCKET', '') GCS_PREFIX = os.environ.get('GCS_PREFIX', 'cisco-sdwan') STATE_KEY = os.environ.get('STATE_KEY', 'cisco-sdwan/state.json') LOOKBACK_HOURS = int(os.environ.get('LOOKBACK_HOURS', '1')) class CatalystSDWANAPI: """Client for Cisco Catalyst SD-WAN Manager API (formerly vManage).""" def __init__(self, host, username, password): self.host = host self.username = username self.password = password self.jsessionid = None self.xsrf_token = None def authenticate(self): """Authenticate using session-based login (j_security_check).""" try: login_url = f"{self.host}/j_security_check" login_data = urllib.parse.urlencode({ 'j_username': self.username, 'j_password': self.password }).encode('utf-8') response = http.request( 'POST', login_url, body=login_data, headers={'Content-Type': 'application/x-www-form-urlencoded'}, ) if b'<html>' in response.data or response.status != 200: print(f"Authentication failed: HTTP {response.status}") return False # Extract JSESSIONID from Set-Cookie header cookie_header = response.headers.get('Set-Cookie', '') for part in cookie_header.split(','): if 'JSESSIONID=' in part: self.jsessionid = part.split('JSESSIONID=')[1].split(';')[0] break if not self.jsessionid: print("Failed to extract JSESSIONID from response") return False # Get XSRF token token_url = f"{self.host}/dataservice/client/token" headers = { 'Content-Type': 'application/json', 'Cookie': f"JSESSIONID={self.jsessionid}" } response = http.request('GET', token_url, headers=headers) if response.status == 200: self.xsrf_token = response.data.decode('utf-8').strip() print("Successfully authenticated with Catalyst SD-WAN Manager") return True else: print(f"Failed to get XSRF token: HTTP {response.status}") return False except Exception as e: print(f"Authentication error: {e}") return False def _get_headers(self): """Build headers for authenticated API requests.""" return { 'Content-Type': 'application/json', 'Accept': 'application/json', 'Cookie': f"JSESSIONID={self.jsessionid}", 'X-XSRF-TOKEN': self.xsrf_token } def _build_query(self, last_epoch_ms=None): """Build a query payload with entry_time filter.""" query = { "query": { "condition": "AND", "rules": [] }, "size": 10000 } if last_epoch_ms: query["query"]["rules"].append({ "value": [str(last_epoch_ms)], "field": "entry_time", "type": "date", "operator": "greater" }) else: query["query"]["rules"].append({ "value": [str(LOOKBACK_HOURS)], "field": "entry_time", "type": "date", "operator": "last_n_hours" }) return query def fetch_data(self, endpoint, last_epoch_ms=None): """Fetch data from a /dataservice endpoint using POST with query body.""" url = f"{self.host}/dataservice/{endpoint}" headers = self._get_headers() query = self._build_query(last_epoch_ms) try: response = http.request( 'POST', url, body=json.dumps(query), headers=headers, ) if response.status == 200: return json.loads(response.data.decode('utf-8')) else: print(f"Failed to get {endpoint}: HTTP {response.status}") return None except Exception as e: print(f"Error fetching {endpoint}: {e}") return None def load_state(bucket): """Load the last run timestamp (epoch ms) from GCS state file.""" try: blob = bucket.blob(STATE_KEY) if blob.exists(): state_data = json.loads(blob.download_as_text()) return state_data.get('last_run_time') except Exception as e: print(f"Warning: Could not load state: {e}") return None def save_state(bucket, epoch_ms): """Save the current run timestamp (epoch ms) to GCS state file.""" try: state_data = { 'last_run_time': epoch_ms, 'updated_at': datetime.now(timezone.utc).isoformat() } blob = bucket.blob(STATE_KEY) blob.upload_from_string( json.dumps(state_data), content_type='application/json' ) print(f"Saved state: last_run_time={epoch_ms}") except Exception as e: print(f"Warning: Could not save state: {e}") def upload_to_gcs(bucket, records, log_type): """Upload log records to GCS as NDJSON.""" if not records: print(f"No {log_type} records to upload") return 0 dt = datetime.now(timezone.utc) object_key = ( f"{GCS_PREFIX}/{log_type}/" f"{dt.strftime('%Y/%m/%d')}/" f"{log_type}_{dt.strftime('%Y%m%d_%H%M%S')}.ndjson" ) ndjson = '\n'.join( json.dumps(record, ensure_ascii=False) for record in records ) + '\n' blob = bucket.blob(object_key) blob.upload_from_string(ndjson, content_type='application/x-ndjson') print(f"Uploaded {len(records)} {log_type} records to gs://{GCS_BUCKET}/{object_key}") return len(records) @functions_framework.cloud_event def main(cloud_event): """ Cloud Run function triggered by Pub/Sub. Fetches audit logs, alarms, and events from Cisco Catalyst SD-WAN Manager API and writes them to GCS as NDJSON files. Args: cloud_event: CloudEvent object containing Pub/Sub message """ print(f"Starting Cisco Catalyst SD-WAN Manager log collection at {datetime.now(timezone.utc).isoformat()}") if not all([SDWAN_HOST, SDWAN_USERNAME, SDWAN_PASSWORD, GCS_BUCKET]): print("Error: Missing required environment variables") return try: bucket = storage_client.bucket(GCS_BUCKET) # Load last run timestamp last_run_time = load_state(bucket) if last_run_time: print(f"Resuming from last_run_time={last_run_time}") else: print(f"No previous state found, collecting last {LOOKBACK_HOURS} hour(s) of logs") # Authenticate api = CatalystSDWANAPI(SDWAN_HOST, SDWAN_USERNAME, SDWAN_PASSWORD) if not api.authenticate(): print("Failed to authenticate with Catalyst SD-WAN Manager") return # Current timestamp for state tracking (epoch milliseconds) current_time = int(datetime.now(timezone.utc).timestamp() * 1000) # Collect audit logs, alarms, and events endpoints = [ ('audit_logs', 'auditlog'), ('alarms', 'alarms'), ('events', 'events'), ] total_records = 0 for log_type, endpoint in endpoints: try: print(f"Collecting {log_type} from /dataservice/{endpoint}...") response_data = api.fetch_data(endpoint, last_run_time) if response_data and 'data' in response_data: count = upload_to_gcs(bucket, response_data['data'], log_type) total_records += count else: print(f"No {log_type} data returned") except Exception as e: print(f"Error processing {log_type}: {e}") continue # Update state save_state(bucket, current_time) print(f"Collection completed. Total records processed: {total_records}") except Exception as e: print(f"Function execution error: {e}") raiserequirements.txt:
functions-framework==3.* google-cloud-storage==2.* urllib3>=2.0.0
点击部署以保存并部署该函数。
等待部署完成(2-3 分钟)。
创建 Cloud Scheduler 作业
Cloud Scheduler 会定期向 Pub/Sub 主题发布消息,从而触发 Cloud Run 函数。
- 在 GCP Console 中,前往 Cloud Scheduler。
- 点击创建作业。
提供以下配置详细信息:
设置 值 名称 cisco-sdwan-log-collector-hourly区域 选择与 Cloud Run 函数相同的区域 频率 0 * * * *(每小时一次,整点时)时区 选择时区(建议选择 UTC) 目标类型 Pub/Sub 主题 选择主题 ( cisco-sdwan-trigger)消息正文 {}(空 JSON 对象)点击创建。
时间表频率选项
根据日志量和延迟时间要求选择频次:
| 频率 | Cron 表达式 | 使用场景 |
|---|---|---|
| 每隔 5 分钟 | */5 * * * * |
大批量、低延迟 |
| 每隔 15 分钟 | */15 * * * * |
搜索量中等 |
| 每小时 | 0 * * * * |
标准(推荐) |
| 每 6 小时 | 0 */6 * * * |
低成交量、批处理 |
| 每天 | 0 0 * * * |
历史数据收集 |
测试集成
- 在 Cloud Scheduler 控制台中,找到您的作业。
- 点击强制运行以手动触发作业。
- 等待几秒钟。
- 前往 Cloud Run > 服务。
- 点击函数名称 (
cisco-sdwan-log-collector)。 - 点击日志标签页。
验证函数是否已成功执行。查找:
Starting Cisco Catalyst SD-WAN Manager log collection at ... Successfully authenticated with Catalyst SD-WAN Manager Collecting audit_logs from /dataservice/auditlog... Uploaded N audit_logs records to gs://... Collection completed. Total records processed: N前往 Cloud Storage > 存储分区。
点击您的存储桶名称。
前往前缀文件夹 (
cisco-sdwan/)。验证是否已创建具有当前时间戳的新
.ndjson文件。
如果您在日志中看到错误,请执行以下操作:
- HTTP 401:检查环境变量中的 API 凭据
- HTTP 403:验证用户账号是否具有审核日志、提醒和事件所需的读取权限
- 身份验证失败:验证 Catalyst SD-WAN Manager 基本网址是否包含正确的端口(默认
8443) - 缺少环境变量:检查是否已设置所有必需的变量
在 Google SecOps 中配置 Feed 以注入 Cisco Catalyst SD-WAN Manager 日志
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
Cisco Catalyst SD-WAN Manager logs)。 - 选择 Google Cloud Storage V2 作为来源类型。
- 选择 Cisco SD-WAN 作为日志类型。
点击获取服务账号。系统会显示一个唯一的服务账号电子邮件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com复制此电子邮件地址,以便在下一步中使用。
点击下一步。
为以下输入参数指定值:
存储桶网址:输入带有前缀路径的 GCS 存储桶 URI:
gs://cisco-sdwan-logs-bucket/cisco-sdwan/- 替换:
cisco-sdwan-logs-bucket:您的 GCS 存储桶名称。cisco-sdwan/:存储日志的可选前缀/文件夹路径(留空表示根目录)。
- 替换:
来源删除选项:根据您的偏好选择删除选项:
- 永不:转移后永不删除任何文件(建议用于测试)。
- 删除已转移的文件:在成功转移后删除文件。
- 删除已转移的文件和空目录:成功转移后删除文件和空目录。
文件存在时间上限:包含在过去指定天数内修改的文件(默认值为 180 天)。
资产命名空间:资产命名空间。
注入标签:要应用于此 Feed 中事件的标签。
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
向 Google SecOps 服务账号授予 IAM 权限
Google SecOps 服务账号需要您的 GCS 存储桶的 Storage Object Viewer 角色。
- 前往 Cloud Storage > 存储分区。
- 点击您的存储桶名称。
- 前往权限标签页。
- 点击授予访问权限。
- 提供以下配置详细信息:
- 添加主账号:粘贴 Google SecOps 服务账号电子邮件地址。
- 分配角色:选择 Storage Object Viewer。
点击保存。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
Tunnel_id_label |
additional.fields |
已合并 |
additional_tag |
additional.fields |
已合并 |
count_label |
additional.fields |
已合并 |
dst_vrf_label |
additional.fields |
已合并 |
logfeature_label |
additional.fields |
已合并 |
logmodule_label |
additional.fields |
已合并 |
meta_sequenceId_label |
additional.fields |
已合并 |
msg_label |
additional.fields |
已合并 |
qfp_label |
additional.fields |
已合并 |
result_label |
additional.fields |
已合并 |
rsa_sha256_label |
additional.fields |
已合并 |
rsa_type_label |
additional.fields |
已合并 |
sequence_label |
additional.fields |
已合并 |
src_vrf_label |
additional.fields |
已合并 |
tenant_vpn_id_label |
additional.fields |
已合并 |
thread_label |
additional.fields |
已合并 |
tos_label |
additional.fields |
已合并 |
unknown_tenant_label |
additional.fields |
已合并 |
vlan_id_label |
additional.fields |
已合并 |
vpn_id_label |
additional.fields |
已合并 |
description_1 |
extensions.auth.type |
已映射:(?i)closed → AUTHTYPE_UNSPECIFIED |
msg1 |
extensions.auth.type |
已映射:authenticated → AUTHTYPE_UNSPECIFIED |
msgs |
extensions.auth.type |
已映射:(?i)success → AUTHTYPE_UNSPECIFIED |
prod_type |
extensions.auth.type |
已映射:(?i)LOGOUT → AUTHTYPE_UNSPECIFIED |
host_name |
intermediary.asset.hostname |
直接映射 |
host_name |
intermediary.hostname |
直接映射 |
inter_host |
intermediary.hostname |
直接映射 |
logmsg |
metadata.description |
直接映射 |
message_value |
metadata.description |
直接映射 |
msgs |
metadata.description |
直接映射 |
date_time |
metadata.event_timestamp |
解析为 ISO8601 |
time |
metadata.event_timestamp |
解析为 ISO8601 |
time_t |
metadata.event_timestamp |
解析为 ISO8601 |
timestamp |
metadata.event_timestamp |
解析为 ISO8601 |
description_1 |
metadata.event_type |
已映射:(?i)closed → USER_LOGOUT |
has_principal |
metadata.event_type |
已映射:true → NETWORK_CONNECTION、true → STATUS_UPDATE |
has_principal_user |
metadata.event_type |
已映射:true → USER_UNCATEGORIZED |
msg1 |
metadata.event_type |
已映射:authenticated → USER_LOGIN |
msgs |
metadata.event_type |
已映射:(?i)success → USER_LOGIN |
prod_type |
metadata.event_type |
已映射:(?i)LOGOUT → USER_LOGOUT |
prod_type |
metadata.product_event_type |
直接映射 |
log_id |
metadata.product_log_id |
直接映射 |
logid |
metadata.product_log_id |
直接映射 |
application_protocol |
network.application_protocol |
已映射:(?i)SSH → SSH |
message |
network.application_protocol |
映射:(?i)SSH → SSH、(?i)netconf → NETCONF、(?i)dhcp → DHCP |
type1 |
network.dhcp.type |
已映射:DHCPDISCOVER → DISCOVER |
message |
network.ip_protocol |
已映射:(?i)tcp → TCP |
network_protocol |
network.ip_protocol |
直接映射 |
bytes |
network.sent_bytes |
直接映射 |
session_id |
network.session_id |
直接映射 |
network_host |
network.tls.cipher |
直接映射 |
hostname |
principal.asset.hostname |
直接映射 |
host |
principal.asset.ip |
已合并 |
initiator_ip |
principal.asset.ip |
已合并 |
ip |
principal.asset.ip |
已合并 |
ipaddress |
principal.asset.ip |
已合并 |
logusersrcip |
principal.asset.ip |
已合并 |
peer_ip |
principal.asset.ip |
已合并 |
principal_ip |
principal.asset.ip |
已合并 |
principal_ip1 |
principal.asset.ip |
已合并 |
proxy_host |
principal.asset.ip |
已合并 |
src_ip |
principal.asset.ip |
已合并 |
system_ip |
principal.asset.ip |
已合并 |
addr |
principal.hostname |
直接映射 |
hostname |
principal.hostname |
直接映射 |
host |
principal.ip |
已合并 |
initiator_ip |
principal.ip |
已合并 |
ip |
principal.ip |
已合并 |
ipaddress |
principal.ip |
已合并 |
logusersrcip |
principal.ip |
已合并 |
peer_ip |
principal.ip |
已合并 |
principal_ip |
principal.ip |
已合并 |
principal_ip1 |
principal.ip |
已合并 |
proxy_host |
principal.ip |
已合并 |
src_ip |
principal.ip |
已合并 |
system_ip |
principal.ip |
已合并 |
initiator_port |
principal.port |
直接映射 |
port |
principal.port |
直接映射 |
ports |
principal.port |
直接映射 |
principal_port |
principal.port |
直接映射 |
principal_port1 |
principal.port |
直接映射 |
src_port |
principal.port |
直接映射 |
process_path |
principal.process.file.full_path |
直接映射 |
parent_pid |
principal.process.parent_process.pid |
直接映射 |
pid |
principal.process.pid |
直接映射 |
process_label |
principal.resource.attribute.labels |
已合并 |
process_name_label |
principal.resource.attribute.labels |
已合并 |
loguser |
principal.user.userid |
直接映射 |
user1 |
principal.user.userid |
直接映射 |
user_id |
principal.user.userid |
直接映射 |
username |
principal.user.userid |
直接映射 |
action |
security_result.action |
已合并 |
message |
security_result.action |
已映射:(?i)(succeeded/accounting start/open/occurred/update/successfully/success) → `acti... |
classification |
security_result.category_details |
已合并 |
msg1 |
security_result.description |
直接映射 |
Malware_label |
security_result.detection_fields |
已合并 |
direction_label |
security_result.detection_fields |
已合并 |
egress_interface_label |
security_result.detection_fields |
已合并 |
ingress_interface_label |
security_result.detection_fields |
已合并 |
log_prefix_label |
security_result.detection_fields |
已合并 |
log_reason_label |
security_result.detection_fields |
已合并 |
packet_label |
security_result.detection_fields |
已合并 |
policy_label |
security_result.detection_fields |
已合并 |
port_label |
security_result.detection_fields |
已合并 |
protocol_label |
security_result.detection_fields |
已合并 |
proxy_port_label |
security_result.detection_fields |
已合并 |
sent_bytes_1_label |
security_result.detection_fields |
已合并 |
sent_bytes_2_label |
security_result.detection_fields |
已合并 |
tty_label |
security_result.detection_fields |
已合并 |
type_label |
security_result.detection_fields |
已合并 |
udp_packets_label |
security_result.detection_fields |
已合并 |
priority |
security_result.severity |
已映射:1 → LOW |
description_1 |
security_result.summary |
直接映射 |
dst_ip |
target.asset.ip |
已合并 |
ipadres |
target.asset.ip |
已合并 |
logdeviceid |
target.asset.ip |
已合并 |
responder_ip |
target.asset.ip |
已合并 |
target_ip |
target.asset.ip |
已合并 |
target_ip1 |
target.asset.ip |
已合并 |
filename |
target.file.names |
已合并 |
dst_ip |
target.ip |
已合并 |
ipadres |
target.ip |
已合并 |
logdeviceid |
target.ip |
已合并 |
responder_ip |
target.ip |
已合并 |
target_ip |
target.ip |
已合并 |
target_ip1 |
target.ip |
已合并 |
dst_port |
target.port |
直接映射 |
prts |
target.port |
直接映射 |
responder_port |
target.port |
直接映射 |
target_port |
target.port |
直接映射 |
target_port1 |
target.port |
直接映射 |
filetype |
target.process.file.mime_type |
直接映射 |
parent_identifier_label |
target.resource.attribute.labels |
已合并 |
specific_identifer_label |
target.resource.attribute.labels |
已合并 |
target_name |
target.resource.name |
直接映射 |
instance_id |
target.resource.product_object_id |
直接映射 |
target_username |
target.user.userid |
直接映射 |
user |
target.user.userid |
直接映射 |
| 不适用 | extensions.auth.type |
常量:AUTHTYPE_UNSPECIFIED |
| 不适用 | metadata.event_type |
常量:USER_LOGIN |
| 不适用 | network.application_protocol |
常量:SSH |
| 不适用 | network.dhcp.type |
常量:DISCOVER |
| 不适用 | network.ip_protocol |
常量:TCP |
| 不适用 | security_result.severity |
常量:LOW |
rsa_type |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
sha_256 |
event.idm.read_only_udm.additional.fields |
从变更日志映射 |
NETCONF |
event.idm.read_only_udm.network.application_protocol |
从变更日志映射 |
TCP |
event.idm.read_only_udm.network.ip_protocol |
从变更日志映射 |
DHCP |
event.idm.read_only_udm.network.application_protocol |
从变更日志映射 |
username1 |
target.user.userid |
从变更日志映射 |
security_result.action |
ALLOW |
从变更日志映射 |
ip_1 |
principal.ip |
从变更日志映射 |
ip_2 |
target.ip |
从变更日志映射 |
port_1 |
principal.port |
从变更日志映射 |
port_2 |
target.port |
从变更日志映射 |
message_1 |
metadata.description |
从变更日志映射 |
malware |
security_result.detection_fields |
从变更日志映射 |