收集 Netskope Web 代理日志
本文档介绍了如何使用 Cloud Storage V2 将 Netskope 网络代理日志注入到 Google Security Operations。
Netskope 提供了一种云原生安全 Web 网关,可实时检查和控制 Web 流量。Web 事务 (WebTx) 日志会捕获 Netskope 代理处理的每个 HTTP 和 HTTPS 会话的详细记录,包括用户身份、应用、网址类别、威胁和 DLP 判定以及网络元数据。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 启用了 Cloud Storage API 的 Google Cloud 项目
- 创建和管理 Cloud Storage 存储桶的权限
- 管理 Cloud Storage 存储桶的 Identity and Access Management (IAM) 政策的权限
- 使用管理员凭证对 Netskope 租户的特权访问权限
选项 1:将 Netskope 日志流式传输到 Cloud Storage
如果您的租户已启用 Netskope 日志流式传输订阅,请使用此选项。Netskope Log Streaming 会以 240 秒的固定间隔将 WebTx 日志文件直接推送到您的 Cloud Storage 存储桶,并以压缩的 .gzip 文件形式存储。
创建 Cloud Storage 存储桶
- 前往 Google Cloud 控制台。
- 选择您的项目或创建一个新项目。
- 在导航菜单中,前往 Cloud Storage > 存储桶。
- 点击创建存储分区。
提供以下配置详细信息:
设置 值 为存储桶命名 输入一个全局唯一的名称(例如 netskope-webtx-logs)位置类型 根据您的需求进行选择(区域级、双区域级、多区域级) 位置 选择距离贵组织最近的位置(例如 us-central1)存储类别 标准(推荐用于频繁访问的日志) 访问权限控制 均匀(推荐) 保护工具 可选:启用对象版本控制或保留政策 点击创建。
创建 Google Cloud 服务账号
Netskope 日志流式传输需要 Google Cloud 服务账号具有对 Cloud Storage 存储桶的写入权限。Netskope 会在推送日志文件时使用此服务账号的 JSON 密钥文件进行身份验证。
- 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。
- 点击创建服务账号。
- 提供以下配置详细信息:
- 服务账号名称:输入
netskope-log-streaming - 服务账号说明:输入
Service account for Netskope Log Streaming to push WebTx logs to GCS
- 服务账号名称:输入
- 点击创建并继续。
- 在向此服务账号授予对项目的访问权限部分中:
- 点击选择角色。
- 搜索并选择 Storage Object Creator。
- 点击继续。
- 点击完成。
生成 JSON 密钥
- 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号,然后点击相应服务账号
netskope-log-streaming。 - 选择密钥标签页。
- 依次点击添加密钥> 创建新密钥。
- 选择 JSON 作为密钥类型。
- 点击创建。
系统会自动下载一个 JSON 密钥文件。请妥善保存此文件。您将在下一部分中将此文件的完整内容粘贴到 Netskope 中。
授予对 Cloud Storage 存储桶的写入权限
- 在 Google Cloud 控制台中,前往 Cloud Storage > 存储桶。
- 点击您的存储桶名称(例如
netskope-webtx-logs)。 - 前往权限标签页。
- 点击授予访问权限。
- 提供以下配置详细信息:
- 添加主账号:输入服务账号电子邮件地址(例如
netskope-log-streaming@YOUR_PROJECT_ID.iam.gserviceaccount.com) - 分配角色:选择 Storage Object Creator
- 添加主账号:输入服务账号电子邮件地址(例如
点击保存。
创建日志流
- 使用管理员凭证登录 Netskope 租户。
- 依次前往设置 > 工具 > 日志流式传输。
- 点击创建数据流。
- 在名称字段中,输入人类可读的流名称。例如
Google SecOps WebTx GCS。 - 选择 GCP Cloud Storage 作为目标位置类型。
提供以下配置详细信息:
存储桶:输入 Cloud Storage 存储桶的名称(例如
netskope-webtx-logs)。- 路径(可选):输入存储桶中将用于存储日志的文件夹路径(例如 `netskope/webtx/{%Y}`)。
私钥:粘贴上一部分中生成的 JSON 密钥文件的完整内容,作为以
{开头、以}结尾的单个 JSON 对象。其中包括type、project_id、private_key_id、private_key、client_email和client_id字段。
查看推送选项:推送频率为持续的 240 秒。
点击保存(或创建)以启用数据流。Netskope 会通过向存储桶写入名为
netskope-test-file.txt的测试对象来验证凭证。
在 Google SecOps 中配置 Feed,以从 Cloud Storage 注入 Netskope WebTx 日志
请按照以下步骤创建 Google SecOps Feed 并授予 IAM 权限:
检索 Google SecOps 服务账号
Google SecOps 使用唯一的服务账号从您的 Cloud Storage 存储桶中读取数据。您必须向此服务账号授予对存储桶的访问权限。
- 前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
Netskope WebTx Logs)。 - 选择 Google Cloud Storage V2 作为来源类型。
- 选择 Netskope Web Proxy 作为日志类型。
- 点击获取服务账号。
系统会显示一个专属的服务账号邮箱,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com复制此邮箱,以便在下一步中使用。
点击下一步。
为以下输入参数指定值:
存储桶网址:输入带有前缀路径的 Cloud Storage 存储桶 URI:
gs://netskope-webtx-logs/netskope/webtx/- 替换:
netskope-webtx-logs:您的 Cloud Storage 存储桶名称。netskope/webtx/:在 Netskope 日志流式传输中配置的路径前缀(留空表示根路径)。
- 替换:
来源删除选项:根据您的偏好选择删除选项:
- 永不删除文件:永不从源中删除文件(建议用于测试)。
- 删除已转移的文件和空目录:在成功完成提取后,从来源中删除文件和空目录。
文件存在时间上限:包含过去指定天数内修改过的文件(默认值为 180 天)
资源命名空间:资源命名空间
注入标签:要应用于此 Feed 中事件的标签
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
向 Google SecOps 服务账号授予 IAM 权限
Google SecOps 服务账号需要对您的 Cloud Storage 存储桶拥有两个角色:Storage Object Viewer(用于读取日志对象)和存储桶级角色(用于读取存储桶元数据)。
- 前往 Cloud Storage > 存储桶。
- 点击您的存储桶名称(例如
netskope-webtx-logs)。 - 前往权限标签页。
- 点击授予访问权限。
- 提供以下配置详细信息:
- 添加主账号:粘贴 Google SecOps 服务账号邮箱(例如
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com) - 分配角色:选择以下两个角色:
- Storage Object Viewer:读取日志对象。
- Storage Legacy Bucket Reader:读取存储桶元数据。如果您选择了删除已转移的文件和空目录删除选项,请改为选择存储旧版存储桶写入者,该角色也会授予删除权限。
- 添加主账号:粘贴 Google SecOps 服务账号邮箱(例如
- 点击保存。
方法 2:使用 Netskope Cloud Exchange Log Shipper to Cloud Storage
如果您已部署 Netskope Cloud Exchange 平台并配置了 Log Shipper 模块,请使用此选项。日志传送程序会从您的 Netskope 租户拉取 WebTx 日志,并以压缩的 .gzip 文件形式将其推送到 Cloud Storage 存储桶,然后 Google SecOps 会通过 Cloud Storage V2 Feed 读取这些日志。
准备工作 (Cloud Exchange)
请确保您满足以下额外前提条件,才能使用此选项:
- 已配置租户插件和 Log Shipper 模块的 Netskope Cloud Exchange 租户。
- 在 Log Shipper 中配置的 Netskope CLS 源插件(用于从 Netskope 租户提取数据)。
- 为存储 WebTx 日志而创建的 Cloud Storage 存储桶。如果您尚未创建存储桶,请按照创建 Cloud Storage 存储桶中的步骤操作。
- 具有 Cloud Storage 存储桶写入权限的 Google Cloud 服务账号。如果您尚未创建服务账号,请按照创建 Google Cloud 服务账号、生成 JSON 密钥和授予对 Cloud Storage 存储桶的写入权限中的步骤操作。
配置 Cloud Storage 目标插件
- 在 Cloud Exchange 中,依次前往设置 > 插件商店。
- 搜索并选择 Google Cloud SCC (Google GCS) 插件。
- 点击配置新插件(或添加新的插件配置)。
- 提供以下配置详细信息:
- 配置名称:输入一个描述性名称(例如
GCS WebTx Destination)。 - 映射:选择一个映射文件。对于以原始
.gzip文件推送的 WebTx 日志,系统不会应用任何映射转换。 - 存储桶:输入 Cloud Storage 存储桶的名称(例如
netskope-webtx-logs)。 - 路径(可选):输入文件夹路径(例如
netskope/webtx/)。 - 密钥文件:粘贴服务账号 JSON 密钥文件的完整内容,而不仅仅是
private_key值。
- 配置名称:输入一个描述性名称(例如
- 点击保存。
- 新插件配置将显示在日志传送程序 > 插件页面上。
配置业务规则(可选)
默认情况下,所有业务规则会过滤所有提醒和事件。如果您想专门过滤 WebTx 日志,请创建新的业务规则:
- 在 Log Shipper 中,前往业务规则。
- 点击创建新规则。
- 输入规则名称(例如
WebTx Only)。 - 配置过滤器,使其仅包含 WebTx 数据。
- 点击保存。
配置日志传送
- 在日志传送器中,前往日志传送。
- 点击添加日志传送配置。
- 提供以下配置详细信息:
- Source Configuration(来源配置):选择 Netskope CLS 来源插件(例如
WebTxCLS或Netskope CLS)。 - 目标配置:选择您配置的 Cloud Storage 目标插件(例如
GCS WebTx Destination)。 - 业务规则:选择业务规则(例如
All或WebTx Only)。
- Source Configuration(来源配置):选择 Netskope CLS 来源插件(例如
点击保存。
如需获取更多历史数据,请点击日志传送操作中的提取历史数据图标。
选择历史记录起始和结束日期范围,然后点击提取。
在 Google SecOps 中配置 Feed,以从 Cloud Storage 注入 Netskope WebTx 日志
按照与“Netskope 日志流式传输”选项中相同的步骤创建 Google SecOps Feed 并授予 IAM 权限:
- 检索 Google SecOps 服务账号 - 创建以 Google Cloud Storage V2 为来源类型、以 Netskope Web 代理为日志类型的 Feed。
- 向 Google SecOps 服务账号授予 IAM 权限 - 向 Google SecOps 服务账号授予 Cloud Storage 存储桶的 Storage Object Viewer 和 Storage Legacy Bucket Reader 角色(如果使用删除选项,则使用 Storage Legacy Bucket Writer)。
验证日志传送
如需验证 WebTx 日志是否已传送至 Cloud Storage 存储桶,请执行以下操作:
- 在 Cloud Exchange 中,前往 Log Shipper > Log Delivery(日志传送)。
- 检查发送到外部接收方的日志/WebTx 总数和发送到存储桶的 WebTx 总数列,确认数据是否正在推送到目标位置。
- 在 GCS 存储桶中,确认 Log Shipper 正在写入
.gzip文件。
配置 Log Shipper 全局设置(可选)
只有管理员可以更改日志传送程序全局设置。前往设置 > Log Shipper。有两个标签页:“常规”和“映射”。
在常规标签页中,您可以配置日志传送的重试策略:
- 默认(3 次重试):如果日志传送失败,Log Shipper 将尝试 3 次将日志推送到目标位置。如果 3 次重试尝试全部失败,系统会舍弃相应批次的日志。
重试直至成功传送:无限次重试,直至成功传送日志。
您还可以为提醒、事件和 WebTx 启用 UTF-8 编码,以确保无缝处理 UTF-8 编码的数据。此功能默认处于停用状态。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
| applicationType | security_result.detection_fields[].key: "applicationType", security_result.detection_fields[].value: applicationType | 直接从相应的 CEF 字段映射 |
| appcategory | security_result.category_details[]: appcategory | 直接从相应的 CEF 字段映射 |
| browser | security_result.detection_fields[].key: "browser", security_result.detection_fields[].value: browser | 直接从相应的 CEF 字段映射 |
| c-ip | principal.asset.ip[]: c-ip, principal.ip[]: c-ip | 直接从对应的 JSON 字段映射 |
| cci | security_result.detection_fields[].key: "cci",security_result.detection_fields[].value: cci | 直接从相应的 CEF 字段映射 |
| ccl | security_result.confidence:派生值;security_result.confidence_details:ccl | security_result.confidence 根据 ccl 的值派生:“excellent”或“high”映射到 HIGH_CONFIDENCE,“medium”映射到 MEDIUM_CONFIDENCE,“low”或“poor”映射到 LOW_CONFIDENCE,“unknown”或“not_defined”映射到 UNKNOWN_CONFIDENCE。security_result.confidence_details 直接从 ccl 映射。 |
| clientBytes | network.sent_bytes: clientBytes | 直接从相应的 CEF 字段映射 |
| cs-access-method | additional.fields[].key: "accessMethod", additional.fields[].value.string_value: cs-access-method | 直接从对应的 JSON 字段映射 |
| cs-app | additional.fields[].key: "x-cs-app", additional.fields[].value.string_value: cs-app, principal.application: cs-app | 直接从对应的 JSON 字段映射 |
| cs-app-activity | additional.fields[].key: "x-cs-app-activity", additional.fields[].value.string_value: cs-app-activity | 直接从对应的 JSON 字段映射 |
| cs-app-category | additional.fields[].key: "x-cs-app-category", additional.fields[].value.string_value: cs-app-category | 直接从对应的 JSON 字段映射 |
| cs-app-cci | additional.fields[].key: "x-cs-app-cci", additional.fields[].value.string_value: cs-app-cci | 直接从对应的 JSON 字段映射 |
| cs-app-ccl | additional.fields[].key: "x-cs-app-ccl", additional.fields[].value.string_value: cs-app-ccl | 直接从对应的 JSON 字段映射 |
| cs-app-from-user | additional.fields[].key: "x-cs-app-from-user", additional.fields[].value.string_value: cs-app-from-user, principal.user.email_addresses[]: cs-app-from-user | 直接从对应的 JSON 字段映射 |
| cs-app-instance-id | additional.fields[].key: "x-cs-app-instance-id", additional.fields[].value.string_value: cs-app-instance-id | 直接从对应的 JSON 字段映射 |
| cs-app-object-name | additional.fields[].key: "x-cs-app-object-name", additional.fields[].value.string_value: cs-app-object-name | 直接从对应的 JSON 字段映射 |
| cs-app-object-type | additional.fields[].key: "x-cs-app-object-type", additional.fields[].value.string_value: cs-app-object-type | 直接从对应的 JSON 字段映射 |
| cs-app-suite | additional.fields[].key: "x-cs-app-suite", additional.fields[].value.string_value: cs-app-suite | 直接从对应的 JSON 字段映射 |
| cs-app-tags | additional.fields[].key: "x-cs-app-tags", additional.fields[].value.string_value: cs-app-tags | 直接从对应的 JSON 字段映射 |
| cs-bytes | network.sent_bytes: cs-bytes | 直接从对应的 JSON 字段映射 |
| cs-content-type | additional.fields[].key: "sc-content-type", additional.fields[].value.string_value: cs-content-type | 直接从对应的 JSON 字段映射 |
| cs-dns | target.asset.hostname[]: cs-dns, target.hostname: cs-dns | 直接从对应的 JSON 字段映射 |
| cs-host | target.asset.hostname[]: cs-host, target.hostname: cs-host | 直接从对应的 JSON 字段映射 |
| cs-method | network.http.method: cs-method | 直接从对应的 JSON 字段映射 |
| cs-referer | network.http.referral_url: cs-referer | 直接从对应的 JSON 字段映射 |
| cs-uri | additional.fields[].key: "cs-uri", additional.fields[].value.string_value: cs-uri | 直接从对应的 JSON 字段映射 |
| cs-uri-path | additional.fields[].key: "x-cs-uri-path", additional.fields[].value.string_value: cs-uri-path | 直接从对应的 JSON 字段映射 |
| cs-uri-port | additional.fields[].key: "cs-uri-port", additional.fields[].value.string_value: cs-uri-port | 直接从对应的 JSON 字段映射 |
| cs-uri-scheme | network.application_protocol: cs-uri-scheme | 转换为大写后直接从对应的 JSON 字段映射 |
| cs-user-agent | network.http.parsed_user_agent:解析的用户代理,network.http.user_agent:cs-user-agent | network.http.parsed_user_agent 是通过使用“parseduseragent”过滤条件解析 cs-user-agent 字段派生出来的 |
| cs-username | principal.user.userid: cs-username | 直接从对应的 JSON 字段映射 |
| 日期 | metadata.event_timestamp.seconds:来自日期和时间字段的纪元秒数,metadata.event_timestamp.nanos:0 | 日期和时间会合并并转换为纪元秒和纳秒。纳秒设置为 0。 |
| device | intermediary.hostname: device | 直接从相应的 CEF 字段映射 |
| dst | target.ip[]: dst | 直接从相应的 CEF 字段映射 |
| dst_country | target.location.country_or_region: dst_country | 直接从相应的 grokked 字段映射 |
| dst_ip | target.asset.ip[]: dst_ip, target.ip[]: dst_ip | 直接从相应的 grokked 字段映射 |
| dst_location | target.location.city: dst_location | 直接从相应的 grokked 字段映射 |
| dst_region | target.location.state: dst_region | 直接从相应的 grokked 字段映射 |
| dst_zip | 未映射 | 此字段未映射到 UDM |
| duser | target.user.email_addresses[]: duser, target.user.user_display_name: duser | 直接从相应的 CEF 字段映射 |
| dvchost | about.hostname: dvchost, target.asset.hostname[]: dvchost, target.hostname: dvchost | 直接从相应的 CEF 字段映射 |
| event_timestamp | metadata.event_timestamp.seconds: event_timestamp | 直接从相应的 grokked 字段映射 |
| 主机名 | target.asset.hostname[]:主机名,target.hostname:主机名 | 直接从相应的 CEF 字段映射 |
| 事件 ID | security_result.detection_fields[].key: "IncidentID", security_result.detection_fields[].value: IncidentID | 直接从相应的 CEF 字段映射 |
| 中介 | 中介:intermediary | 直接从相应的 CEF 字段映射 |
| md5 | target.file.md5: md5 | 直接从相应的 CEF 字段映射 |
| 消息 | 各种 UDM 字段 | 系统会根据消息字段是否包含“CEF”来解析该字段。如果包含,则将其视为 CEF 日志。否则,系统会将其解析为以空格分隔的字符串或 JSON。 |
| mwDetectionEngine | additional.fields[].key: "mwDetectionEngine", additional.fields[].value.string_value: mwDetectionEngine | 直接从相应的 CEF 字段映射 |
| mwType | metadata.description: mwType | 直接从相应的 CEF 字段映射 |
| os | principal.platform:派生值 | 平台派生自 os 字段:“Windows”映射到 WINDOWS,“MAC”映射到 MAC,“LINUX”映射到 LINUX |
| 页面 | network.http.referral_url: page | 直接从对应的 CEF 字段映射 |
| 引荐来源网址 | network.http.referral_url:引荐来源网址 | 直接从对应的 CEF 字段映射 |
| requestClientApplication | network.http.parsed_user_agent:已解析的用户代理;network.http.user_agent:requestClientApplication | network.http.parsed_user_agent 是通过使用“parseduseragent”过滤器解析 requestClientApplication 字段而得出的 |
| request_method | network.http.method: request_method | 直接从相应的 grokked 字段映射 |
| rs-status | additional.fields[].key: "rs-status", additional.fields[].value.string_value: rs-status, network.http.response_code: rs-status | 直接从对应的 JSON 字段映射 |
| s-ip | target.asset.ip[]: s-ip, target.ip[]: s-ip | 直接从对应的 JSON 字段映射 |
| sc-bytes | network.received_bytes:sc-bytes | 直接从对应的 JSON 字段映射 |
| sc-content-type | additional.fields[].key: "sc-content-type", additional.fields[].value.string_value: sc-content-type | 直接从对应的 JSON 字段映射 |
| sc-status | network.http.response_code: sc-status | 直接从对应的 JSON 字段映射 |
| serverBytes | network.received_bytes: serverBytes | 直接从相应的 CEF 字段映射 |
| sha256 | target.file.sha256:sha256 | 直接从对应的 CEF 字段映射 |
| src | principal.ip[]: src | 直接从相应的 CEF 字段映射 |
| src_country | principal.location.国家/地区: src_国家/地区 | 直接从相应的 grokked 字段映射 |
| src_ip | principal.asset.ip[]: src_ip, principal.ip[]: src_ip | 直接从相应的 grokked 字段映射 |
| src_location | principal.location.city: src_location | 直接从相应的 grokked 字段映射 |
| src_region | principal.location.state: src_region | 直接从相应的 grokked 字段映射 |
| src_latitude | 未映射 | 此字段未映射到 UDM |
| src_longitude | 未映射 | 此字段未映射到 UDM |
| src_zip | 未映射 | 此字段未映射到 UDM |
| suser | principal.user.user_display_name: suser | 直接从相应的 CEF 字段映射 |
| target_host | target.asset.hostname[]: target_host, target.hostname: target_host | 直接从相应的 grokked 字段映射 |
| 时间 | metadata.event_timestamp.seconds:日期和时间字段中的纪元秒数,metadata.event_timestamp.nanos:0 | 日期和时间会合并并转换为纪元秒和纳秒。纳秒设置为 0。 |
| 时间戳 | metadata.event_timestamp.seconds: 时间戳 | 直接从相应的 CEF 字段映射 |
| ts | metadata.event_timestamp.seconds:来自 ts 的纪元秒数,metadata.event_timestamp.nanos:0 | 时间戳会转换为纪元秒和纳秒。纳秒设置为 0。 |
| 网址 | target.url:网址 | 直接从相应的 CEF 字段映射 |
| user_agent | network.http.parsed_user_agent:已解析的用户代理;network.http.user_agent:用户代理 | network.http.parsed_user_agent 是通过使用“parseduseragent”过滤器解析 user_agent 字段得出的 |
| user_key | principal.user.email_addresses[]: user_key | 直接从相应的 grokked 字段映射 |
| 版本 | 未映射 | 此字段未映射到 UDM |
| x-c-browser | additional.fields[].key: "x-c-browser", additional.fields[].value.string_value: x-c-browser | 直接从对应的 JSON 字段映射 |
| x-c-browser-version | additional.fields[].key: "x-c-browser-version", additional.fields[].value.string_value: x-c-browser-version | 直接从对应的 JSON 字段映射 |
| x-c-country | principal.location.country_or_region: x-c-country | 直接从对应的 JSON 字段映射 |
| x-c-device | additional.fields[].key: "x-c-device", additional.fields[].value.string_value: x-c-device | 直接从对应的 JSON 字段映射 |
| x-c-latitude | principal.location.region_coordinates.latitude: x-c-latitude | 直接从对应的 JSON 字段映射 |
| x-c-local-time | security_result.detection_fields[].key: "x-c-local-time", security_result.detection_fields[].value: x-c-local-time | 直接从对应的 JSON 字段映射 |
| x-c-location | principal.location.name: x-c-location | 直接从对应的 JSON 字段映射 |
| x-c-longitude | principal.location.region_coordinates.longitude: x-c-longitude | 直接从对应的 JSON 字段映射 |
| x-c-os | principal.platform:派生值 | 平台派生自 x-c-os 字段:“Windows”映射到 WINDOWS,“MAC”映射到 MAC,“LINUX”映射到 LINUX |
| x-c-区域 | principal.location.state: x-c-区域 | 直接从对应的 JSON 字段映射 |
| x-c-zipcode | additional.fields[].key: "x-c-zipcode", additional.fields[].value.string_value: x-c-zipcode | 直接从对应的 JSON 字段映射 |
| x-category | additional.fields[].key: "x-category", additional.fields[].value.string_value: x-category | 直接从对应的 JSON 字段映射 |
| x-category-id | additional.fields[].key: "x-category-id", additional.fields[].value.string_value: x-category-id | 直接从对应的 JSON 字段映射 |
| x-cs-access-method | additional.fields[].key: "accessMethod", additional.fields[].value.string_value: x-cs-access-method | 直接从对应的 JSON 字段映射 |
| x-cs-app | principal.application: x-cs-app, additional.fields[].key: "x-cs-app", additional.fields[].value.string_value: x-cs-app | 直接从对应的 JSON 字段映射 |
| x-cs-app-activity | additional.fields[].key: "x-cs-app-activity", additional.fields[].value.string_value: x-cs-app-activity | 直接从对应的 JSON 字段映射 |
| x-cs-app-category | additional.fields[].key: "x-cs-app-category", additional.fields[].value.string_value: x-cs-app-category | 直接从对应的 JSON 字段映射 |
| x-cs-app-cci | additional.fields[].key: "x-cs-app-cci", additional.fields[].value.string_value: x-cs-app-cci | 直接从对应的 JSON 字段映射 |
| x-cs-app-from-user | additional.fields[].key: "x-cs-app-from-user", additional.fields[].value.string_value: x-cs-app-from-user | 直接从对应的 JSON 字段映射 |
| x-cs-app-object-id | additional.fields[].key: "x-cs-app-object-id", additional.fields[].value.string_value: x-cs-app-object-id | 直接从对应的 JSON 字段映射 |
| x-cs-app-object-name | additional.fields[].key: "x-cs-app-object-name", additional.fields[].value.string_value: x-cs-app-object-name | 直接从对应的 JSON 字段映射 |
| x-cs-app-object-type | additional.fields[].key: "x-cs-app-object-type", additional.fields[].value.string_value: x-cs-app-object-type | 直接从对应的 JSON 字段映射 |
| x-cs-app-suite | additional.fields[].key: "x-cs-app-suite", additional.fields[].value.string_value: x-cs-app-suite | 直接从对应的 JSON 字段映射 |
| x-cs-app-tags | additional.fields[].key: "x-cs-app-tags", additional.fields[].value.string_value: x-cs-app-tags | 直接从对应的 JSON 字段映射 |
| x-cs-app-to-user | additional.fields[].key: "x-cs-app-to-user", additional.fields[].value.string_value: x-cs-app-to-user | 直接从对应的 JSON 字段映射 |
| x-cs-dst-ip | security_result.detection_fields[].key: "x-cs-dst-ip", security_result.detection_fields[].value: x-cs-dst-ip, target.asset.ip[]: x-cs-dst-ip, target.ip[]: x-cs-dst-ip | 直接从对应的 JSON 字段映射 |
| x-cs-dst-port | security_result.detection_fields[].key: "x-cs-dst-port", security_result.detection_fields[].value: x-cs-dst-port, target.port: x-cs-dst-port | 直接从对应的 JSON 字段映射 |
| x-cs-http-version | security_result.detection_fields[].key: "x-cs-http-version", security_result.detection_fields[].value: x-cs-http-version | 直接从对应的 JSON 字段映射 |
| x-cs-page-id | additional.fields[].key: "x-cs-page-id", additional.fields[].value.string_value: x-cs-page-id | 直接从对应的 JSON 字段映射 |
| x-cs-session-id | network.session_id:x-cs-session-id | 直接从对应的 JSON 字段映射 |
| x-cs-site | additional.fields[].key: "x-cs-site", additional.fields[].value.string_value: x-cs-site | 直接从对应的 JSON 字段映射 |
| x-cs-sni | network.tls.client.server_name: x-cs-sni | 直接从对应的 JSON 字段映射 |
| x-cs-src-ip | principal.asset.ip[]: x-cs-src-ip, principal.ip[]: x-cs-src-ip, security_result.detection_fields[].key: "x-cs-src-ip", security_result.detection_fields[].value: x-cs-src-ip | 直接从对应的 JSON 字段映射 |
| x-cs-src-ip-egress | principal.asset.ip[]: x-cs-src-ip-egress, principal.ip[]: x-cs-src-ip-egress, security_result.detection_fields[].key: "x-cs-src-ip-egress", security_result.detection_fields[].value: x-cs-src-ip-egress | 直接从对应的 JSON 字段映射 |
| x-cs-src-port | principal.port: x-cs-src-port, security_result.detection_fields[].key: "x-cs-src-port", security_result.detection_fields[].value: x-cs-src-port | 直接从对应的 JSON 字段映射 |
| x-cs-ssl-cipher | network.tls.cipher: x-cs-ssl-cipher | 直接从对应的 JSON 字段映射 |
| x-cs-ssl-fronting-error | security_result.detection_fields[].key: "x-cs-ssl-fronting-error", security_result.detection_fields[].value: x-cs-ssl-fronting-error | 直接从对应的 JSON 字段映射 |
| x-cs-ssl-handshake-error | security_result.detection_fields[].key: "x-cs-ssl-handshake-error", security_result.detection_fields[].value: x-cs-ssl-handshake-error | 直接从对应的 JSON 字段映射 |
| x-cs-ssl-ja3 | network.tls.client.ja3: x-cs-ssl-ja3 | 直接从对应的 JSON 字段映射 |
| x-cs-ssl-version | network.tls.version: x-cs-ssl-version | 直接从对应的 JSON 字段映射 |
| x-cs-timestamp | metadata.event_timestamp.seconds: x-cs-timestamp | 直接从对应的 JSON 字段映射 |
| x-cs-traffic-type | additional.fields[].key: "trafficType", additional.fields[].value.string_value: x-cs-traffic-type | 直接从对应的 JSON 字段映射 |
| x-cs-tunnel-src-ip | security_result.detection_fields[].key: "x-cs-tunnel-src-ip", security_result.detection_fields[].value: x-cs-tunnel-src-ip | 直接从对应的 JSON 字段映射 |
| x-cs-uri-path | additional.fields[].key: "x-cs-uri-path", additional.fields[].value.string_value: x-cs-uri-path | 直接从对应的 JSON 字段映射 |
| x-cs-url | target.url: x-cs-url | 直接从对应的 JSON 字段映射 |
| x-cs-userip | security_result.detection_fields[].key: "x-cs-userip", security_result.detection_fields[].value: x-cs-userip | 直接从对应的 JSON 字段映射 |
| x-other-category | security_result.category_details[]: x-other-category | 直接从对应的 JSON 字段映射 |
| x-other-category-id | security_result.detection_fields[].key: "x-other-category-id", security_result.detection_fields[].value: x-other-category-id | 直接从对应的 JSON 字段映射 |
| x-policy-action | security_result.action:派生值,security_result.action_details:x-policy-action | security_result.action 是通过将 x-policy-action 转换为大写派生出来的。如果大写值为“ALLOW”或“BLOCK”,则直接使用该值。否则,不会进行映射。security_result.action_details 直接从 x-policy-action 映射。 |
| x-policy-dst-host | security_result.detection_fields[].key: "x-policy-dst-host", security_result.detection_fields[].value: x-policy-dst-host | 直接从对应的 JSON 字段映射 |
| x-policy-dst-host-source | security_result.detection_fields[].key: "x-policy-dst-host-source", security_result.detection_fields[].value: x-policy-dst-host-source | 直接从对应的 JSON 字段映射 |
| x-policy-dst-ip | security_result.detection_fields[].key: "x-policy-dst-ip", security_result.detection_fields[].value: x-policy-dst-ip | 直接从对应的 JSON 字段映射 |
| x-policy-name | security_result.rule_name: x-policy-name | 直接从对应的 JSON 字段映射 |
| x-policy-src-ip | security_result.detection_fields[].key: "x-policy-src-ip", security_result.detection_fields[].value: x-policy-src-ip | 直接从对应的 JSON 字段映射 |
| x-r-cert-enddate | network.tls.server.certificate.not_after.seconds:x-r-cert-enddate 对应的纪元秒数 | 系统会将日期转换为纪元秒数 |
| x-r-cert-expired | additional.fields[].key: "x-r-cert-expired", additional.fields[].value.string_value: x-r-cert-expired | 直接从对应的 JSON 字段映射 |
| x-r-cert-incomplete-chain | additional.fields[].key: "x-r-cert-incomplete-chain", additional.fields[].value.string_value: x-r-cert-incomplete-chain | 直接从对应的 JSON 字段映射 |
| x-r-cert-issuer-cn | network.tls.server.certificate.issuer: x-r-cert-issuer-cn | 直接从对应的 JSON 字段映射 |
| x-r-cert-mismatch | additional.fields[].key: "x-r-cert-mismatch", additional.fields[].value.string_value: x-r-cert-mismatch | 直接从对应的 JSON 字段映射 |
| x-r-cert-revoked | additional.fields[].key: "x-r-cert-revoked", additional.fields[].value.string_value: x-r-cert-revoked | 直接从对应的 JSON 字段映射 |
| x-r-cert-self-signed | additional.fields[].key: "x-r-cert-self-signed", additional.fields[].value.string_value: x-r-cert-self-signed | 直接从对应的 JSON 字段映射 |
| x-r-cert-startdate | network.tls.server.certificate.not_before.seconds:x-r-cert-startdate 中的纪元秒数 | 日期会转换为纪元秒数 |
| x-r-cert-subject-cn | network.tls.server.certificate.subject: x-r-cert-subject-cn | 直接从对应的 JSON 字段映射 |
| x-r-cert-untrusted-root | additional.fields[].key: "x-r-cert-untrusted-root", additional.fields[].value.string_value: x-r-cert-untrusted-root | 直接从对应的 JSON 字段映射 |
| x-r-cert-valid | additional.fields[].key: "x-r-cert-valid", additional.fields[].value.string_value: x-r-cert-valid | 直接从对应的 JSON 字段映射 |
| x-request-id | additional.fields[].key: "requestId", additional.fields[].value.string_value: x-request-id | 直接从对应的 JSON 字段映射 |
| x-rs-file-category | additional.fields[].key: "x-rs-file-category", additional.fields[].value.string_value: x-rs-file-category | 直接从对应的 JSON 字段映射 |
| x-rs-file-type | additional.fields[].key: "x-rs-file-type", additional.fields[].value.string_value: x-rs-file-type | 直接从对应的 JSON 字段映射 |
| x-s-country | target.location.country_or_region: x-s-country | 直接从对应的 JSON 字段映射 |
| x-s-dp-name | additional.fields[].key: "x-s-dp-name", additional.fields[].value.string_value: x-s-dp-name | 直接从对应的 JSON 字段映射 |
| x-s-latitude | target.location.region_coordinates.latitude: x-s-latitude | 直接从对应的 JSON 字段映射 |
| x-s-location | target.location.name: x-s-location | 直接从对应的 JSON 字段映射 |
| x-s-longitude | target.location.region_coordinates.longitude: x-s-longitude | 直接从对应的 JSON 字段映射 |
| x-s-区域 | target.location.state: x-s-区域 | 直接从对应的 JSON 字段映射 |
| x-s-zipcode | additional.fields[].key: "x-s-zipcode", additional.fields[].value.string_value: x-s-zipcode | 直接从对应的 JSON 字段映射 |
| x-sr-ssl-cipher | security_result.detection_fields[].key: "x-sr-ssl-cipher", security_result.detection_fields[].value: x-sr-ssl-cipher | 直接从对应的 JSON 字段映射 |
| x-sr-ssl-client-certificate-error | security_result.detection_fields[].key: "x-sr-ssl-client-certificate-error", security_result.detection_fields[].value: x-sr-ssl-client-certificate-error | 直接从对应的 JSON 字段映射 |
| x-sr-ssl-engine-action | security_result.detection_fields[].key: "x-sr-ssl-engine-action", security_result.detection_fields[].value: x-sr-ssl-engine-action | 直接从对应的 JSON 字段映射 |
| x-sr-ssl-engine-action-reason | security_result.detection_fields[].key: "x-sr-ssl-engine-action-reason", security_result.detection_fields[].value: x-sr-ssl-engine-action-reason | 直接从对应的 JSON 字段映射 |
| x-sr-ssl-handshake-error | security_result.detection_fields[].key: "x-sr-ssl-handshake-error", security_result.detection_fields[].value: x-sr-ssl-handshake-error | 直接从对应的 JSON 字段映射 |
| x-sr-ssl-ja3s | network.tls.server.ja3s: x-sr-ssl-ja3s | 直接从对应的 JSON 字段映射 |
| x-sr-ssl-malformed-ssl | security_result.detection_fields[].key: "x-sr-ssl-malformed-ssl", security_result.detection_fields[].value: x-sr-ssl-malformed-ssl | 直接从对应的 JSON 字段映射 |
| x-sr-ssl-version | security_result.detection_fields[].key: "x-sr-ssl-version", security_result.detection_fields[].value: x-sr-ssl-version | 直接从对应的 JSON 字段映射 |
| x-s-custom-signing-ca-error | security_result.detection_fields[].key: "x-s-custom-signing-ca-error", security_result.detection_fields[].value: x-s-custom-signing-ca-error | 直接从对应的 JSON 字段映射 |
| x-ssl-bypass | security_result.detection_fields[].key: "SSL BYPASS", security_result.detection_fields[].value: x-ssl-bypass 或 x-ssl-bypass-reason | 如果 x-ssl-bypass 为“Yes”且存在 x-ssl-bypass-reason,则使用 x-ssl-bypass-reason 的值。否则,系统会使用 x-ssl-bypass 的值。 |
| x-ssl-policy-action | security_result.detection_fields[].key: "x-ssl-policy-action", security_result.detection_fields[].value: x-ssl-policy-action | 直接从对应的 JSON 字段映射 |
| x-ssl-policy-categories | security_result.category_details[]: x-ssl-policy-categories | 直接从对应的 JSON 字段映射 |
| x-ssl-policy-dst-host | security_result.detection_fields[].key: "x-ssl-policy-dst-host", security_result.detection_fields[].value: x-ssl-policy-dst-host | 直接从对应的 JSON 字段映射 |
| x-ssl-policy-dst-host-source | security_result.detection_fields[].key: "x-ssl-policy-dst-host-source", security_result.detection_fields[].value: x-ssl-policy-dst-host-source | 直接从对应的 JSON 字段映射 |
| x-ssl-policy-dst-ip | security_result.detection_fields[].key: "x-ssl-policy-dst-ip", security_result.detection_fields[].value: x-ssl-policy-dst-ip | 直接从对应的 JSON 字段映射 |
| x-ssl-policy-name | security_result.rule_name: x-ssl-policy-name | 直接从对应的 JSON 字段映射 |
| x-ssl-policy-src-ip | security_result.detection_fields[].key: "x-ssl-policy-src-ip", security_result.detection_fields[].value: x-ssl-policy-src-ip | 直接从对应的 JSON 字段映射 |
| x-sr-dst-ip | security_result.detection_fields[].key: "x-sr-dst-ip", security_result.detection_fields[].value: x-sr-dst-ip | 直接从对应的 JSON 字段映射 |
| x-sr-dst-port | security_result.detection_fields[].key: "x-sr-dst-port", security_result.detection_fields[].value: x-sr-dst-port | 直接从对应的 JSON 字段映射 |
| x-type | additional.fields[].key: "xType", additional.fields[].value.string_value: x-type | 直接从对应的 JSON 字段映射 |
| x-transaction-id | additional.fields[].key: "transactionId", additional.fields[].value.string_value: x-transaction-id | 直接从对应的 JSON 字段映射 |
| metadata.vendor_name | 设置为“Netskope” | |
| metadata.product_name | 如果尚未设置,则设置为“Netskope Webproxy” | |
| metadata.log_type | 设置为“NETSKOPE_WEBPROXY” |
更新日志
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。