在 Google Cloud 控制台中查询发现结果

本页面介绍了如何使用 Google Cloud 控制台的发现结果页面上的查询编辑器面板创建和修改 Security Command Center 发现结果查询。

使用查询来检索特定发现结果并过滤在发现结果的查询结果面板中显示的发现结果。

修改发现结果查询

查询编辑器面板中,您可以向查询添加和修改过滤条件,以便根据发现结果的属性或属性值选择发现结果。您可以针对存在值、缺少值或部分字符串匹配等情况进行过滤。

修改查询时,编辑器会突出显示查询中的所有错误,以便在提交查询之前更正这些错误。

要使用查询编辑器面板修改查询,请按以下步骤操作:

  1. 进入 Google Cloud 控制台中的发现结果页面:

    转至“发现结果”

  2. 如有必要,请选择您的 Google Cloud 项目或组织。

    项目选择器

    系统将加载发现结果页面,其中包含查询预览字段中显示的默认查询。

  3. 查询预览部分右侧,点击 修改查询或“展开面板”图标 以打开 查询编辑器面板。

  4. 选择添加过滤条件,以导航、搜索及向查询添加预定义的特性过滤条件。

    选择过滤条件对话框中,您可以选择支持的发现结果属性和值。 查询过滤条件对话框

    1. 选择发现结果特性或在搜索发现结果特性框中输入其名称。 系统会显示可用子特性的列表。
    2. 选择子特性。评估选项的选择字段显示在位于发现结果的查询结果面板中的发现结果的子特性值列表上方。
    3. 为所选子特性的值选择评估选项。如需详细了解评估选项及其使用的运算符和函数,请参阅“添加过滤条件”菜单中的查询运算符
    4. 选择应用

      对话框将会关闭,并且您的查询即会更新。

    5. 重复这些步骤,直到发现结果查询包含所需的所有特性。

或者,您也可以手动构建发现结果查询,方法与使用 Security Command Center API 构建发现结果过滤条件相同。当您在查询中输入内容时,系统会显示自动补全菜单,您可以在其中选择过滤条件名称和函数。

当您在发现结果页面上使用查询构建器时,快速过滤条件部分会被停用,以避免两者之间发生冲突。

查询运算符

Security Command Center 发现结果的查询语句支持大多数 Google Cloud API 支持的运算符。

以下列表显示了各种运算符的用法:

  • state="ACTIVE" AND NOT mute="MUTED"
  • create_time>"2023-08-15T19:05:32.428Z"
  • resource.parent_name:"prod"
  • severity="CRITICAL" OR severity="HIGH"

以下列表显示了发现结果的查询语句中支持的所有运算符和函数:

  • 对于字符串:
    • =,表示完全相等
    • : 表示部分字符串匹配
  • 对于数字:
    • <><=>=,表示不相等
    • =!= 表示相等
  • 对于布尔值:
    • = 表示等式
  • 对于逻辑关系:
    • AND
    • OR
    • NOT-
  • 对于分组表达式:
    • ()(英文括号)
  • 对于数组:
    • contains() 函数,用于通过数组字段查询发现结果,该数组字段包含至少一个与指定过滤条件匹配的元素
    • containsOnly():一个函数,用于通过数组字段查询结果,该数组字段仅包含与指定过滤条件匹配的元素
  • 对于 IP 地址:
    • inIpRange(),一个用于查询指定 CIDR 范围内的 IP 地址的函数

“添加过滤条件”菜单中的查询运算符

在 Google Cloud 控制台的查询编辑器添加过滤条件菜单中,查询运算符和函数由字词或短语表示,例如:

  • 等于:匹配具有确切过滤条件值的发现结果。
  • 不等于:匹配不具有确切过滤条件值的发现结果。
  • 晚于:匹配其创建或更新时间晚于指定时间的发现结果。
  • 早于:匹配其创建或更新时间早于指定时间的发现结果。
  • 包含:匹配其过滤条件值包含在关键字字段中输入的文本的发现结果。
  • 不包含:匹配其过滤条件值不包含在关键字字段中输入的文本的发现结果。
  • 对于包含数组的发现结果特性:
    • 包含全部:匹配其数组值包含在关键字字段中输入的所有文本的发现结果。
    • 包含全部:匹配其数组值包含在关键字字段中输入的所有文本的发现结果。
    • 不包含任何:匹配不具有包含在关键字字段中输入的文本的数组值的发现结果。
    • 仅包含:匹配具有数组属性的发现结果,该数组结果仅包含您在关键字字段中输入的值,不包含其他值。
  • 对于 IP 地址:
    • Any within IP range:匹配包含指定 CIDR 范围内的 IP 地址的发现结果。
    • Does not have any within IP range:匹配包含不在指定 CIDR 范围内的 IP 地址的发现结果。

查询函数

与常见的查询运算符相比,查询函数会对特性值进行更复杂的评估。

contains 函数

使用 contains 函数评估可能在同一发现结果中出现多次的特性或特性子字段。

在内部,这些属性或属性子字段存储在数组数据结构的元素中,因此它们称为“数组类型属性”

例如,某些发现结果可以引用多个网络连接,因此 connections 特性是数组类型特性。同样,某些威胁发现结果可以引用多个 IP 地址作为失陷指标,因此 indicator 特性的 ip_addresses 子字段是数组类型特性。

contains 函数使用以下语法:

contains(ARRAY_ATTRIBUTE_NAME, SUBFILTER)

