配置计算字段
本指南适用于希望在安全运维中自动执行数据丰富化的安全分析师和 SOC 经理。本课程将介绍如何使用逻辑公式创建和管理计算字段,以便从现有案例和提醒数据中派生新值。通过这种方法,您可以消除手动数据录入,并确保关键指标实时更新。成功完成后,可提升平台分析能力,并通过自动填充字段加快突发事件分类。
借助计算字段,您可以在 Google Security Operations 案例和提醒中动态派生新的数据点。通过定义逻辑公式,您可以根据现有系统字段或自定义字段计算值。系统会自动实时评估计算出的值,并将其存储在用户选择的预先存在的自定义字段(标记为目标字段)中。
常见使用场景
以下场景展示了组织利用计算字段提高运营效率和数据清晰度的最常见方式。
自动风险评分
- 目标:根据事件量或优先级对案例进行分类。
- 价值:标准化分类流程,确保团队能够立即看到高风险事件。
数据标准化
- 目标:根据命名惯例将提醒标记为测试或生产。
- 价值:让分析师能够从主要视图中滤除非关键测试数据,从而减少干扰。
主要术语
- 公式:您使用函数、运算符和字段引用定义的基于文本的逻辑表达式,用于计算值。
- 目标字段:用于存储公式结果计算值的现有自定义字段(自由文本类型)。
- 依赖项:公式中引用的字段。当依赖项字段的值发生变化时,系统会同步重新评估计算字段。
准备工作
在创建计算之前,请确保您的环境满足以下技术要求:
- 权限:您必须拥有对设置菜单的管理员权限,以及管理代码的权限。
- 环境检查:确保您有现有的、处于活跃状态的自定义字段(自由文本类型)作为目标字段。
确保您有现成的自定义字段可用作系统中的目标字段。如果没有,请执行以下步骤:
- 依次前往设置 > 调查 > 自定义字段。
- 创建新的自定义字段,并将类型设置为自由文本。
如需详细了解自定义字段,请参阅创建自定义字段。
技术限制和验证规则
在定义计算之前,请确保目标字段和逻辑遵循这些系统限制。这些规则决定了 Google SecOps 引擎如何验证和保留公式结果。
字段验证条件
计算引擎会针对指定为目标字段的任何字段严格执行以下要求:
- 数据类型:该字段必须是自由文本类型。
- 运营状态:该字段必须为有效;系统无法写入已删除或已失效的字段。
- 依赖项映射:为防止循环逻辑,如果某个字段已是另一个计算字段的依赖项,则该字段不能作为目标。
字段范围限定
当您创建具有 Both 范围的自定义字段时,系统会为每个上下文生成唯一条目。这样,您就可以为同一逻辑类别中的案例和提醒维护单独的逻辑。
在目标字段菜单中,您必须选择与公式相关的特定范围:
- 支持请求范围:标记为
CaseCustom.YourField(例如CaseCustom.RiskLevel) - 提醒范围:标记为
AlertCustom.YourField(例如AlertCustom.RiskLevel)
创建和管理计算字段
本部分概述了如何定义新计算,以及如何解决设置过程中的常见问题。
创建新计算
如需创建新计算,请执行以下操作:
- 依次前往设置 > 调查 > 计算字段。
- 点击添加 添加。
- 在计算字段名称字段中,为计算输入一个唯一的名称和说明。
在目标字段区域中,选择用于存储结果的现有自定义字段。
- 预期失败:所选字段未显示在菜单中。
- 纠正措施:验证自定义字段是否处于有效状态、是否设置为自由文本,以及是否尚未成为其他计算的依赖项。
在文本编辑器中,使用支持的函数、运算符和语法构建公式。创建逻辑表达式(例如
IF ([case.priority] == "High") THEN "Urgent" ELSE "Standard")。如需了解详情,请参阅公式语言和语法。点击保存。
- 预期失败:系统拒绝保存,并显示红色错误突出显示。
- 纠正措施:检查是否存在语法错误,例如
IF条件周围缺少括号或关键字为小写。
访问高级素材资源和参考文档
公式必须遵循严格的语法和区分大小写规则,适用于所有内置运算符和函数。请使用以下技术规格,确保您的计算有效。
公式示例
以下模板演示了如何组合使用函数和运算符来自动执行数据丰富化。您可以复制并调整这些代码段,以匹配您的特定字段名称和组织要求。
示例 1:设置风险级别
使用此公式可根据在支持请求标题中找到的特定关键字对支持请求进行分类。
- 目标字段:
CaseCustom.risk_level(文本) - 目标:自动为紧急事件分配“高”状态
公式:
IF (CONTAINS([case.name], "urgent")) THEN "High" ELSE "Medium"
示例 2:标记测试提醒
此逻辑可识别并标记测试数据,帮助分析师过滤其主要视图,并专注于生产突发事件。
- 目标字段:
AlertCustom.is_test(文本) - 目标:检测提醒名称中的
-TEST后缀或TEST字符串 公式:
IF (CONTAINS([alert.name], "TEST") OR ENDS_WITH([alert.name], "-TEST")) THEN "TRUE" ELSE "FALSE"
示例 3:组合条件
此示例演示了嵌套逻辑,可根据事件量和现有优先级来确定审核的优先级。
- 目标字段:
CaseCustom.review_status(文本) - 目标:仅当日志长度较长且优先级不是
Low时,才触发人工审核。 公式:
IF (LENGTH(\[AlertCustom.event\_details\]) \> 100 AND NOT IS(\[case.priority\], "Low")) THEN "Needs Review" ELSE "Auto-Closed"
公式语言和语法
计算引擎对所有内置运算符、关键字和函数都区分大小写。您必须使用大写字母编写关键字(例如 IF, THEN, ELSE, AND, OR, NOT)和函数名称(例如 CONTAINS, LENGTH, STARTS_WITH, ENDS_WITH, IS, IS_NOT, DOES_NOT_CONTAIN)。不过,在测试函数和等式运算符中的文本字符串时,系统不区分大小写。例如,搜索“phishing”将成功匹配“PHISHING”或“Phishing”。
数据类型和字面量
字面量是表达式中使用的固定值。我们建议您确保操作和函数实参使用兼容的类型。
| 类型 | 语法和规则 | 示例 |
|---|---|---|
| STRING | 用英文双引号括起来的文本。 | “严重”“不适用” |
| NUMBER | 整数或小数。 | 100, 3.14 |
| BOOLEAN | 必须大写。 | TRUE, FALSE |
| NULL | 表示空值。 | NULL |
字段引用
如需使用其他字段的值,请将字段名称括在方括号中,例如 [object.field_name]。
- 语法规则:您必须在字段引用中使用前缀。您必须使用前缀(例如
case.或AlertCustom.),后跟一个英文句点和字段名称。字段名称本身可以包含字母、数字、下划线和空格。例如:[case.name]、[alert.priority]、[AlertCustom.my_custom_field]。 - 您可以使用以下系统字段:
case.name、case.stage、case.priority、alert.name、alert.priority、alert.rule_generator。 - 您可以引用所有用户定义的自定义字段。
- 计算字段公式无法引用其他计算字段。
运算符
使用运算符进行比较和逻辑运算。使用圆括号 () 替换默认优先级并对表达式进行分组
- 比较运算符:
==、!=、>、>=、<、<= - 逻辑运算符:
AND、OR、NOT - 运算符优先级:
NOT、>、>=、<、<=、AND、OR、
条件表达式
系统支持使用 IF (condition) THEN expression1 ELSE expression2 语法的条件逻辑。ELSE 部分是可选的;如果您省略该部分,并且条件为 FALSE,则结果默认为 NULL。
条件必须是计算结果为 TRUE 或 FALSE 的表达式。
例如 IF ( [CaseCustom.score] > 75 ) THEN "High Risk" ELSE "Low Risk"。
函数
函数是预定义的操作,必须全部大写。下表列出了支持的数据操作和评估函数。
| 函数 | 说明 | 语法 | 返回值类型 |
|---|---|---|---|
CONTAINS(field, substring) |
检查文本字段是否包含子字符串(不区分大小写) | CONTAINS([case.name], "phishing") |
BOOLEAN |
DOES_NOT_CONTAIN(field, substring) |
检查文本字段是否不包含子字符串(不区分大小写) | DOES_NOT_CONTAIN([case.name], "test") |
BOOLEAN |
LENGTH(field) |
返回字段中的字符数 | LENGTH([case.name]) |
NUMBER |
STARTS_WITH(field, prefix) |
检查字段是否以某个前缀开头(不区分大小写) | STARTS_WITH([CaseCustom.hostname], "srv-") |
BOOLEAN |
ENDS_WITH(field, suffix) |
检查字段是否以某个后缀结尾(不区分大小写) | ENDS_WITH([AlertCustom.filename], ".exe") |
BOOLEAN |
IS(field, literal) |
检查字段值是否等于字面量(不区分大小写) | IS([alert.priority], "High") |
BOOLEAN |
IS_NOT(field, literal) |
检查字段值是否不等于字面量(不区分大小写) | IS_NOT([alert.priority], "Low") |
BOOLEAN |
预留关键字和标识符
计算引擎会为逻辑运算和函数保留特定字词。您不能在公式中将这些术语用作自定义字段名称或其他标识符:
- 逻辑:
AND, OR, NOT, IF, THEN, ELSE - 值:
NULL, TRUE, FALSE - 函数:
CONTAINS, LENGTH, STARTS_WITH, ENDS_WITH, IS, IS_NOT, DOES_NOT_CONTAIN
数据类型兼容性
为确保成功求值,请验证所有运算和函数实参是否使用兼容的类型。支持的类型包括 STRING、NUMBER、BOOLEAN 和 NULL。
公式的最终输出必须与目标字段的预期类型相匹配。由于目标字段仅限于“自由文本”,因此您的公式最终必须解析为字符串或可以隐式转换为目标格式的值。
格式设置和空白
虽然标记之间的空格、制表符和换行符通常会被忽略,但必须使用它们来分隔关键字和标识符。策略性地使用空格来构建复杂的多行公式,以便于维护和同行评审。
编写有效的公式
虽然计算引擎对空格的处理比较灵活,但请遵循以下格式标准,以帮助防止逻辑错误并简化问题排查。
- 显式分组:使用括号明确定义运算顺序,即使依赖标准优先级也是如此。这有助于防止逻辑歧义。
- 视觉结构:在运算符 (
==, AND, OR) 周围留出空格,并为嵌套的IF/THEN语句插入换行符,使逻辑一目了然。 类型验证:请务必验证公式的最终输出是否与目标字段的预期类型一致,以防出现求值错误。
IF ( (IS([CaseCustom.event_count], "100") AND NOT IS([case.priority], "Low")) OR CONTAINS([case.name], "Critical") ) THEN "Needs Immediate Review" ELSE "Standard Review"
问题排查
本部分概述了性能预期,并针对构建或管理公式时遇到的常见部署问题提供了自助修复方法。
延迟时间和限制
每当依赖字段发生变化时,计算字段都会同步求值。为保持系统性能,计算字段无法引用另一个计算字段;系统会阻止这些链式依赖关系,以防止递归和处理延迟。
错误修复
手动编写公式时,可能会因语法或数据类型不匹配而出现错误。请使用下表将具体的历程相关错误代码映射到其确切、可行的修复方法。
| 错误类型 | 问题 | 修复 |
|---|---|---|
| 语法 | 公式违反了语法规则,例如括号不匹配或关键字为小写。 | 将所有 IF 条件括在 () 中,并验证所有关键字是否均为大写。 |
| 验证 | 公式引用了未知字段(例如 [\case.typo])或导致类型不匹配。 | 验证方括号中的字段名称,并确认输出与目标字段类型匹配。 |
| 评估 | 公式有效,但在执行过程中失败,通常会显示 #ERROR!。 | 检查是否存在运行时问题,例如向 LENGTH() 等函数传递非字符串值。 |
修改或删除目标字段
系统会主动保护公式所依赖的字段,以维护数据完整性。如果您尝试删除或修改用作目标字段的自定义字段,系统会阻止该操作并显示警告,指出该字段正在计算字段中使用。
验证和测试
保存新计算后,请前往某个案例或提醒并更新依赖项字段,以验证结果。确认目标字段会实时填充预期值。