将 BigQuery 与 Google SecOps 集成

本文档介绍了如何将 BigQuery 与 Google Security Operations 集成。

使用场景

BigQuery 集成使用 Google SecOps 功能来支持以下用例:

  • 威胁情报丰富:使用存储在 BigQuery 中的威胁情报数据自动丰富安全提醒,以评估潜在威胁的严重程度和可信度。

  • 用户行为分析:通过分析存储在 BigQuery 中的历史日志来识别异常用户活动,从而检测内部威胁和被盗账号。

  • 安全数据湖分析:使用 BigQuery 查询功能分析从各种来源汇总的大量安全数据,以改进威胁搜寻。

  • 高级机器学习/AI 分析:使用历史安全数据和 BigQuery ML 构建自定义模型,以实现预测性防御和自动风险评分。

  • 长期数据保留:将已解决的突发事件数据归档到 BigQuery 中,以实现经济实惠的长期存储,从而支持合规性和取证审核。

准备工作

在 Google SecOps 中配置 BigQuery 集成之前,请完成以下前提条件步骤:

  1. 向您的服务账号授予必要的 Identity and Access Management 角色。

  2. 创建服务账号。

  3. 选择并配置以下身份验证方法之一:

    • 方法 1:Workload Identity(推荐):此方法使用服务账号模拟来使用短期有效的临时访问令牌。

    • 方法 2:服务账号 JSON 密钥:此方法依赖于静态、长期有效的密钥文件。

授予 IAM 角色

向服务账号授予必要的权限后,集成便可运行作业并访问您的数据。以下标准角色由 Google Cloud 管理,如果 API 要求发生变化,这些角色会自动更新。如需将这些角色分配给您的服务账号,请完成以下步骤:

  1. 在 Google Cloud 控制台中,前往 IAM。

    转到 IAM

  2. 在主账号列表中找到您的服务账号,然后点击修改主账号 (edit)。

  3. 点击添加其他角色,然后选择以下角色:

    • BigQuery User (roles/bigquery.user):允许集成在项目中运行作业(包括查询)。

    • BigQuery Data Viewer (roles/bigquery.dataViewer):允许集成从数据集和表中读取数据和元数据。

    • Service Usage Consumer (roles/serviceusage.serviceUsageConsumer):如果您在集成设置中配置 Quota Project ID,则此角色是必需的。

  4. 点击保存。

创建服务账号

  1. 在 Google Cloud 控制台中,前往 IAM 和管理 > 服务账号。

    转到“服务账号”

  2. 点击 add 创建服务账号。

  3. 提供名称和说明,然后点击创建并继续。

  4. 在向此服务账号授予对项目的访问权限步骤中,添加上一步中确定的角色。

  5. 点击完成。记下服务账号的邮箱。

配置 Workload Identity 凭证

建议使用 Workload Identity,因为它通过服务账号模拟使用短期有效的访问令牌。

识别唯一实例身份

建立连接需要向 Google SecOps 实例授予模拟服务账号的权限。

  1. 在 Google SecOps 中,前往内容中心 > 响应集成。

  2. 选择 BigQuery 集成,然后在 Workload Identity Email 字段中输入您的服务账号邮箱。

  3. 依次点击保存 > 测试。测试预计会失败。

  4. 点击测试旁边的 close_small 按钮,然后找到以 gke-init-python@... 或 soar-python@... 开头的身份电子邮件。

  5. 复制此唯一邮箱。

在 Google Cloud中授权实例身份

  1. 在 Google Cloud 控制台中,前往 IAM 和管理 > 服务账号。

    转到“服务账号”

  2. 选择目标服务账号,然后依次前往权限 > 授予访问权限。

  3. 将唯一邮箱粘贴到新的主账号字段中,并分配 Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator)。

配置 JSON 密钥

静态、长期有效的密钥文件需要手动轮替。仅当 Workload Identity 身份验证不可用时,才使用此方法。

  1. 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号,然后选择您的服务账号。

    转到“服务账号”

  2. 前往密钥标签页,然后依次点击添加密钥 > 创建新密钥。

  3. 选择 JSON,然后点击创建。文件会自动下载到您的计算机上。

手动配置各个参数

如果您选择手动输入凭证,请在文本编辑器中打开下载的 JSON 密钥文件,以复制集成设置中所需的各个值。

