Google Cloud 中的安全日志分析

Last reviewed 2022-12-14 UTC

本指南面向安全从业人员,主要介绍如何对要在安全分析中使用的 Google Cloud 日志进行初始配置。通过执行安全分析,您可帮助组织防范、检测和应对恶意软件、网上诱骗软件、勒索软件以及资产配置不当等威胁。

本指南介绍如何执行以下操作:

  • 启用要分析的日志。
  • 将这些日志导出到您选择的分析工具(例如 BigQueryChronicle 或由第三方安全信息和事件管理 (SIEM) 技术提供支持的其他工具)中。
  • 使用社区安全分析 (CSA) 项目中的示例查询,分析这些日志以审核云使用情况并检测您的数据和工作负载可能存在的威胁。

本指南中的信息是 Google Cloud 自主安全运营的一部分,其中包括以工程方式主导的检测和响应做法转换以及安全分析,以提高您的威胁检测能力。

在本指南中,日志提供了要分析的数据源。但是,您可以应用本指南中的概念来分析 Google Cloud 的其他补充安全相关数据,例如 Security Command Center 的安全发现结果。Security Command Center Premium 中提供的是一系列定期更新的代管式检测器,旨在近乎实时地识别系统中的威胁、漏洞和配置错误。通过分析 Security Command Center 中的这些信号,并将其与本指南所述的安全分析工具中注入的日志相关联,您可以更广泛地了解潜在的安全威胁。

下图展示了安全数据源、安全分析工具和 CSA 查询如何协同工作。

安全分析工具和内容。

该图具有以下安全数据源:来自 Cloud Logging 的日志、来自 Cloud Asset Inventory 的资产更改,以及来自 Security Command Center 的安全发现结果。然后该图显示了这些安全数据源正在导出到您选择的安全分析工具中:BigQuery、Chronicle 或第三方 SIEM。最后,该图显示了将 CSA 查询与分析工具结合使用以分析导出的安全数据源。

安全日志分析工作流

本部分介绍了在 Google Cloud 中设置安全日志分析的步骤。设置安全日志分析的第一步是启用要分析的日志。然后,您需要导出日志。最后,则需要分析日志。下面是这三个步骤的示意图。

设置安全日志分析的三个步骤:(1) 启用日志;(2) 导出日志;(3) 分析日志。

该过程的每个步骤都包含各种组件,如以下列表所述:

  • 启用日志:Google Cloud 中提供了许多安全日志。每种日志所提供的信息各不相同,但都可用于解决特定的安全问题。部分日志(如 Cloud Audit Logs 日志)默认处于启用状态;而其他的一些日志则需要手动启用,因为启用这些日志后会在 Cloud Logging 中产生额外的注入费用。因此,该工作流的第一步是优先考虑与您的安全分析需求最相关的安全日志,并单独启用这些日志。

    为了帮助您根据日志提供的可见性和威胁检测范围来评估日志,本指南提供了一个日志范围限定工具。此工具会将每种日志与 MITRE ATT&CK® 企业矩阵中的相关威胁策略和方法对应起来。该工具还会将 Security Command Center 中的各项 Event Threat Detection 规则与其所依赖的日志对应起来。无论使用哪种分析工具,您都可以使用日志范围限定工具来评估日志。

  • 导出日志:在确定并启用要分析的日志后,下一步就是将这些日志导出到分析工具(例如 BigQuery、Chronicle 或由第三方 SIEM 技术提供支持的其他工具)中。

    导出日志的方式取决于您使用的具体分析工具。本指南简要介绍了各种导出选项,然后介绍如何使用日志接收器将日志导出到 BigQuery。

  • 分析日志:将日志导出到分析工具后,下一步是分析导出的日志以识别任何潜在的安全威胁。分析所导出日志的方式取决于您使用的具体分析工具。如果您是使用 BigQuery 数据集,则可以使用 SQL 查询分析日志。如果您是使用 Chronicle,则可以使用 YARA-L 规则分析日志。如果您是使用第三方 SIEM 工具,则可以使用相应工具指定的查询语言。

    在本指南中,您将了解可用于分析 BigQuery 数据集中日志的 SQL 查询,并且这些查询可能也可以对第三方 SIEM 工具中的日志使用。本指南中提供的 SQL 查询来自社区安全分析 (CSA) 项目。CSA 是一组开源的基础安全分析,旨在为您提供一些预构建查询和规则的基准,您可以重复使用这些查询和规则来分析您的 Google Cloud 日志。

以下部分详细介绍了如何设置和应用安全日志分析工作流中的每个步骤。

启用日志

启用日志的整个过程如下所示:

  • 使用本指南中提供的日志范围限定工具确定要导出的日志。
  • 记录日志范围限定工具生成的日志过滤条件,以便稍后在配置日志接收器时使用。
  • 为每个选定的日志或服务启用日志记录功能。

请注意,并非所有服务都会默认启用日志记录功能。在日志范围限定工具中选择日志并不会自动启用相应日志。您需要确保为相关服务启用适当级别的日志记录。根据服务,您可能需要同时启用来自 Cloud Audit Logs 的相应数据访问审核日志和平台日志,如本部分稍后所述。

使用日志范围限定工具确定日志范围

日志范围限定工具由以下交互式表和日志过滤条件组成。此工具会列出 Google Cloud 中与安全相关的重要日志,包括 Cloud Audit Logs 日志、Access Transparency 日志、网络日志和多种平台日志。使用此工具时,您首先需要根据自己的安全和合规性需求选择要导出和分析的日志。您选择的每条日志都会添加到该工具生成的日志过滤条件中。

为了帮助您评估应选择哪些日志,此工具会将每种日志类型与以下内容项对应起来:

日志范围限定工具

