将 Pub/Sub 与 Google SecOps 集成
本文档介绍了如何将 Pub/Sub 与 Google Security Operations 集成。
使用场景
Pub/Sub 集成支持以下使用情形:
自动注入提醒:持续检索发布到 Pub/Sub 主题的安全日志、提醒和遥测数据,并将它们作为案例注入到 Google SecOps 中。
集中式安全编排:通过 Pub/Sub 将来自云系统和第三方系统的安全事件路由整合在一起,以触发自动化响应 playbook。
准备工作
在 Google SecOps 中配置 Pub/Sub 集成之前,请完成以下前提步骤:
选择并配置以下身份验证方法之一:
选项 1:Workload Identity(推荐):此方法使用短期有效的令牌,通过服务账号模拟来实现。
方法 2:服务账号 JSON 密钥:此方法依赖于静态的长期有效的密钥文件。
创建服务账号
在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。
点击添加创建服务账号。
提供名称和说明,然后点击完成。记下服务账号的电子邮件地址。
授予 IAM 角色
授予权限后,集成便可查看和拉取订阅中的消息。如需分配标准角色,请完成以下步骤:
在 Google Cloud 控制台中,前往 IAM
找到您的服务账号,然后点击修改主账号(修改)。
点击添加其他角色,然后选择 Pub/Sub 查看者 (
roles/pubsub.viewer)。点击保存。
配置 Workload Identity 凭据
Workload Identity 是推荐方法,因为它使用短期有效的访问令牌(通过服务账号模拟实现)。
识别唯一实例身份
建立连接需要授予 Google SecOps 实例模拟服务账号的权限。
在 Google SecOps 中,前往内容中心 > 响应集成。
选择 Pub/Sub 集成,然后在 Workload Identity 电子邮件地址中输入您的服务账号电子邮件地址。
依次点击保存 > 测试。测试预计会失败。
点击测试按钮旁边的close_small图标,然后找到以
gke-init-python@...或soar-python@...开头的身份电子邮件地址。复制此唯一电子邮件地址。
在 Google Cloud中授权实例身份
在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。
选择目标服务账号,然后依次前往权限 > 授予访问权限。
将唯一电子邮件地址粘贴到新主账号中,并分配 Service Account Token Creator 角色 (
roles/iam.serviceAccountTokenCreator)。
授予配额项目访问权限
使用 Workload Identity 进行身份验证需要 Quota Project ID 来跟踪 API 使用情况和结算信息。
在 Google Cloud 控制台中,前往用作配额项目的项目的 IAM。
找到您的服务账号,然后点击修改主账号(修改)。
点击添加其他角色,然后选择 Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer)。点击保存。
配置 JSON 密钥
静态的长期有效的密钥文件需要手动轮替。仅在无法使用 Workload Identity 身份验证时才使用此方法。
在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号,然后选择您的服务账号。
前往密钥标签页,然后依次点击添加密钥 > 创建新密钥。
选择 JSON,然后点击创建。浏览器会将 JSON 文件下载到您的计算机。
集成参数
Pub/Sub 集成需要以下参数:
| 参数 | 说明 |
|---|---|
Workload Identity Email |
可选。 您服务账号的客户端电子邮件地址。 仅当您使用工作负载身份进行身份验证时,才需要配置此参数。如果已配置,您还必须提供 |
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 |
True 或 False |
连接器
如需详细了解如何在 Google SecOps 中配置连接器,请参阅提取数据(连接器)。
Pub/Sub - 消息连接器
在 Google SecOps 平台中,Pub/Sub - 消息连接器称为 PubSub - 消息连接器。
使用 Pub/Sub - 消息连接器从 Pub/Sub 中检索消息。
JSON 严重程度映射
如需映射提醒严重程度,您需要指定 Pub/Sub - 消息连接器使用哪个字段来获取 Severity Mapping JSON 参数的严重程度值。连接器响应可以包含 integer、float 和 string 等值类型。
Pub/Sub - 消息连接器会读取 integer 和 float 值,并根据 Google SecOps 设置对其进行映射。下表显示了 integer 值与 Google SecOps 中的严重程度之间的映射关系:
| 整数值 | 映射的严重程度 |
|---|---|
100 |
Critical |
从 80 到 100 |
High |
从 60 到 80 |
Medium |
从 40 到 60 |
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 对象键。
如需处理包含 integer 或 float 值的字段,请在 Severity Mapping JSON 参数中配置键和空字符串:
{
"Default":"60",
"integer_field": "",
"float_field": ""
}
连接器输入源
Pub/Sub - 消息连接器需要以下参数:
| 参数 | 说明 |
|---|---|
Product Field Name |
必需 存储商品名称的字段的名称。 默认值为 |
Event Field Name |
必需 用于确定事件名称(子类型)的字段名称。 默认值为 |
Environment Field Name |
可选
存储环境名称的字段的名称。 如果找不到环境字段,则将环境设置为默认环境。 默认值为 |
Environment Regex Pattern |
可选
要对 使用默认值 如果正则表达式模式为 null 或空,或者环境值为 null,则最终环境结果为默认环境。 |
PythonProcessTimeout |
必需 运行当前脚本的 Python 进程的超时限制(以秒为单位)。 默认值为 |
Service Account JSON File Content |
可选 服务账号密钥 JSON 文件的内容。 您可以配置此参数或 如需配置此参数,请提供您在创建服务账号时下载的服务账号密钥 JSON 文件的完整内容。 对于 Pub/Sub - 消息连接器,使用服务账号密钥 JSON 文件进行身份验证的优先级高于工作负载身份联合。 |
Workload Identity Email |
可选 您服务账号的客户端电子邮件地址。 您可以配置此参数或 如需使用工作负载身份联合模拟服务账号,请向您的服务账号授予 |
Project ID |
可选 连接器中要使用的项目 ID。 |
Quota Project ID |
可选 您用于 Google Cloud API 和结算的 Google Cloud 项目 ID。此参数要求您向服务账号授予 集成会将此参数值附加到所有 API 请求。 |
Subscription ID |
必需 Pub/Sub 订阅 ID。 |
Case Name Template |
可选 自定义支持请求名称。 配置此参数后,连接器会将一个名为 您可以采用以下格式提供占位符:
示例: 对于占位符,连接器会使用第一个 Google SecOps 事件。连接器仅处理包含字符串值的键。如需配置此参数,请指定不带前缀的事件字段。 |
Alert Name Template |
必需 自定义提醒名称。 您可以采用以下格式提供占位符:
示例: 对于占位符,连接器会使用第一个 Google SecOps 事件。连接器仅处理包含字符串值的键。如果您未提供任何值或使用了无效的模板,连接器将使用以下格式的回退值: |
Rule Generator Template |
必需 自定义规则生成器。 您可以采用以下格式提供占位符:
示例: 对于占位符,连接器会使用第一个 Google SecOps 事件。连接器仅处理包含字符串值的键。如果您未提供任何值或使用了无效的模板,连接器将使用以下格式的回退值: |
Timestamp Field |
必需 用于定义 Google SecOps 提醒时间戳的字段的名称。 如果时间戳未使用 Unix 纪元时间格式,请在 默认值为 |
Timestamp Format |
可选 消息时间戳格式。 连接器需要时间戳才能正确处理消息。如果时间戳未使用 Unix 纪元时间格式,并且您未配置时间戳格式,则连接器会失败。 默认值为 |
Severity Mapping JSON |
必需 用于定义连接器如何从消息中提取严重程度的 JSON 对象。 默认值如下: { "Default": "60" } 如需详细了解严重程度映射,请参阅 JSON 严重程度映射。 |
Unique ID Field |
可选 用于确认消息是否唯一的字段的名称。您可以使用保留关键字 |
Max Messages To Fetch |
必需 每次连接器迭代要处理的消息数量上限。 默认值为 |
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"
}
}
}
}