集成参数

如需在 Google SecOps 与 BigQuery 之间建立连接,您必须配置以下参数。该集成支持三种不同的身份验证路径。选择以下方法之一来提供凭据。

  • Workload Identity:使用 Workload Identity Email 和 Quota Project ID。

  • 服务账号 JSON 文件:使用 Service Account Json File Content 一次性提供整个密钥。

  • 手动输入各个参数:使用从 JSON 密钥中手动复制的单独字段。

参数 说明
API Root

可选。

BigQuery 实例的 API 根(例如 https://bigquery.googleapis.com)。

Workload Identity Email

可选。

服务账号的客户端邮箱。请将其用于 Workload Identity 身份验证。

Service Account Json File Content

可选。

服务账号密钥 JSON 文件的完整内容。

如果您配置此参数,集成会忽略各个凭据参数。

Quota Project ID

可选。

用于 API 使用和结算的项目 ID。使用 Workload Identity 身份验证时,此参数是必需的。

Project ID

可选。

BigQuery 中的目标项目 ID。

Verify SSL

必填。

验证连接的 SSL 证书。默认处于启用状态。

个人凭证参数

仅当您手动输入凭证(而非使用完整的 JSON 文件内容或 Workload Identity)时,才使用以下参数。

参数 说明
Account Type

可选。

在 JSON 密钥的 type 字段中找到的值(通常为 service_account)。

Private Key ID

可选。

在 JSON 密钥的 private_key_id 字段中找到的值。

Private Key

可选。

在 JSON 密钥的 private_key 字段中找到的值。

Client Email

可选。

在 JSON 密钥的 client_email 字段中找到的值。

Client ID

可选。

在 JSON 密钥的 client_id 字段中找到的值。

Auth URI

可选。

在 JSON 密钥的 auth_uri 字段中找到的值。

默认值为 https://accounts.google.com/o/oauth2/auth。

Token URI

可选。

在 JSON 密钥的 token_uri 字段中找到的值。

默认值为 https://oauth2.googleapis.com/token。

Auth Provider X509 URL

可选。

在 JSON 密钥的 auth_provider_x509_cert_url 字段中找到的值。

Client X509 URL

可选。

在 JSON 密钥的 client_x509_cert_url 字段中找到的值。

如需了解如何在 Google SecOps 中配置集成,请参阅配置集成。

如有需要,您可以在后续阶段进行更改。配置集成实例后,您可以在 playbook 中使用该实例。如需详细了解如何配置和支持多个实例,请参阅支持多个实例。

操作

如需详细了解操作,请参阅 在工作桌上响应待处理的操作和在案例中运行手动操作。

Ping

使用 Ping 操作测试与 BigQuery 的连接。

此操作不会在 Google SecOps 实体上运行。

操作输入

无。

操作输出

Ping 操作提供以下输出:

操作输出类型 可用性
案例墙附件 不可用
案例墙链接 不可用
案例墙表格 不可用
丰富化表 不可用
JSON 结果 不可用
输出消息 可用
脚本结果 可用
输出消息

Ping 操作可能会返回以下输出消息:

输出消息 消息说明
Successfully connected to the Google BigQuery server with the provided connection parameters! 操作成功。
Failed to connect to the Google BigQuery server! Error is ERROR_REASON

操作失败。

请检查与服务器的连接、输入参数或凭据。

脚本结果

下表列出了使用 Ping 操作时脚本结果输出的值:

脚本结果名称 值
is_success True 或 False

运行自定义查询

使用运行自定义查询操作在 BigQuery 中执行自定义查询。

此操作不会在 Google SecOps 实体上运行。

操作输入

运行自定义查询操作需要以下参数:

参数 说明
Query

必填。

要执行的 SQL 查询。

Max Results To Return

可选。

每个响应要返回的结果数。

默认值为 50。

操作输出

运行自定义查询操作提供以下输出:

操作输出类型 可用性
案例墙附件 不可用
案例墙链接 不可用
案例墙表格 不可用
丰富化表 不可用
JSON 结果 可用
输出消息 可用
脚本结果 可用
JSON 结果

以下示例展示了使用运行自定义查询操作时收到的 JSON 结果输出:

{
    "Airport_Code": "CODE",
    "Airport_Name": "NAME",
    "Time_Label": "2015/05",
    "Time_Month": 5,
    "Time_Month_Name": "May",
    "Time_Year": 2015,
    "Statistics___of_Delays_Carrier": 351,
    "Statistics___of_Delays_Late_Aircraft": 546,
    "Statistics___of_Delays_National_Aviation_System": 292,
    "Statistics___of_Delays_Security": 2,
    "Statistics___of_Delays_Weather": 100,
    "Statistics_Carriers_Names": "Example Air Lines Inc., Example Airlines Co.",
    "Statistics_Carriers_Total": 3,
    "Statistics_Flights_Cancelled": 88,
    "Statistics_Flights_Delayed": 1289,
    "Statistics_Flights_Diverted": 32,
    "Statistics_Flights_On_Time": 6182,
    "Statistics_Flights_Total": 7591,
    "Statistics_Minutes_Delayed_Carrier": 19332,
    "Statistics_Minutes_Delayed_Late_Aircraft": 34376,
    "Statistics_Minutes_Delayed_National_Aviation_System": 12346,
    "Statistics_Minutes_Delayed_Security": 48,
    "Statistics_Minutes_Delayed_Total": 76163,
    "Statistics_Minutes_Delayed_Weather": 100061
}
输出消息

运行自定义查询操作可能会返回以下输出消息:

输出消息 消息说明
Successfully executed query in Google BigQuery! 操作成功。
Error executing action "Run Custom Query". Reason: ERROR_REASON

操作失败。

请检查与服务器的连接、输入参数或凭据。

脚本结果

下表列出了使用运行自定义查询操作时脚本结果输出的值:

脚本结果名称 值
is_success True 或 False

运行 SQL 查询

使用运行 SQL 查询操作在 BigQuery 中执行查询。

此操作不会在 Google SecOps 实体上运行。

操作输入

运行 SQL 查询操作需要以下参数:

参数 说明
Dataset Name

必填。

执行查询时要使用的数据集的名称。

Query

必填。

要执行的 SQL 查询。

Max Results To Return

可选。

每个响应要返回的结果数。

默认值为 50。

操作输出

运行 SQL 查询操作提供以下输出:

操作输出类型 可用性
案例墙附件 不可用
案例墙链接 不可用
案例墙表格 不可用
丰富化表 不可用
JSON 结果 不可用
输出消息 可用
脚本结果 可用
JSON 结果

以下示例说明了使用运行 SQL 查询操作时收到的 JSON 结果输出:

{
    "Airport_Code": "CODE",
    "Airport_Name": "NAME",
    "Time_Label": "2015/05",
    "Time_Month": 5,
    "Time_Month_Name": "May",
    "Time_Year": 2015,
    "Statistics___of_Delays_Carrier": 351,
    "Statistics___of_Delays_Late_Aircraft": 546,
    "Statistics___of_Delays_National_Aviation_System": 292,
    "Statistics___of_Delays_Security": 2,
    "Statistics___of_Delays_Weather": 100,
    "Statistics_Carriers_Names": "Example Airlines Inc.,Example Airlines Co.",
    "Statistics_Carriers_Total": 3,
    "Statistics_Flights_Cancelled": 88,
    "Statistics_Flights_Delayed": 1289,
    "Statistics_Flights_Diverted": 32,
    "Statistics_Flights_On_Time": 6182,
    "Statistics_Flights_Total": 7591,
    "Statistics_Minutes_Delayed_Carrier": 19332,
    "Statistics_Minutes_Delayed_Late_Aircraft": 34376,
    "Statistics_Minutes_Delayed_National_Aviation_System": 12346,
    "Statistics_Minutes_Delayed_Security": 48,
    "Statistics_Minutes_Delayed_Total": 76163,
    "Statistics_Minutes_Delayed_Weather": 100061
}
输出消息

运行 SQL 查询操作可能会返回以下输出消息:

输出消息 消息说明
Successfully executed query in the BigQuery dataset DATASET_NAME. 操作成功。
Error executing action "Run SQL Query". Reason: ERROR_REASON

操作失败。

请检查与服务器的连接、输入参数或凭据。

脚本结果

下表列出了使用运行 SQL 查询操作时脚本结果输出的值:

脚本结果名称 值
is_success True 或 False

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。