本部分中的交互式表用作日志范围限定工具。该工具生成的日志过滤条件会显示在该表后面的“自动生成的日志过滤条件”部分中。使用该工具识别并选择要导出的日志:

  • 如需在日志范围限定工具中选择或移除日志,您可以点击相应日志名称旁边的切换开关。
  • 如需选择或移除所有日志,您可以点击日志类型标题旁边的切换开关。
  • 如需了解每种日志类型可以监控哪些 MITRE ATT&CK 方法,您可以点击 MITRE ATT&CK 策略和方法标题旁边的


记录日志过滤条件

由日志范围限定工具自动生成的日志过滤条件包含您在该工具中选择的所有日志。您可以按原样使用该过滤条件,也可以根据您的需求进一步细化日志过滤条件。例如,您可以仅过滤出(或排除掉)一个或多个特定项目中的资源。有了满足您日志记录要求的日志过滤条件后,您便需要保存该过滤条件,以便在导出日志时使用。例如,您可以在文本编辑器中保存该过滤条件,也可以将该过滤条件保存在一个环境变量中,如下所示:

  1. 使用日志范围限定工具选择要导出的日志。
  2. 在该工具后面的“自动生成的日志过滤条件”部分中,复制日志过滤条件的代码。
  3. 可选:修改复制的代码以细化过滤条件。
  4. 在 Cloud Shell 中,创建一个变量来保存该日志过滤条件:

    export LOG_FILTER='LOG_FILTER'
    

    LOG_FILTER 替换为日志过滤条件的代码。

启用服务专属平台日志

您在日志范围限定工具中选择的每种平台日志都必须逐个服务进行启用(通常在资源级层启用)。例如,Cloud DNS 日志需在 VPC 网络级层启用。同样地,VPC 流日志需针对子网中的所有虚拟机在子网级层启用,防火墙规则日志记录中的日志则需在具体的防火墙规则级层启用。

每种平台日志都有自己的有关如何启用日志记录的说明。不过,您可以使用日志范围限定工具快速打开每种平台日志的相关说明。

如需了解如何为特定平台日志启用日志记录功能,请执行以下操作:

  1. 在日志范围限定工具中,找到要启用的平台日志。
  2. 默认启用列中,点击与该日志对应的启用链接。您可以通过此链接详细了解如何为该服务启用日志记录。

启用数据访问审核日志

在日志范围限定工具中,您可以看到 Cloud Audit Logs 中的数据访问审核日志提供了广泛的威胁检测范围。不过,涉及的日志量可能相当庞大。因此,如果启用这些数据访问审核日志,可能会产生与注入、存储、导出和处理这些日志相关的额外费用。这些额外费用发生在整个分析过程中,包括与 Cloud Logging 相关的费用以及与您的安全分析工具相关的费用。本部分介绍如何启用这些日志,并提供了一些最佳实践来帮助您在价值和费用之间进行权衡。

默认情况下禁用数据访问审核日志(BigQuery 除外)。如需为 BigQuery 以外的 Google Cloud 服务配置数据访问审核日志,您必须使用 Google Cloud 控制台使用 Google Cloud CLI 来修改 Identity and Access Management (IAM) 政策对象。启用数据访问审核日志时,您还可以配置记录哪些类型的操作。数据访问审核日志分为三种:

  • ADMIN_READ:用于记录读取元数据或配置信息的操作。
  • DATA_READ:用于记录读取用户所提供数据的操作。
  • DATA_WRITE:用于记录写入用户所提供数据的操作。

请注意,您无法配置对 ADMIN_WRITE 操作(即写入元数据或配置信息的操作)的记录。ADMIN_WRITE 操作包含在 Cloud Audit Logs 的管理员活动审核日志中,因此无法停用。

管理数据访问审核日志的数量

启用数据访问审核日志时,目标是最大限度地提高它们在安全洞察方面的价值,同时也需限制其费用和管理开销。为了帮助您实现该目标,我们建议您执行以下操作以过滤掉低价值、高容量的日志:

  • 优先考虑相关服务,例如托管敏感工作负载、密钥和数据的服务。如需了解您可能需要优先考虑的服务的具体示例,请参阅数据访问审核日志配置示例
  • 优先考虑相关项目,例如托管生产工作负载的项目,而不是托管开发者环境和预演环境的项目。 如需过滤掉特定项目的所有日志,请将以下表达式添加到接收器的日志过滤条件中。将 PROJECT_ID 替换为要从中过滤掉所有日志的项目的 ID:

    项目 日志过滤条件表达式
    排除给定项目中的所有日志
    
    NOT logName =~ "^projects/PROJECT_ID"
        
  • 优先考虑一部分数据访问操作,例如 ADMIN_READDATA_READDATA_WRITE,以尽可能减少记录的操作数量。例如,某些服务(如 Cloud DNS)会写入所有三种类型的操作,但您只能为 ADMIN_READ 操作启用日志记录。配置以下三种数据访问操作中的一种或多种操作后,您可能需要排除操作量较大的特定操作。您可以通过修改接收器的日志过滤条件来排除这些大量操作。例如,您决定启用完整的数据访问审核日志记录,包括对一些关键存储服务的 DATA_READ 操作。在这种情况下,要排除特定的高流量数据读取操作,您可以将以下推荐的日志过滤条件表达式添加到接收器的日志过滤条件中:

    Service 日志过滤条件表达式
    从 Cloud Storage 中排除大量日志
    
    NOT (resource.type="gcs_bucket" AND
        (protoPayload.methodName="storage.buckets.get" OR
        protoPayload.methodName="storage.buckets.list")) 
    从 Cloud SQL 中排除大量日志
    
    NOT (resource.type="cloudsql_database" AND
        protoPayload.request.cmd="select") 
  • 优先考虑相关资源,例如托管敏感程度最高的工作负载和数据的资源。您可以根据资源处理的数据价值及其安全风险(例如是否可从外部访问资源)来对资源进行分类。虽然每项服务启用了数据访问审核日志,但您可以通过日志过滤条件过滤掉特定资源或资源类型。

  • 排除特定主帐号,这样系统就不会记录其数据访问。例如,您可以豁免内部测试帐号,让系统不再记录这些帐号的操作。如需了解详情,请参阅数据访问审核日志文档中的设置豁免项部分。

