Google Cloud Storage
本文档提供了有关如何将 Cloud Storage 与 Google Security Operations 的 SOAR 模块集成的指南。
此集成使用一个或多个开源组件。 您可以从 Cloud Storage 存储桶下载此集成的源代码副本。
使用场景
在 Google SecOps SOAR 平台中,Google Cloud Storage 集成可解决以下使用场景:
突发事件证据存储:剧本可以自动收集与突发事件相关的证据(例如日志和恶意软件样本),并将其存储在 Cloud Storage 存储分区中,从而提供一个防篡改的证据保存库。
威胁情报共享:您的安全团队可以使用 Cloud Storage 安全地与其他团队或组织共享威胁情报 Feed,例如恶意 IP 地址和网域列表。共享 Feed 可实现协作式威胁防御并缩短响应时间。
恶意软件分析沙盒集成:playbook 可以自动将突发事件中的可疑文件提交到基于云的恶意软件分析沙盒。您可以将分析结果存储在 Cloud Storage 中,以便查看和采取进一步行动,从而提供高效且伸缩恶意软件分析。
安全配置备份:使用 Google SecOps 的 SOAR 功能,自动将防火墙规则和入侵检测系统签名等关键安全配置定期备份到 Cloud Storage。自动执行备份可确保业务连续性,并在发生意外或恶意更改时更快地恢复数据。
网络钓鱼攻击活动工件存储:在调查网络钓鱼攻击活动时,使用 Google SecOps 的 SOAR 功能将网络钓鱼邮件、附件和其他工件存储在 Cloud Storage 中。制品存储空间可用于集中分析和保存证据,以便未来采取可能的法律诉讼。
准备工作
在 Google SecOps 中配置 Cloud Storage 集成之前,请完成以下前提步骤:
创建服务账号
如需创建服务账号,请完成以下步骤:
在 Google Cloud 控制台中,前往凭证页面。 进入“凭据”页面
从创建凭据菜单中选择服务账号。
在服务账号名称字段中输入一个名称,然后点击创建并继续。
点击继续 > 完成,跳过可选的角色分配和正文访问权限界面。
向服务账号授予角色
如需允许集成访问和管理您的存储分区和对象,请向您的服务账号授予必要的角色:
在 Google Cloud 控制台中,依次前往 IAM 和管理 > IAM。
找到您的服务账号,然后点击修改修改主账号。
点击添加其他角色,然后选择以下内容:
Storage Admin:提供对存储分区和对象的完全控制权。
Service Usage Consumer:只有在出于结算目的使用
Quota Project ID时才需要此角色。
点击保存。
选择并配置身份验证方法
建议使用 Workload Identity 作为身份验证方法,因为它使用的是短期令牌,而不是静态 Secret。
JSON 密钥:依赖于静态密钥文件。
Workload Identity(推荐):使用临时访问令牌。
配置 JSON 密钥
请按照以下步骤生成 JSON 格式的服务账号密钥文件:
在 Google Cloud 控制台中选择您的服务账号,然后前往密钥。
点击添加密钥 > 创建新密钥。
选择 JSON,然后点击创建。密钥文件会下载到您的计算机上。
配置 Workload Identity 凭据
借助 Workload Identity,Google SecOps 可以安全地模拟您的服务账号。完成以下步骤以配置 Workload Identity。
配置集成实例
如需触发身份发现流程,您必须先在 Google SecOps 中配置基本连接参数:
前往内容中心 > 回答集成。
搜索并选择 Google Cloud Storage 集成。
配置以下必需参数:
API 根:输入基本网址(例如
https://storage.googleapis.com)。Workload Identity 电子邮件地址:输入您之前创建的服务账号的电子邮件地址。
验证 SSL:确保此选项处于启用状态。
将用户服务账号 (JSON) 字段留空。
点击保存。
确定唯一身份电子邮件地址
由于 Google SecOps 使用特定的内部正文与您的 Google Cloud 资源通信,因此要确定具体的身份地址,需要触发连接测试。此步骤可确保您向正确的后端正文授予权限。
点击测试。测试预计会失败。
点击测试旁边的close_small按钮。
在错误消息中搜索以
gke-init-python@...或soar-python@...开头的电子邮件地址。复制此唯一电子邮件地址。
授予模拟权限
建立信任关系需要向唯一身份授予代表您的服务账号执行操作的权限。最后一步是建立安全桥梁,让集成使用临时、短期有效的令牌访问您的资源。
在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。
选择目标服务账号,然后前往权限。
点击授予访问权限。
在新的主账号字段中,粘贴您从 Google SecOps 复制的唯一身份电子邮件地址。
在分配角色字段中,选择
Service Account Token Creator(roles/iam.serviceAccountTokenCreator) 角色。点击保存。
将 Cloud Storage 与 Google SecOps 集成
集成需要以下参数:
| 参数 | 说明 |
|---|---|
Service Account |
可选
服务账号 JSON 密钥文件的完整内容。 |
Workload Identity Email |
可选。
用于工作负载身份模拟的服务账号的客户端电子邮件地址。 |
Project ID |
可选 用于 Cloud Storage 集成的项目 ID。如果您未为此参数设置任何值,系统会从 |
Quota Project ID |
可选 您用于 Google Cloud API 和结算的 Google Cloud 项目 ID。此形参要求您向服务账号授予 如果未提供值,则从 |
如需了解如何在 Google SecOps 中配置集成,请参阅配置集成。
如有需要,您可以在稍后阶段进行更改。配置集成实例后,您可以在 playbook 中使用该实例。如需详细了解如何配置和支持多个实例,请参阅支持多个实例。
操作
如需详细了解操作,请参阅 在工作台页面中处理待处理的操作和执行人工处置措施。
从存储分区下载对象
使用此操作可从 Cloud Storage 存储桶下载特定对象(文件)。
此操作不会在实体上运行。
操作输入
“从存储分区下载对象”操作需要以下参数:
| 参数 | 说明 |
|---|---|
Bucket Name |
必需 包含要下载的对象的 Cloud Storage 存储桶的名称。 |
Object Name |
必需 要下载的对象的完整名称。 如果对象位于存储桶中的某个文件夹内,请添加文件夹路径,例如 |
Download Path |
必需 下载对象的绝对路径,该路径指向现有目录,例如 |
操作输出
“从存储分区下载对象”操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
JSON 结果
以下示例描述了使用“从存储分区下载对象”操作时收到的 JSON 结果输出:
{
"object_name": "123.txt"
"download_path": "/usr/bin/share/download.txt"
}
输出消息
在 Case Wall 上,“从存储分区下载对象”操作提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。 |
Error executing action "Download an Object From a Bucket".
Reason: ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表介绍了使用“从存储分区下载对象”操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
True 或 False |
获取存储分区的访问控制列表
使用“获取存储分区的访问控制列表”操作可检索并显示指定 Cloud Storage 存储分区的 ACL。
此操作不会在实体上运行。
操作输入
“获取某个存储分区的访问控制列表”操作需要以下参数:
| 参数 | 说明 |
|---|---|
Bucket Name |
必需 您要检索其 ACL 的 Cloud Storage 存储桶的名称。如需检索多个存储桶的 ACL,请以逗号分隔的字符串形式输入存储桶名称,例如 |
操作输出
“获取存储分区的访问控制列表”操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 不可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
JSON 结果
[
{"BucketName": "ziv",
"BucketACLs": [
{"Entity": "project-owners-ID",
"Role": "OWNER"}
]
}
]
输出消息
在“支持请求墙”上,“获取存储分区的访问控制列表”操作会提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。 |
Error executing action "Get a Bucket's Access Control List".
Reason:
ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表介绍了使用“获取存储分区的访问控制列表”操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
True 或 False |
列出存储分区对象
使用“列出存储分区对象”操作可列出存储在 Cloud Storage 存储桶中的对象。
此操作不会在实体上运行。
操作输入
“列出存储分区对象”操作需要以下参数:
| 参数 | 说明 |
|---|---|
Bucket Name |
必需 要从中检索对象的存储桶的名称。 |
Max Objects to Return |
可选 要返回的对象数量。 默认情况下,该操作每次执行都会返回 50 个对象。 |
Retrieves the Access Control List of an object |
可选 如果选择此操作,则会检索对象 ACL。 默认情况下未选中。 |
操作输出
“列出存储分区对象”操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
JSON 结果
以下示例介绍了使用“列出存储分区对象”操作时收到的 JSON 结果输出:
如果未选择
Retrieves the Access Control List of an object参数:{ "Objects": [ { "ObjectName": "test.txt", "Bucket": "ContentType": "TimeCreated": " ", "TimeUpdated": " ", "Size": 18, "MD5": "7CjVfQ+Oz/C0pI08IKRdvQ==", "Owner": "", "CR32c": "RQEqxA==", "id": "siemplify-tip/test.txt/1604926667310271" } ] }如果选择了
Retrieves the Access Control List of an object参数:{ "Objects": [ { "ObjectName": "test.txt", "Bucket": "BUCKET_NAME", "ContentType": "text/plain" "TimeCreated": " ", "TimeUpdated": " ", "Size": 18, "MD5": "7CjVfQ+Oz/C0pI08IKRdvQ==", "Owner": "", "CR32c": "RQEqxA==", "id": "BUCKET_NAME/test.txt/1604926667310271", "ObjectACL": [ { "entity": "user@example.com", "role": "OWNER" }] }, ] }
输出消息
在案例墙上,“列出存储分区对象”操作会提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。 |
Error executing action "List Bucket Objects". Reason:
ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表介绍了使用“列出存储分区对象”操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
True 或 False |
列出存储分区
使用“列出存储分区”操作从 Cloud Storage 中检索存储分区列表。
此操作不会在实体上运行。
操作输入
“列出所有数据桶”操作需要以下参数:
| 参数 | 说明 |
|---|---|
Max Results |
可选 要返回的存储分区数量上限。 默认情况下,该操作会返回 50 个分桶。 |
操作输出
“列出存储分区”操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
JSON 结果
以下示例描述了使用“列出存储分区”操作时收到的 JSON 结果输出:
{
"Buckets": [
{
"CreationDate": "2020-11-09T12:57:03.981Z",
"ModificationDate": "2020-11-09T12:57:03.981Z",
"Name": "testexample",
"Owner": "testexample"
}]
}
输出消息
在案例墙上,“列出桶”操作提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。 |
Error executing action "List Buckets". Reason:
ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表介绍了使用“列出存储分区”操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
True 或 False |
Ping
使用 Ping 操作测试与 Cloud Storage 的连接。
此操作不会在实体上运行。
操作输入
无。
操作输出
该操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 不可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
输出消息
在“支持请求墙”上,“Ping”操作会提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
Successfully connected to the Google Cloud Storage server with
the provided connection parameters! |
操作成功。 |
Failed to connect to the Google Cloud Storage server! Error is
ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表介绍了使用 Ping 操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
True 或 False |
移除存储分区的公开访问权限
使用“从存储分区中移除公开访问权限”操作从 Cloud Storage 存储桶中移除公开访问权限。
此操作需要您向集成中使用的服务账号授予 Storage Admin 角色。
此操作不会在实体上运行。
操作输入
“从存储分区中移除公开访问权限”操作需要以下参数:
| 参数 | 说明 |
|---|---|
Resource Name |
必需 相应存储桶的资源名称。 |
Prevent Public Access From Bucket |
必需 如果选择此操作,系统会将存储桶配置为禁止可能的公开访问。 |
操作输出
“从存储分区中移除公开访问权限”操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 不可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
输出消息
在案例墙上,“移除对存储分区的公开访问权限”操作会提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
Successfully removed public access from bucket using Google
Cloud Storage: RESOURCE_NAME
|
操作成功。 |
Error executing action "Remove Public Access From Bucket".
Reason: ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表介绍了使用“从存储分区中移除公开访问权限”操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
True 或 False |
更新存储分区上的 ACL 条目
使用“更新存储分区的 ACL 条目”操作更新指定 Cloud Storage 存储桶中的 ACL 条目。
操作输入
“更新存储分区上的 ACL 条目”操作需要以下参数:
| 参数 | 说明 |
|---|---|
Bucket Name |
必需 要修改 ACL 的存储桶的名称。 |
Entity |
必需 持有相应权限的实体。 可能的值如下:
如需详细了解实体,请参阅资源表示法。 |
Role |
必需 实体所需的访问权限。 可能的值如下所示:
|
操作输出
“更新存储分区的 ACL 条目”操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 不可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
输出消息
在支持案例墙上,“更新存储分区上的 ACL 条目”操作提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。现有角色与 Role 参数值不匹配。检查 Role 参数值。 |
Successfully updated ACL entity:
ENTITY to role:
ROLE in bucket
BUCKET_NAME. |
操作成功。 |
|
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表介绍了使用“更新桶上的 ACL 条目”操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
True 或 False |
将对象上传到存储分区
使用“将对象上传到存储分区”操作将对象上传到 Cloud Storage 存储桶。
此操作不会在实体上运行。
操作输入
“将对象上传到存储分区”操作需要以下参数:
| 参数 | 说明 |
|---|---|
Bucket Name |
必需 要将对象上传到的存储桶的名称。 |
Source File Path |
必需 要上传的文件的绝对路径,例如 |
Object Name |
必需 存储桶中已上传对象的名称。 |
操作输出
“将对象上传到存储分区”操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
JSON 结果
{
"object_id":"BUCKET_NAME/errorlog.txt/1610616919132517",
"Object_name":"errorlog.txt",
"md5_hash":"PTdL8D6pBwIKyMfIXR/H9A==",
"object_path":"/b/BUCKET_NAME/o/errorlog.txt"
}
输出消息
在 Case Wall 上,“将对象上传到存储分区”操作提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。 |
Error executing action "Upload an Object To a Bucket". Reason:
ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表介绍了使用“将对象上传到存储分区”操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
True 或 False |