将 Pub/Sub 与 Google SecOps 集成

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

使用场景

Pub/Sub 集成支持以下使用情形:

  • 自动注入提醒:持续检索发布到 Pub/Sub 主题的安全日志、提醒和遥测数据,并将它们作为案例注入到 Google SecOps 中。

  • 集中式安全编排:通过 Pub/Sub 将来自云系统和第三方系统的安全事件路由整合在一起,以触发自动化响应 playbook。

准备工作

在 Google SecOps 中配置 Pub/Sub 集成之前,请完成以下前提步骤:

  1. 创建服务账号

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

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

    • 选项 1:Workload Identity(推荐):此方法使用短期有效的令牌,通过服务账号模拟来实现。

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

创建服务账号

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

    转到“服务账号”

  2. 点击添加创建服务账号

  3. 提供名称和说明,然后点击完成。记下服务账号的电子邮件地址

授予 IAM 角色

授予权限后,集成便可查看和拉取订阅中的消息。如需分配标准角色,请完成以下步骤:

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

    转到 IAM

  2. 找到您的服务账号,然后点击修改主账号修改)。

  3. 点击添加其他角色,然后选择 Pub/Sub 查看者 (roles/pubsub.viewer)。

  4. 点击保存

配置 Workload Identity 凭据

Workload Identity 是推荐方法,因为它使用短期有效的访问令牌(通过服务账号模拟实现)。

识别唯一实例身份

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

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

  2. 选择 Pub/Sub 集成,然后在 Workload Identity 电子邮件地址中输入您的服务账号电子邮件地址。

  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)。

授予配额项目访问权限

使用 Workload Identity 进行身份验证需要 Quota Project ID 来跟踪 API 使用情况和结算信息。

  1. 在 Google Cloud 控制台中,前往用作配额项目的项目的 IAM

    转到 IAM

  2. 找到您的服务账号,然后点击修改主账号修改)。

  3. 点击添加其他角色,然后选择 Service Usage Consumer (roles/serviceusage.serviceUsageConsumer)。

  4. 点击保存

配置 JSON 密钥

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

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

    转到“服务账号”

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

  3. 选择 JSON,然后点击创建。浏览器会将 JSON 文件下载到您的计算机。

集成参数

Pub/Sub 集成需要以下参数:

参数 说明
Workload Identity Email

可选。

您服务账号的客户端电子邮件地址。

仅当您使用工作负载身份进行身份验证时,才需要配置此参数。如果已配置,您还必须提供 Quota Project ID,系统会忽略 Service Account JSON File Content

Service Account JSON File Content

可选。

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

为服务账号密钥身份验证配置此参数。

Quota Project ID

可选。

用于 API 使用情况和结算的项目 ID。

使用 Workload Identity 身份验证时,此参数是必需的。

如果未提供值,集成会从服务账号凭据中检索 ID。

Project ID

可选。

Pub/Sub 中要定位的项目 ID。

如果未提供值,集成会从服务账号凭据中检索 ID。

Verify SSL

必填。

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

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

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

操作

如需详细了解操作,请参阅 在工作台页面中处理待处理的操作执行人工处置措施

Ping

使用 Ping 操作测试与 Pub/Sub 的连接。

此操作不适用于 Google SecOps 实体。

操作输入

无。

操作输出

Ping 操作提供以下输出:

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

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

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

操作失败。

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

脚本结果

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

脚本结果名称
is_success TrueFalse

连接器

如需详细了解如何在 Google SecOps 中配置连接器,请参阅提取数据(连接器)

Pub/Sub - 消息连接器

在 Google SecOps 平台中,Pub/Sub - 消息连接器称为 PubSub - 消息连接器

使用 Pub/Sub - 消息连接器从 Pub/Sub 中检索消息。

JSON 严重程度映射

如需映射提醒严重程度,您需要指定 Pub/Sub - 消息连接器使用哪个字段来获取 Severity Mapping JSON 参数的严重程度值。连接器响应可以包含 integerfloatstring 等值类型。

Pub/Sub - 消息连接器会读取 integerfloat 值,并根据 Google SecOps 设置对其进行映射。下表显示了 integer 值与 Google SecOps 中的严重程度之间的映射关系:

整数值 映射的严重程度
100 Critical
80100 High
6080 Medium
4060 Low
不到 40 Informational