数据访问审核日志配置示例

下表提供了数据访问审核日志配置的基准,您可以在自己的 Cloud 项目中使用这些配置来在提供有价值的安全洞察的同时限制日志量:

层级 服务 数据访问审核日志类型 MITRE ATT&CK 策略
身份验证和授权服务 IAM
Identity-Aware Proxy (IAP)1
Cloud KMS
Secret Manager
Resource Manager
ADMIN_READ
DATA_READ
发现
凭据访问
权限提升
存储服务 BigQuery(默认启用)
Cloud Storage1, 2
DATA_READ
DATA_WRITE
收集
渗漏
基础架构服务 Compute Engine
组织政策
ADMIN_READ Discovery

1 如果为 IAP 或 Cloud Storage 启用数据访问审核日志,则当受 IAP 保护的网络资源或 Cloud Storage 对象中的流量很大时,便可能生成大容量日志。

2 此外,为 Cloud Storage 启用数据访问审核日志还可能会导致无法使用经过身份验证的浏览器下载非公开对象。如需详细了解此问题及建议的解决方法,请参阅 Cloud Storage 问题排查指南

在示例配置中,请注意服务是如何按其底层数据、元数据或配置根据敏感度层级进行分组的。这些层级分别展示了数据访问审核日志记录的以下推荐粒度:

  • 身份验证和授权服务:对于此层级的服务,我们建议审核所有数据访问操作。此审核级别可帮助您监控对敏感密钥、Secret 和 IAM 政策的访问。进行此访问监控可能有助于您检测到诸如发现凭据访问权限升级等 MITRE ATT&CK 策略。
  • 存储服务:对于此层级的服务,我们建议审核涉及用户提供的数据的数据访问操作。此审核级别可帮助您监控对有价值的敏感数据的访问。进行此访问监控可能有助于您检测到诸如数据收集渗漏等 MITRE ATT&CK 策略。
  • 基础架构服务:对于此层级的服务,我们建议审核涉及元数据或配置信息的数据访问操作。此审核级别可帮助您监控对基础架构配置的扫描。进行此访问监控可能有助于您检测到诸如工作负载发现等 MITRE ATT&CK 策略。

导出日志

确定并启用日志后,下一步便是将日志导出到分析工具。具体的导出过程因您使用的分析工具而异,如下图所示。

日志导出方法:使用日志接收器导出到 BigQuery;使用日志接收器和 Pub/Sub 导出到第三方 SIEM 工具;通过直接注入导出到 Chronicle。

下图显示了以下导出过程:

  • 如果您使用 Chronicle 和此预定义日志集来满足您的安全分析需求,则可以使用内置的 Chronicle 注入功能自动将日志直接导出到 Chronicle,如上图所示。您还可以前往日志范围限定工具中的可直接导出到 Chronicle 的内容项列,以查看预定义日志集。如需详细了解如何导出这些预定义日志,请参阅将 Google Cloud 日志注入到 Chronicle

  • 如果您是使用 BigQuery 或第三方 SIEM 工具,或是想要将一组扩展的日志导出到 Chronicle,则在启用日志与分析日志这两步之间,您还需执行一个额外的步骤,如上图所示。在此额外步骤中,您需要配置一个日志接收器,以适当地路由所选日志。如果您是使用 BigQuery,则只需使用此日志接收器便可将日志路由到 BigQuery。如果您是使用第三方 SIEM,则需要先让该日志接收器汇总 Pub/Sub 或 Cloud Storage 中的所选日志,然后才能将这些日志拉取到分析工具中。

本指南不涉及导出到 Chronicle 和第三方 SIEM 的过程。但是,以下部分概述了步骤并提供将日志导出到 BigQuery 所需的详细信息:

  1. 在 BigQuery 中设置日志记录导出数据集
  2. 为 BigQuery 配置日志接收器

    本部分介绍如何为 BigQuery 配置日志接收器。不过,在导出到第三方 SIEM 工具或是将一组扩展的日志导出到 Chronicle 时,您也可以应用此示例中介绍的日志接收器概念。主要区别在于日志接收器目标位置。在这些用例中,目标位置可以是下游分析工具将从其拉取日志的 Cloud Storage 存储桶或 Pub/Sub 主题,而不是 BigQuery(如图所示)。

  3. 为 BigQuery 数据集设置 IAM 政策权限

  4. 确认日志已导出到 BigQuery

为 BigQuery 数据集设置数据集

按照说明设置数据集,用于托管导出的日志。如果您使用的是聚合日志,则应在组织内的某个 Google Cloud 项目中创建 BigQuery 数据集。当您导出单个项目的日志时,应在该项目中创建 BigQuery 数据集。

为 BigQuery 配置日志接收器

您可以通过使用先前生成并保存的日志过滤条件创建日志接收器来配置日志记录导出。如需简化数据的管理和查询,您可以将日志接收器配置为将数据导出到分区表,这些表会根据日志条目的 timestamp 字段按天对数据进行分区。使用分区表可以减少查询过程中扫描的数据量,从而有助于降低查询成本。分区表的另一个好处是,您可以在单个表或整个数据集级层设置分区过期时间,以便仅在您认为有用时才维护日志记录数据。例如,您可以将审核日志记录数据保留 3 年,然后在分区过期时自动删除旧数据。

在 gcloud CLI 中,您可以使用 gcloud logging sinks create 命令或 organizations.sinks.create API 调用来创建具有适当日志记录过滤条件的接收器。以下示例使用 gcloud 命令为组织创建一个名为 gcp_logging_sink_bq 的接收器。该接收器包括所有子项目,并指定要使用的日志过滤条件。

gcloud logging sinks create gcp_logging_sink_bq \
     bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID \
     --use-partitioned-tables \
     --log-filter="LOG_FILTER" \
     --include-children \
     --organization=ORGANIZATION_ID

请替换以下内容:

  • PROJECT_ID:BigQuery 数据集所在项目的 ID。
  • DATASET_ID:BigQuery 数据集的 ID。
  • LOG_FILTER:您通过日志范围限定工具保存的日志过滤条件。
  • ORGANIZATION_ID:您的组织的 ID。

gcloud logging sinks create 命令会返回类似于如下所示的响应:

Created [https://logging.googleapis.com/v2/organizations/324989855333/sinks/gcp_logging_sink_bq].
Please remember to grant `serviceAccount:gcp-logging-sink-bq@logging-o324989855333.iam.gserviceaccount.com` the WRITER role on the dataset..
More information about sinks can be found at /logging/docs/export/configure_export

在响应输出中,复制并保存 serviceAccount 字段中显示的值,以便在下一部分使用。例如,上一个示例输出中显示的 serviceAccount 值为 gcp-logging-sink-bq@logging-o324989855333.iam.gserviceaccount.com

serviceAccount 字段中显示的值提供与您刚刚创建的接收器关联的服务帐号的标识符。此标识符是接收器的写入者身份。在您授予此身份对 BigQuery 数据集的写入访问权限之前,从此接收器导出日志条目的操作将会失败。在下一部分中,您将向接收器的写入者身份授予写入权限。

为 BigQuery 数据集设置 IAM 政策权限

如需允许日志接收器将导出的日志写入 BigQuery,您需要将接收器的写入者身份添加到 BigQuery 数据集,并为该身份提供 Editor 权限。否则,写入操作将失败。

如需向服务帐号添加权限,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,转到 BigQuery:

    转到 BigQuery

  2. 打开您为导出的日志创建的 BigQuery 数据集。

  3. 在“数据集信息”标签页中,点击共享 下拉菜单,然后点击权限

  4. 在“数据集权限”侧边栏中,点击添加主帐号

  5. 新建主帐号字段中,输入接收器的写入者身份。请记住,此身份是创建日志接收器后生成的响应中提供的 serviceAccount 字段的值。

  6. 角色下拉菜单中,选择 BigQuery Data Editor

    IAM 政策权限 - Editor。

使用此过滤条件创建日志导出后,日志文件开始填充已配置项目中的 BigQuery 数据集。

确认日志已导出到 BigQuery

将日志导出到 BigQuery 数据集时,Cloud Logging 会创建 BigQuery 表来保存导出的日志条目,如以下屏幕截图所示:

已选择 cloudaudit_googleapis_com_data_access 表的 BigQuery 探索器。

该屏幕截图显示了 Cloud Logging 如何根据日志条目所属的日志名称命名每个 BigQuery 表。例如,在屏幕截图中选择的 cloudaudit_googleapis_com_data_access 表包含日志 ID 为 cloudaudit.googleapis.com%2Fdata_access 的数据访问审核日志。除了根据相应的日志条目命名之外,每个表还根据每个日志条目的时间戳进行分区。

管理员活动和数据访问日志都加载到 BigQuery 中,其 protoPayload 日志条目字段在 BigQuery 中重命名为 protoPayload_auditlog。如需详细了解 Cloud Logging 在写入 BigQuery 之前完成的架构转换,请参阅导出的审核日志中的字段

分析日志

您可以针对审核日志和平台日志运行各种查询。以下列表提供了一组按问题类型分组的安全问题示例。针对此列表中的每个问题,本指南也提供了相关的 CSA 查询。如需使用与每个问题关联的 CSA 查询,请将 MY_DATASET_ID 替换为您在本文档前面创建的 BigQuery 数据集,并将 MY_PROJECT_ID 替换为数据集所在的 Google Cloud 项目 ID。

登录和访问问题

相应示例查询会执行分析,以检测对 Google Cloud 环境的可疑登录尝试或初始访问尝试。

Google Workspace 是否标记了任何可疑的登录尝试?

通过搜索 Google Workspace 登录审核中的 Cloud Identity 日志,以下查询可检测 Google Workspace 标记的可疑登录尝试。此类登录尝试可能来自 Google Cloud 控制台、Google Workspace 管理控制台或 gcloud CLI。


SELECT
  timestamp,
  protopayload_auditlog.authenticationInfo.principalEmail,
  protopayload_auditlog.requestMetadata.callerIp,
  protopayload_auditlog.methodName
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_data_access`,
  UNNEST(JSON_QUERY_ARRAY(protopayload_auditlog.metadataJson, '$.event[0].parameter')) AS parameter
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 60 DAY)
  AND protopayload_auditlog.metadataJson IS NOT NULL
  AND protopayload_auditlog.serviceName = "login.googleapis.com"
  AND protopayload_auditlog.methodName = "google.login.LoginService.loginSuccess"
  AND JSON_VALUE(parameter, '$.name') = "is_suspicious"
  AND JSON_VALUE(parameter, '$.boolValue') = "true"

是否任何用户身份发生过多登录失败?

通过搜索 Google Workspace 登录审核中的 Cloud Identity 日志,以下查询可检测过去 24 小时内发生三次或更多次登录失败的用户。


SELECT
  protopayload_auditlog.authenticationInfo.principalEmail,
  MIN(timestamp) AS earliest,
  MAX(timestamp) AS latest,
  count(*) AS attempts
FROM
 `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_data_access`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
  AND protopayload_auditlog.serviceName="login.googleapis.com"
  AND protopayload_auditlog.methodName="google.login.LoginService.LoginFailure"
GROUP BY
  1
HAVING
  attempts >= 3

是否任何访问尝试违反了 VPC Service Controls?

通过分析来自 Cloud Audit Logs 的政策拒绝审核日志,以下查询会检测 VPC Service Controls 阻止的访问尝试。任何查询结果都可能指示潜在的恶意活动,例如使用被盗凭据从未经授权的网络进行的访问尝试。


SELECT
  timestamp,
  protopayload_auditlog.authenticationInfo.principalEmail,
  protopayload_auditlog.requestMetadata.callerIp,
  protopayload_auditlog.methodName,
  protopayload_auditlog.serviceName,
  JSON_VALUE(protopayload_auditlog.metadataJson, '$.violationReason') as violationReason,
  IF(JSON_VALUE(protopayload_auditlog.metadataJson, '$.ingressViolations') IS NULL, 'ingress', 'egress') AS violationType,
  COALESCE(
    JSON_VALUE(protopayload_auditlog.metadataJson, '$.ingressViolations[0].targetResource'),
    JSON_VALUE(protopayload_auditlog.metadataJson, '$.egressViolations[0].targetResource')
  ) AS  targetResource,
  COALESCE(
    JSON_VALUE(protopayload_auditlog.metadataJson, '$.ingressViolations[0].servicePerimeter'),
    JSON_VALUE(protopayload_auditlog.metadataJson, '$.egressViolations[0].servicePerimeter')
  ) AS  servicePerimeter
FROM
 `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_policy`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 400 DAY)
  AND JSON_VALUE(protopayload_auditlog.metadataJson, '$."@type"') = 'type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata'
ORDER BY
  timestamp DESC
LIMIT 1000

是否有任何访问尝试违反了 IAP 访问权限控制?

通过分析 HTTP(S) 负载均衡日志,以下查询可检测被 IAP 阻止的访问尝试。任何查询结果都可能指示初始访问尝试或漏洞利用尝试。


SELECT
  timestamp,
  httpRequest.remoteIp,
  httpRequest.requestMethod,
  httpRequest.status,
  resource.labels.backend_service_name,
  httpRequest.requestUrl,
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].requests`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND resource.type="http_load_balancer"
  AND jsonpayload_type_loadbalancerlogentry.statusdetails = "handled_by_identity_aware_proxy"
ORDER BY
  timestamp DESC

权限更改问题

相应查询示例会对更改权限的管理员活动执行分析,其中包括更改 IAM 政策、群组和群组成员资格、服务帐号,以及任何关联的密钥。此类权限更改可能会提供对敏感数据或环境的高级别访问权限。

是否任何用户添加到了具有高权限的群组?

通过分析 Google Workspace 管理员审核审核日志,以下查询可检测添加到查询中列出的任何具有高权限的群组的用户。您可以在查询中使用正则表达式来定义要监控的群组(例如 admin@example.comprod@example.com)。任何查询结果都可能指示恶意或意外的提升权限。


SELECT
  timestamp,
  protopayload_auditlog.authenticationInfo.principalEmail,
  protopayload_auditlog.methodName,
  protopayload_auditlog.resourceName,
  (SELECT JSON_VALUE(x, '$.value')
   FROM UNNEST(JSON_QUERY_ARRAY(protopayload_auditlog.metadataJson, '$.event[0].parameter')) AS x
   WHERE JSON_VALUE(x, '$.name') = "USER_EMAIL") AS userEmail,
  (SELECT JSON_VALUE(x, '$.value')
   FROM UNNEST(JSON_QUERY_ARRAY(protopayload_auditlog.metadataJson, '$.event[0].parameter')) AS x
   WHERE JSON_VALUE(x, '$.name') = "GROUP_EMAIL") AS groupEmail,
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_activity`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 120 DAY)
  AND protopayload_auditlog.serviceName = "admin.googleapis.com"
  AND protopayload_auditlog.methodName = "google.admin.AdminService.addGroupMember"
  AND EXISTS(
    SELECT * FROM UNNEST(JSON_QUERY_ARRAY(protopayload_auditlog.metadataJson, '$.event[0].parameter')) AS x
    WHERE
      JSON_VALUE(x, '$.name') = 'GROUP_EMAIL'
      AND REGEXP_CONTAINS(JSON_VALUE(x, '$.value'), r'[admin|prod].*') -- Update regexp with other sensitive groups if applicable
  )

是否通过服务帐号授予了任何权限?

通过分析来自 Cloud Audit Logs 的管理员活动审核日志,以下查询会检测已通过服务帐号授予任何主帐号的任何权限。可以授予的权限示例包括模拟服务帐号或创建服务帐号密钥的权限。任何查询结果都可能指示提升权限实例或凭据泄露风险。


SELECT
 timestamp,
 logName,
 protopayload_auditlog.authenticationInfo.principalEmail,
 protopayload_auditlog.methodName,
 protopayload_auditlog.resourceName,
 bindingDelta
FROM
 `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_activity`,
  UNNEST(protopayload_auditlog.servicedata_v1_iam.policyDelta.bindingDeltas) AS bindingDelta
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 400 DAY)
  AND resource.type="service_account"
  AND protopayload_auditlog.methodName LIKE "google.iam.admin.%.SetIAMPolicy"
  AND bindingDelta.action = 'ADD'

未经批准的身份是否创建了任何服务帐号或密钥?

通过分析管理员活动审核日志,以下查询可检测用户手动创建的任何服务帐号或密钥。例如,您可以按照最佳实践,仅允许在自动化工作流中由已获批准的服务帐号创建服务帐号。因此,在该工作流之外创建的任何服务帐号都会被视为不合规并且可能是恶意的。


SELECT
  timestamp,
  protopayload_auditlog.authenticationInfo.principalEmail,
  protopayload_auditlog.methodName,
  protopayload_auditlog.resourceName,
  JSON_VALUE(protopayload_auditlog.responseJson, "$.email") as serviceAccountEmail
FROM
  `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_activity`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 180 DAY)
  AND resource.type="service_account"
  AND protopayload_auditlog.methodName LIKE "%CreateServiceAccount%"
  AND protopayload_auditlog.authenticationInfo.principalEmail NOT LIKE "%.gserviceaccount.com"

是否向敏感 IAM 政策添加了任何用户或从中移除了任何用户?

通过搜索管理员活动审核日志,以下查询可检测针对受 IAP 保护的资源(例如 Compute Engine 后端服务)的任何用户或群组访问权限更改。以下查询会搜索针对涉及 IAM 角色 roles/iap.httpsResourceAccessor 的 IAP 资源的所有 IAM 政策更新。此角色可提供访问 HTTPS 资源或后端服务的权限。任何查询结果都可能指示尝试绕过可能向互联网公开的后端服务的防御。


SELECT
  timestamp,
  protopayload_auditlog.authenticationInfo.principalEmail,
  resource.type,
  protopayload_auditlog.resourceName,
  JSON_VALUE(binding, '$.role') as role,
  JSON_VALUE_ARRAY(binding, '$.members') as members
FROM
  `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_activity`,
  UNNEST(JSON_QUERY_ARRAY(protopayload_auditlog.responseJson, '$.bindings')) AS binding
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 400 DAY)
  AND protopayload_auditlog.serviceName = "iap.googleapis.com"
  AND protopayload_auditlog.methodName LIKE "%.IdentityAwareProxyAdminService.SetIamPolicy"
  AND JSON_VALUE(binding, '$.role') = "roles/iap.httpsResourceAccessor"
ORDER BY
  timestamp DESC

预配活动问题

相应查询示例会执行分析以检测可疑或异常的管理员活动,例如预配和配置资源。

是否对日志记录设置进行了任何更改?

通过搜索管理员活动审核日志,以下查询可检测对日志记录设置进行的任何更改。监控日志记录设置可帮助您检测审核日志和类似防护规避技术的意外或恶意停用。


SELECT
  receiveTimestamp, timestamp AS eventTimestamp,
  protopayload_auditlog.requestMetadata.callerIp,
  protopayload_auditlog.authenticationInfo.principalEmail,
  protopayload_auditlog.resourceName,
  protopayload_auditlog.methodName
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_activity`
WHERE
  protopayload_auditlog.serviceName = "logging.googleapis.com"

是否停用了任何 VPC 流日志?

通过搜索管理员活动审核日志,以下查询可检测其 VPC 流日志被主动停用的任何子网。监控 VPC 流日志设置可帮助您检测 VPC 流日志和类似防御规避技术的意外或恶意停用。


SELECT
  receiveTimestamp, timestamp AS eventTimestamp,
  protopayload_auditlog.requestMetadata.callerIp,
  protopayload_auditlog.authenticationInfo.principalEmail,
  protopayload_auditlog.resourceName,
  protopayload_auditlog.methodName
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_activity`
WHERE
protopayload_auditlog.methodName = "v1.compute.subnetworks.patch"
AND JSON_VALUE(protopayload_auditlog.requestJson, "$.logConfig.enable") = "false"

过去一周内是否修改了任何数量异常高的防火墙规则?

通过搜索管理员活动审核日志,以下查询可检测过去一周内任意指定一天发生的任何数量异常高的防火墙规则更改。为了确定是否存在离群值,查询会对防火墙规则更改的每日计数执行统计分析。系统会通过回顾 90 天回溯期中前面的每日计数来针对每天计算平均值和标准差。如果每日计数超过两个标准差,高于平均值,则考虑离群值。查询(包括标准差因子和回溯期)都可以进行配置,以适合您的云预配活动配置文件并最大限度地减少假正例。


SELECT
  *,
  AVG(counter) OVER (
    ORDER BY day
    ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS avg,
  STDDEV(counter) OVER (
    ORDER BY day
    ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS stddev,
  COUNT(*) OVER (
    RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS numSamples
FROM (
  SELECT
    EXTRACT(DATE FROM timestamp) AS day,
    ARRAY_AGG(DISTINCT protopayload_auditlog.methodName IGNORE NULLS) AS actions,
    ARRAY_AGG(DISTINCT protopayload_auditlog.authenticationInfo.principalEmail IGNORE NULLS) AS actors,
    COUNT(*) AS counter
  FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_activity`
  WHERE
    timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 90 DAY)
    AND protopayload_auditlog.methodName LIKE "v1.compute.firewalls.%"
    AND protopayload_auditlog.methodName NOT IN ("v1.compute.firewalls.list", "v1.compute.firewalls.get")
  GROUP BY
    day
)
WHERE TRUE
QUALIFY
  counter > avg + 2 * stddev
  AND day >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
ORDER BY
  counter DESC

过去一周内是否删除了任何虚拟机?

通过搜索管理员活动审核日志,以下查询可列出过去一周内删除的任何 Compute Engine 实例。此查询可帮助您审核资源删除并检测潜在的恶意活动。


SELECT
  timestamp,
  resource.labels.instance_id,
  protopayload_auditlog.authenticationInfo.principalEmail,
  protopayload_auditlog.resourceName,
  protopayload_auditlog.methodName
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_activity`
WHERE
  resource.type = "gce_instance"
  AND protopayload_auditlog.methodName = "v1.compute.instances.delete"
  AND operation.first IS TRUE
  AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
ORDER BY
  timestamp desc,
  resource.labels.instance_id
LIMIT
  1000

工作负载使用问题

相应示例查询会执行分析,以了解谁以及哪个身份在使用您的云工作负载和 API,并帮助您在内部或外部检测潜在的恶意行为。

过去一周内是否任何用户身份的任何 API 使用率异常高?

通过分析所有 Cloud Audit Logs,以下查询可检测过去一周内任意指定一天任何用户身份的 API 使用率异常高。此类异常高的使用率可能指示潜在的 API 滥用、内部人员威胁或凭据泄露。为了确定是否存在离群值,此查询会对每个主帐号的每日操作次数执行统计分析。系统会通过回顾 60 天回溯期中前面的每日计数来针对每天和每个主帐号计算平均值和标准差。如果用户的每日计数超过三个标准差,高于其平均值,则考虑离群值。查询(包括标准差因子和回溯期)都可以进行配置,以适合您的云预配活动配置文件并最大限度地减少假正例。


SELECT
  *,
  AVG(counter) OVER (
    PARTITION BY principalEmail
    ORDER BY day
    ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS avg,
  STDDEV(counter) OVER (
    PARTITION BY principalEmail
    ORDER BY day
    ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS stddev,
  COUNT(*) OVER (
    PARTITION BY principalEmail
    RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS numSamples
FROM (
  SELECT
    protopayload_auditlog.authenticationInfo.principalEmail,
    EXTRACT(DATE FROM timestamp) AS day,
    ARRAY_AGG(DISTINCT protopayload_auditlog.methodName IGNORE NULLS) AS actions,
    COUNT(*) AS counter
  FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_*`
  WHERE
    timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 60 DAY)
    AND protopayload_auditlog.authenticationInfo.principalEmail IS NOT NULL
    AND protopayload_auditlog.methodName NOT LIKE "storage.%.get"
    AND protopayload_auditlog.methodName NOT LIKE "v1.compute.%.list"
    AND protopayload_auditlog.methodName NOT LIKE "beta.compute.%.list"
  GROUP BY
    protopayload_auditlog.authenticationInfo.principalEmail,
    day
)
WHERE TRUE
QUALIFY
  counter > avg + 3 * stddev
  AND day >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
ORDER BY
  counter DESC

过去一个月每天的自动扩缩使用率是多少?

通过分析管理员活动审核日志,以下查询可报告过去一个月的自动扩缩使用率(按天细分)。此查询可用于识别需要进一步安全调查的模式或异常。


SELECT
  TIMESTAMP_TRUNC(timestamp, DAY) AS day,
  protopayload_auditlog.methodName AS methodName,
  COUNT(*) AS counter
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_activity`
WHERE
  resource.type = "gce_instance_group_manager"
  AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY
  1, 2
ORDER BY
  1, 2

数据访问问题

这些示例查询会执行分析,以了解正在访问或修改 Google Cloud 中的数据的用户。

过去一周哪些用户最常访问数据?

以下查询使用数据访问审核日志来查找过去一周最常访问 BigQuery 表数据的用户身份。


SELECT
  protopayload_auditlog.authenticationInfo.principalEmail,
  COUNT(*) AS COUNTER
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_data_access`
WHERE
  (protopayload_auditlog.methodName = "google.cloud.bigquery.v2.JobService.InsertJob" OR
   protopayload_auditlog.methodName = "google.cloud.bigquery.v2.JobService.Query")
  AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
GROUP BY
  1
ORDER BY
  2 desc, 1
LIMIT
  100

上个月哪些用户访问了“帐号”表中的数据?

以下查询使用数据访问审核日志来查找过去一个月最常查询给定 accounts 表的用户身份。除了 BigQuery 导出目标位置的 MY_DATASET_IDMY_PROJECT_ID 占位符之外,以下查询还使用 DATASET_IDPROJECT_ID 占位符。您需要替换 DATASET_IDPROJECT_ID 占位符,以指定正在分析其访问情况的目标表,例如本示例中的 accounts 表。


SELECT
  protopayload_auditlog.authenticationInfo.principalEmail,
  COUNT(*) AS COUNTER
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_data_access`,
  UNNEST(protopayload_auditlog.authorizationInfo) authorizationInfo
WHERE
  (protopayload_auditlog.methodName = "google.cloud.bigquery.v2.JobService.InsertJob" OR
   protopayload_auditlog.methodName = "google.cloud.bigquery.v2.JobService.Query")
  AND authorizationInfo.permission = "bigquery.tables.getData"
  AND authorizationInfo.resource = "projects/[PROJECT_ID]/datasets/[DATASET_ID]/tables/accounts"
  AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY
  1
ORDER BY
  2 desc, 1
LIMIT
  100

哪些表最常受到访问?是谁访问的?

以下查询使用数据访问审核日志来查找过去一个月内最常读取和修改的数据的 BigQuery 表。它会显示关联的用户身份,以及数据读取与修改的总次数。


SELECT
  protopayload_auditlog.resourceName,
  protopayload_auditlog.authenticationInfo.principalEmail,
  COUNTIF(JSON_EXTRACT(protopayload_auditlog.metadataJson, "$.tableDataRead") IS NOT NULL) AS dataReadEvents,
  COUNTIF(JSON_EXTRACT(protopayload_auditlog.metadataJson, "$.tableDataChange") IS NOT NULL) AS dataChangeEvents,
  COUNT(*) AS totalEvents
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_data_access`
WHERE
  STARTS_WITH(resource.type, 'bigquery') IS TRUE
  AND (JSON_EXTRACT(protopayload_auditlog.metadataJson, "$.tableDataRead") IS NOT NULL
    OR JSON_EXTRACT(protopayload_auditlog.metadataJson, "$.tableDataChange") IS NOT NULL)
  AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY
  1, 2
ORDER BY
  5 DESC, 1, 2
LIMIT 1000

过去一周对 BigQuery 进行的前十大查询是什么?

以下查询使用数据访问审核日志来查找过去一周最常见的查询。它还列出了相应的用户和引用的表。