替换以下内容:

  • ARRAY_ATTRIBUTE_NAME:存储在数组中的数组类型属性的名称。如果数组类型特性是其他特性的子字段,请指定特性名称和子字段名称(用英文句点分隔)。

    在以下示例中,数组类型特性 ip_addressesindicator 的子字段,因此两者都在 ARRAY_ATTRIBUTE_NAME 位置指定:

    contains(indicator.ip_addresses, elem="192.0.2.80")
  • SUBFILTER:用于定义如何评估数组类型特性的每个实例的表达式。支持标准 Security Command Center 查询运算符和评估语句

    如果要检查的值位于数组类型属性的子字段中,请在表达式左侧指定子字段名称。以下 contains 函数会评估 connections 数组的每个元素,该元素是包含子字段的数组类型特性。要查询的值位于 destination_ip 子字段中,该子字段不是数组类型字段。要查询的值使用子字段名称 destination_ip(而不是 elem 参数)指定。

    contains(connections, destination_ip="192.0.2.80")

    如果子字段是数组类型属性,请在表达式左侧的父数组中指定数组类型属性,并使用表达式右侧的 elem 参数指定要搜索的值。例如,以下 contains 函数会评估 ip_addresses 数组的每个元素,该元素是 indicator 属性的子字段。indicator 属性不是数组类型字段。

    contains(indicator.ip_addresses, elem="192.0.2.80")

“添加过滤条件”菜单中的 contains 函数

添加过滤条件菜单中,根据您要评估的发现结果特性,当您选择其他需要 contains 函数的过滤条件选项时,该函数会明确列出或自动包含在内。

例如,对于 Indicator 特性的 IP 地址子字段,您可以选择以下过滤条件选项:

  • 包含以下任意一项:
  • 包含全部
  • 不包含任何一项

相比之下,如果您要根据 Connections 特性的目的地 IP 子字段进行过滤并选择 Any within IP range,则 contains 函数会自动添加到查询语句中,如以下示例所示:

contains(connections, inIpRange(destination_ip, "2001:db8::/32"))

如需详细了解 contains 函数,请参阅过滤数组类型字段

containsOnly 函数

借助 containsOnly 函数,您可以查询仅包含子过滤条件中指定的值(不包含其他值)的数组类型属性或子字段的发现结果。

containsOnly 函数使用以下语法:

containsOnly(ARRAY_ATTRIBUTE_NAME,SUBFILTER)

替换以下内容:

  • ARRAY_ATTRIBUTE_NAME:数组类型属性的名称。如果数组类型属性是其他属性的子字段,请指定属性名称和子字段名称(用英文句点分隔)。当您使用 Google Cloud Console 运行查询时,此函数仅支持 iam_bindings.memberiam_bindings.role 数组属性。

  • SUBFILTER:用于定义如何评估数组类型属性的每个元素的表达式。支持标准 Security Command Center 查询运算符和评估语句。

添加过滤条件菜单中,以下过滤条件选项使用 containsOnly 函数:

  • IAM binding > Member:仅选择包含指定用户、服务帐号或群组的发现结果。

  • IAM binding > Role:仅选择包含指定角色的发现结果。

以下示例展示了 Google Cloud 控制台中的一项发现结果查询,该查询可为 example-group 群组中的用户返回已取消静音的有效发现结果:

state="ACTIVE"
  AND NOT mute="MUTED"
  AND containsOnly(iam_bindings,member="group:example-group@example.com")

inIpRange 函数

inIpRange 函数会使用 CIDR 表示法(CIDR 范围)检查所选发现结果特性中的 IP 地址是否在您指定的 IP 地址范围内。以下代码展示了 inIpRange 函数的语法:

inIpRange(ATTRIBUTE_WITH_IP, "CIDR_RANGE")

添加过滤条件菜单中,以下过滤条件选项使用 inIpRange 函数:

  • Any within IP range:仅选择包含指定范围内的 IP 地址的发现结果。
  • 在 IP 范围内没有任何内容:仅选择不包含指定范围内的 IP 地址的发现结果。

以下示例展示了 Google Cloud 控制台中的一个发现结果查询,该查询会返回已取消忽略的有效发现结果,其中 access 对象的 caller_ip 子字段包含 CIDR 范围 2001:db8::/32 内的 IPv6 地址:

state="ACTIVE"
AND NOT mute="MUTED"
AND inIpRange(access.caller_ip, "2001:db8::/32")

以下示例展示了一个发现结果查询,该查询会返回已取消忽略的有效发现结果,其中 access 对象的 caller_ip 子字段不包含 IPv4 CIDR 范围 192.0.2.0/24 内的 IP 地址:

state="ACTIVE"
AND NOT mute="MUTED"
AND NOT inIpRange(access.caller_ip, "192.0.2.0/24")

如果 IP 地址位于可能在发现结果中出现多次的特性,请将 contains 函数与 inIpRange 函数搭配使用来检查该 IP 地址特性的每个实例。例如:

contains(connections, inIpRange(source_ip, "192.0.2.0/24"))

如需详细了解 contains() 函数,请参阅 contains 函数

查找查询的特性

Security Command Center 根据您在查询中指定的特性过滤条件来评估每个存储的发现结果的特性,以选择要显示的发现结果。

您可以查询大多数发现结果属性。某些属性是所有发现结果的通用属性。其他属性可能特定于特定安全问题、发现结果类别或检测服务。

查询编辑器面板的添加过滤条件菜单中,您可以应用于特性过滤条件的选项会有不同,取决于您选择的特性类型,以及该特性是否包含子字段或值数组。

添加过滤条件菜单中,点击以下任一顶级属性,以显示可在发现结果查询中使用的子属性和值: