将发现结果批量导出到 BigQuery

本文档介绍如何将 Security Command Center 发现结果以按需方式批量导出到 BigQuery。

BigQuery 是 Google Cloud经济实惠的全托管式 PB 级分析数据仓库,可让您近乎实时地分析大量数据。如需详细了解 BigQuery,请参阅 BigQuery 文档

概览

此功能可提供截至特定时间点的发现结果快照。此功能可与持续 BigQuery 导出功能相辅相成,提供全面的分析和报告。

借助批量导出功能,您可以执行以下操作:

数据集结构

发现结果会以 findings 表中的行的形式导出到 BigQuery,且该表会按 source_idfinding_idevent_time 进行聚簇。

每个数据集包含一个 findings 表,其中包含以下字段:

字段 说明
source_id

Security Command Center 分配给发现结果来源的唯一标识符。例如,来自 Cloud Anomaly Detection 来源的所有发现结果都具有相同的 source_id 值。

示例:1234567890

finding_id 表示发现结果的唯一标识符。该标识符在组织来源范围内是唯一的。它由字母数字构成,并且少于或等于 32 个字符。
event_time

事件的发生时间或发现结果的更新时间。例如,如果发现结果表明防火墙打开,则 event_time 会捕获检测器认为防火墙处于打开状态的时间。如果发现结果在之后得以解决,那么该时间会反映解决发现结果的时间。

示例:2019-09-26 12:48:00.985000 UTC

bulk_export_id

对于批量导出(预览版),这是一个 UUID。

对于持续导出,此字段为空。

finding

被注入到 Security Command Center 以进行展示、通知、分析、政策测试和实施的评估数据(如安全、风险、运行状况或隐私)记录。例如,App Engine 应用中的跨站脚本攻击 (XSS) 漏洞是一个发现结果。

如需详细了解嵌套字段,请参阅 Finding 对象的 API 参考文档。

resource

与此发现结果关联的 Google Cloud 资源的相关信息。

如需详细了解嵌套字段,请参阅 Resource 对象的 API 参考文档。

费用

您需要支付与此功能相关的 BigQuery 费用,才能在 BigQuery 中存储数据。如需了解详情,请参阅 BigQuery 存储价格

准备工作

您必须先完成以下步骤,然后才能启用此功能。

设置权限

如需完成本指南,您必须拥有以下 Identity and Access Management (IAM) 角色:

创建 BigQuery 数据集

按照创建数据集中的步骤创建一个 BigQuery 数据集。

启用 Security Command Center API

如需导出发现结果,您必须按照以下步骤启用 Security Command Center API:

  1. 进入 Google Cloud 控制台中的“API 库”页面。

    转到 API 库

  2. 选择要启用 Security Command Center API 的项目。

  3. 搜索字段中,输入 Security Command Center,然后点击搜索结果中的 Security Command Center。

  4. 在随即显示的 API 页面上,点击启用

您的项目随即会启用 Security Command Center API。

在 VPC Service Controls 中授予边界访问权限

如果您使用 VPC Service Controls,请查看在 VPC Service Controls 中授予边界访问权限,并根据需要执行相应步骤。

对于为给定服务边界创建了批量导出的每位用户,都需要重复执行此步骤。

为新的 BigQuery 批量导出创建入站规则

如果您使用 VPC Service Controls,请查看为向 BigQuery 进行的新导出创建入站规则并根据需要执行相应步骤。

BigQuery 批量导出限制

创建 BigQuery 批量导出时,请考虑以下限制:

  • 对于单个组织,在任何给定时间,只能同时进行三项批量导出。
  • 如果您请求向同一 BigQuery 数据集进行多项非并发批量导出,则系统会将这些导出中的较新发现结果附加到 BigQuery findings 表。发现结果不会被覆盖。

创建 BigQuery 批量导出

只能在组织级层批量导出发现结果。

如需将发现结果批量导出到 BigQuery 实例,请使用 gcloud CLI 并按照以下步骤操作:

  1. 前往 Google Cloud 控制台。

    前往 Google Cloud 控制台

  2. 选择启用了 Security Command Center API 的项目。

  3. 点击激活 Cloud Shell

  4. 如需创建新的导出配置,请运行以下命令:

    gcloud scc findings export-to-bigquery PARENT \
        --dataset=DATASET_NAME \
        [--location=LOCATION; default="global"] \
    

    替换以下内容:

    • PARENT:导出范围的相对名称。示例格式:organizations/ORGANIZATION_ID
    • DATASET_NAME:BigQuery 数据集的名称。示例格式:projects/PROJECT_ID/datasets/DATASET_ID
    • LOCATION:用于创建导出配置的 Security Command Center 位置;如果启用了数据驻留,请使用 eusaus;否则,请使用值 global。 此变量为可选项。

      例如,如需批量导出所有发现结果,请运行以下命令:

      gcloud scc findings export-to-bigquery organizations/123
        --dataset=projects/123/datasets/DATASET
      

      数据驻留方面,上述示例调用的是全球端点。

      如需为 eu 端点创建相同的批量导出,请运行以下命令:

      gcloud scc findings export-to-bigquery organizations/123
        --dataset=projects/123/datasets/DATASET
        --location=locations/eu
      

此命令会返回一个长时间运行的操作对象,其中包含跟踪导出状态时所需的 name 字符串。如需跟踪此 BigQuery 批量导出的状态,请参阅查看批量导出的状态

如需查看您的发现结果,请参阅查看发现结果

查询

如需了解可用于分析发现结果数据的各种查询,请参阅实用查询

查看批量导出的状态

如需查看批量导出的状态,您需要使用之前创建批量导出时返回的 long running operation name 字符串。

  1. 前往 Google Cloud 控制台。

    前往 Google Cloud 控制台

  2. 选择启用了 Security Command Center API 的项目。

  3. 点击激活 Cloud Shell

  4. 如需验证批量导出配置的详细信息,请运行以下命令:

    gcloud scc operations describe LONG_RUNNING_OPERATION_NAME \
        --organization=ORGANIZATION_ID
    

    替换以下内容:

    • LONG_RUNNING_OPERATION_NAME:之前创建批量导出时返回的 name 字符串。
    • ORGANIZATION_ID

      例如,如需查看组织 ID 设置为 123 的组织中返回的 name: "long-running-operation-name" 所对应批量导出请求的状态,请运行以下命令:

      gcloud scc operations describe long-running-operation-name \
        --organization=123
      
  • 如果导出成功,响应将包含 done: true
  • 如果导出失败,响应则会包含一个错误代码。
  • 如果导出仍在进行中,则响应既不会包含 done: true,也不会包含任何错误代码。

BigQuery 批量导出和持续导出

如果您想对同一 BigQuery 数据集同时使用批量和持续 BigQuery 导出,可以采用以下两种方法:

  • 先创建持续导出,然后通过批量导出进行回填

    1. 设置向 BigQuery 数据集进行的持续导出。成功创建导出后,您将开始实时接收 Security Command Center 发现结果。

    2. 使用相同的目标 BigQuery 数据集创建批量导出。系统会将导出时所有 Security Command Center 发现结果的快照导出到所选数据集中。

    批量导出需要花一些时间来执行。因此,如果在 T1 时创建持续导出,在 T2 时触发批量导出,并在 T3 时完成批量导出的发现结果快照,那么在 T1 到 T3 之间可能会看到重复记录。不过,不会有缺失的发现结果。

  • 先创建批量导出,然后再创建持续导出

    1. 创建批量导出。系统会将导出运行期间的所有 Security Command Center 发现结果的快照导出到所选的 BigQuery 数据集。

    2. 设置向同一目标 BigQuery 数据集进行的持续导出。成功创建导出后,您将开始实时接收 Security Command Center 发现结果。

    如果在 T1 时创建批量导出,在 T2 时完成批量导出的发现结果快照,并在 T3 时触发持续导出,那么 BigQuery 数据集中可能会缺失 T2 到 T3 之间的发现结果。

后续步骤