SELECT
  COALESCE(
   JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, "$.jobChange.job.jobConfig.queryConfig.query"),
   JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, "$.jobInsertion.job.jobConfig.queryConfig.query")) as query,
  STRING_AGG(DISTINCT protopayload_auditlog.authenticationInfo.principalEmail, ',') as users,
  ANY_VALUE(COALESCE(
   JSON_EXTRACT_ARRAY(protopayload_auditlog.metadataJson, "$.jobChange.job.jobStats.queryStats.referencedTables"),
   JSON_EXTRACT_ARRAY(protopayload_auditlog.metadataJson, "$.jobInsertion.job.jobStats.queryStats.referencedTables"))) as tables,
  COUNT(*) AS counter
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_data_access`
WHERE
  (resource.type = 'bigquery_project' OR resource.type = 'bigquery_dataset')
  AND operation.last IS TRUE
  AND (JSON_EXTRACT(protopayload_auditlog.metadataJson, "$.jobChange") IS NOT NULL
    OR JSON_EXTRACT(protopayload_auditlog.metadataJson, "$.jobInsertion") IS NOT NULL)
  AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
GROUP BY
  query
ORDER BY
  counter DESC
LIMIT 10

过去一个月内数据访问日志中记录的最常见操作是什么?

以下查询使用所有 Cloud Audit Logs 日志来查找过去一个月记录的 100 项最常用的操作。


SELECT
  ANY_VALUE(_TABLE_SUFFIX),
  protopayload_auditlog.methodName,
  protopayload_auditlog.serviceName,
  resource.type,
  COUNT(*) AS counter
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].cloudaudit_googleapis_com_data_access`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY
  protopayload_auditlog.methodName,
  protopayload_auditlog.serviceName,
  resource.type
ORDER BY
  counter DESC
LIMIT 100

网络安全问题

这些示例查询对 Google Cloud 中的网络活动执行分析。

是否有从新 IP 地址到特定子网的连接?

以下查询通过分析 VPC 流日志来检测从任何新来源 IP 地址到给定子网的连接。在此示例中,在 60 天的回溯期中,如果某个来源 IP 地址在过去 24 小时内首次出现,则它被视为新 IP 地址。建议您在适用 PCI 等特定合规性要求的子网上使用和调整此查询。


SELECT
  jsonPayload.connection.src_ip as src_ip,
  MIN(TIMESTAMP(REGEXP_REPLACE(jsonPayload.start_time, r'\.(\d{0,6})\d+(Z)?$', '.\\1\\2'))) AS firstInstance, --- TIMESTAMP supports up to 6 digits of fractional precision, so drop any more digits to avoid parse errors
  MAX(TIMESTAMP(REGEXP_REPLACE(jsonPayload.start_time, r'\.(\d{0,6})\d+(Z)?$', '.\\1\\2'))) AS lastInstance,
  ARRAY_AGG(DISTINCT resource.labels.subnetwork_name) as subnetNames,
  ARRAY_AGG(DISTINCT jsonPayload.dest_instance.vm_name) as vmNames,
  COUNT(*) numSamples
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].compute_googleapis_com_vpc_flows`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 60 DAY)
  AND jsonPayload.reporter = 'DEST'
  AND resource.labels.subnetwork_name IN ('prod-customer-data')
GROUP BY
  src_ip
HAVING firstInstance >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
ORDER BY
  lastInstance DESC,
  numSamples DESC

是否有任何连接被 Google Cloud Armor 阻止?

以下查询分析 HTTP(S) 负载均衡日志来查找被 Google Cloud Armor 中配置的安全政策阻止的连接,从而帮助检测潜在的漏洞攻击尝试。此查询假定您在 HTTP(S) 负载均衡上配置了 Google Cloud Armor 安全政策。此查询还假定您已启用 HTTP(S) 负载均衡日志记录,如日志范围限定工具中的启用链接提供的说明中所述。


SELECT
  timestamp,
  httpRequest.remoteIp,
  httpRequest.requestMethod,
  httpRequest.status,jsonpayload_type_loadbalancerlogentry.enforcedsecuritypolicy.name,
  resource.labels.backend_service_name,
  httpRequest.requestUrl,
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].requests`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND resource.type="http_load_balancer"
  AND jsonpayload_type_loadbalancerlogentry.statusdetails = "denied_by_security_policy"
ORDER BY
  timestamp DESC

Cloud IDS 是否检测到高严重级别的病毒或恶意软件?

以下查询搜索 Cloud IDS 威胁日志,以显示 Cloud IDS 检测到的任何高严重级别病毒或恶意软件。此查询假定您已配置 Cloud IDS 端点


SELECT
  jsonPayload.alert_time,
  jsonPayload.name,
  jsonPayload.details,
  jsonPayload.application,
  jsonPayload.uri_or_filename,
  jsonPayload.ip_protocol
FROM `[MY_PROJECT_ID].[MY_DATASET_ID].ids_googleapis_com_threat`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND resource.type="ids.googleapis.com/Endpoint"
  AND jsonPayload.alert_severity IN ("HIGH" OR "CRITICAL")
  AND jsonPayload.type = "virus"
ORDER BY
  timestamp DESC

您的 VPC 网络中的热门 Cloud DNS 查询网域是什么?

以下查询列出了过去 60 天内 VPC 网络中排名前 10 的 Cloud DNS 查询网域。此查询假定您已为 VPC 网络启用 Cloud DNS 日志记录,如日志范围限定工具中的启用链接提供的说明中所述。


SELECT
 jsonPayload.queryname,
 COUNT(jsonPayload.queryname) AS TotalQueries
FROM
 `[MY_PROJECT_ID].[MY_DATASET_ID].dns_googleapis_com_dns_queries`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 60 DAY)
GROUP BY
 jsonPayload.queryname
ORDER BY
 TotalQueries DESC
LIMIT
 10

后续步骤