配置计算字段
本指南适用于希望在安全运维中自动执行数据丰富化的安全分析师和 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)。不过,函数和等值运算符中的文本字符串测试不区分大小写。例如,搜索“网络钓鱼”将成功匹配“网络钓鱼”或“网络钓鱼”。
数据类型和字面量
字面量是表达式中使用的固定值。建议您确保运算和函数实参使用兼容的类型。
| 类型 | 语法和规则 | 示例 |
|---|---|---|
| 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() 等函数。 |
修改或删除目标字段
系统会主动保护公式所依赖的字段,以维护数据完整性。如果您尝试删除或修改用作目标字段的自定义字段,系统会阻止该操作,并显示一条警告,指出该字段正被计算字段使用。
验证和测试
保存新的计算后,请前往某个支持服务请求或提醒,更新依赖项字段,以验证结果。确认目标字段是否实时填充了预期值。