如果响应包含 string 值,则 Pub/Sub - 消息连接器需要进行额外配置。

最初,默认值显示如下:

{
    "Default": 60
}

如果映射所需的值位于 event_severity JSON 键中,则这些值可以如下所示:

  • "Malicious"
  • "Benign"
  • "Unknown"

如需解析 event_severity JSON 键值并确保 JSON 对象格式正确,请按如下方式配置 Severity Mapping JSON 参数:

{
    "event_severity": {
        "Malicious": 100,
        "Unknown": 60,
        "Benign": -1
    },
    "Default": 50
}

必须提供 "Default" 值。

如果同一 JSON 对象有多个匹配项,Pub/Sub - 消息连接器会优先处理第一个 JSON 对象键。

如需处理包含 integerfloat 值的字段,请在 Severity Mapping JSON 参数中配置键和空字符串:

{
  "Default":"60",
  "integer_field": "",
  "float_field": ""
}

连接器输入源

Pub/Sub - 消息连接器需要以下参数:

参数 说明
Product Field Name 必需

存储商品名称的字段的名称。

默认值为 Product Name

Event Field Name 必需

用于确定事件名称(子类型)的字段名称。

默认值为 event_type

Environment Field Name 可选

存储环境名称的字段的名称。

如果找不到环境字段,则将环境设置为默认环境。

默认值为 ""

Environment Regex Pattern 可选

要对 Environment Field Name 字段中找到的值运行的正则表达式模式。此参数可让您使用正则表达式逻辑来操纵环境字段。

使用默认值 .* 可检索所需的原始 Environment Field Name 值。

如果正则表达式模式为 null 或空,或者环境值为 null,则最终环境结果为默认环境。

PythonProcessTimeout 必需

运行当前脚本的 Python 进程的超时限制(以秒为单位)。

默认值为 60

Service Account JSON File Content 可选

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

您可以配置此参数或 Workload Identity Email 参数。

如需配置此参数,请提供您在创建服务账号时下载的服务账号密钥 JSON 文件的完整内容。

对于 Pub/Sub - 消息连接器,使用服务账号密钥 JSON 文件进行身份验证的优先级高于工作负载身份联合。

Workload Identity Email 可选

您服务账号的客户端电子邮件地址。

您可以配置此参数或 Service Account JSON File Content 参数。

如需使用工作负载身份联合模拟服务账号,请向您的服务账号授予 Service Account Token Creator 角色。

Project ID 可选

连接器中要使用的项目 ID。

Quota Project ID 可选

您用于 Google Cloud API 和结算的 Google Cloud 项目 ID。此参数要求您向服务账号授予 Service Usage Consumer 角色。如需详细了解 IAM 角色,请参阅使用 IAM 进行访问权限控制

集成会将此参数值附加到所有 API 请求。

Subscription ID 必需

Pub/Sub 订阅 ID。

Case Name Template 可选

自定义支持请求名称。

配置此参数后,连接器会将一个名为 custom_case_name 的新键添加到 Google SecOps 事件中。

您可以采用以下格式提供占位符: [name of the field]

示例:Phishing - [event_mailbox]

对于占位符,连接器会使用第一个 Google SecOps 事件。连接器仅处理包含字符串值的键。如需配置此参数,请指定不带前缀的事件字段。

Alert Name Template 必需

自定义提醒名称。

您可以采用以下格式提供占位符: [name of the field]

示例:Phishing - [event_mailbox]

对于占位符,连接器会使用第一个 Google SecOps 事件。连接器仅处理包含字符串值的键。如果您未提供任何值或使用了无效的模板,连接器将使用以下格式的回退值:CONNECTOR_NAME - Alert。如需配置此参数,请指定不带前缀的事件字段。

Rule Generator Template 必需

自定义规则生成器。

您可以采用以下格式提供占位符: [name of the field]

示例:Phishing - [event_mailbox]

对于占位符,连接器会使用第一个 Google SecOps 事件。连接器仅处理包含字符串值的键。如果您未提供任何值或使用了无效的模板,连接器将使用以下格式的回退值:CONNECTOR_NAME - Rule Generator。如需配置此参数,请指定不带前缀的事件字段。

Timestamp Field 必需

用于定义 Google SecOps 提醒时间戳的字段的名称。

如果时间戳未使用 Unix 纪元时间格式,请在 Timestamp Format 参数中定义时间戳格式。

默认值为 message_publishTime

Timestamp Format 可选

消息时间戳格式。

连接器需要时间戳才能正确处理消息。如果时间戳未使用 Unix 纪元时间格式,并且您未配置时间戳格式,则连接器会失败。

默认值为 %Y-%m-%dT%H:%M:%S.%fZ

Severity Mapping JSON 必需

用于定义连接器如何从消息中提取严重程度的 JSON 对象。

默认值如下:

    {
      "Default": "60"
    }
    

如需详细了解严重程度映射,请参阅 JSON 严重程度映射

Unique ID Field 可选

用于确认消息是否唯一的字段的名称。您可以使用保留关键字 pubsub_message_id 提取原生 Pub/Sub 消息 ID。如果您未设置值或未找到相应字段,连接器会生成一个 SHA-256 哈希值,并将其用作消息的标识符。

Max Messages To Fetch 必需

每次连接器迭代要处理的消息数量上限。

默认值为 100

Disable Overflow 可选

如果选中此选项,连接器会在创建提醒期间忽略 Google SecOps 溢出机制。

此选项将会默认选中。

Verify SSL 必需

如果选择此项,集成会验证用于连接到 Pub/Sub 的 SSL 证书是否有效。

默认处于选中状态。

Proxy Server Address 可选

要使用的代理服务器的地址。

Proxy Username 可选

用于进行身份验证的代理用户名。

Proxy Password 可选

用于进行身份验证的代理密码。

连接器规则

Pub/Sub - 消息连接器支持代理。

连接器事件

以下示例展示了 Pub/Sub - 消息连接器生成的 Google SecOps 事件的 JSON 输出:

{
   "notificationConfigName": "organizations/ORGANIZATION_ID/notificationConfigs/soar_connector_toxic_notifications_config",
   "finding": {
       "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
       "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
       "resourceName": "//compute.googleapis.com/projects/PROJECT_ID/global/firewalls/FIREWALL_ID",
       "state": "ACTIVE",
       "category": "OPEN_NETBIOS_PORT",
       "externalUri": "https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
       "sourceProperties": {
           "Recommendation": "Restrict the firewall rules at: https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
           "ExceptionInstructions": "Add the security mark \"allow_open_netbios_port\" to the asset with a value of \"true\" to prevent this finding from being activated again.",
           "Explanation": "Firewall rules that allow connections from all IP addresses on TCP ports 137-139 or UDP ports 137-139 may expose NetBIOS services to attackers.",
           "ScannerName": "FIREWALL_SCANNER",
           "ResourcePath": [
               "projects/PROJECT_ID/",
               "folders/FOLDER_ID/",
               "folders/FOLDER_ID/",
               "organizations/ORGANIZATION_ID/"
           ],
           "ExposedService": "NetBIOS",
           "OpenPorts": {
               "TCP": [
                   137.0,
                   138.0,
                   139.0
               ],
               "UDP": [
                   137.0,
                   138.0,
                   139.0
               ]
           },
           "compliance_standards": {
               "iso": [
                   {
                       "ids": [
                           "A.13.1.1"
                       ]
                   }
               ],
               "pci": [
                   {
                       "ids": [
                           "1.2.1"
                       ]
                   }
               ],
               "nist": [
                   {
                       "ids": [
                           "SC-7"
                       ]
                   }
               ]
           },
           "ReactivationCount": 4.0
       },
       "securityMarks": {
           "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks",
           "marks": {
               "peter": "e2e1"
           }
       },
       "eventTime": "2024-08-30T14:44:37.973090Z",
       "createTime": "2024-06-24T07:08:54.777Z",
       "propertyDataTypes": {
           "ResourcePath": {
               "listValues": {
                   "propertyDataTypes": [
                       {
                           "primitiveDataType": "STRING"
                       }
                   ]
               }
           },
           "ReactivationCount": {
               "primitiveDataType": "NUMBER"
           },
           "Explanation": {
               "primitiveDataType": "STRING"
           },
           "ExposedService": {
               "primitiveDataType": "STRING"
           },
           "ScannerName": {
               "primitiveDataType": "STRING"
           }
       }
   }
}

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