将 Security Command Center 与 Google SecOps 集成
本文档介绍了如何将 Security Command Center 与 Google Security Operations 集成。
准备工作
在 Google SecOps 中配置 Security Command Center 集成之前,请完成以下前提步骤:
选择并配置以下身份验证方法之一:
选项 1:Workload Identity(推荐):此方法使用短期有效的临时访问令牌,通过服务账号模拟来消除存储任何 Secret 的需求。
方法 2:服务账号 JSON 密钥:此方法依赖于静态的长期有效的密钥文件。仅当您的环境中没有 Workload Identity 时,才使用此方法。
创建和配置 IAM 角色
如需为集成创建和配置自定义角色,请完成以下步骤:
在 Google Cloud 控制台中,前往 IAM 和管理 > 角色。
点击创建角色,以创建具有集成所需权限的自定义角色。
输入标题、说明和唯一 ID。
将角色发布阶段设置为
General Availability。向创建的角色添加以下权限:
securitycenter.assets.listsecuritycenter.findings.listsecuritycenter.findings.setMutesecuritycenter.findings.setStateserviceusage.services.use(使用 API 和进行配额归因时需要)
点击创建。
创建服务账号
如需为集成创建服务账号,请完成以下步骤:
在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。
点击创建服务账号。
提供名称和说明,然后点击创建并继续。
在向此服务账号授予对项目的访问权限这一步中,添加您创建的自定义角色。
点击完成以完成账号的创建过程。此服务账号的电子邮件地址会在身份验证配置过程中使用。
配置 Workload Identity 凭据
选择此方法或 JSON 密钥方法来验证集成。 Workload Identity 是推荐的更安全的方法,因为它使用短期临时访问令牌(通过服务账号模拟),无需存储或轮换长期有效的密钥。
确定唯一实例身份
如需使用 Workload Identity,您必须向 Google SecOps 实例授予模拟服务账号的权限。这是允许实例安全访问 Google Cloud 资源的最后一步。
在 Google SecOps 中,依次前往内容中心 > 响应集成。
选择您要配置的集成,然后在
Workload Identity Email字段中输入您的服务账号电子邮件地址。在
Quota Project ID字段中输入有效的项目 ID。依次点击保存 > 测试。测试预计会失败。
点击测试右侧的close_small图标,然后搜索以
gke-init-python@...或soar-python@...开头的身份电子邮件地址所对应的错误消息。复制此唯一电子邮件地址,并在集成配置期间将其粘贴到
Workload Identity Email中。
在 Google Cloud中授权实例身份
检索到 Google SecOps 实例的唯一身份后,您必须授权该身份访问您的 Google Cloud 资源。此步骤可启用服务账号模拟,使平台能够生成短期有效令牌并代表您执行操作,而无需静态密钥。
在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。
选择目标服务账号,然后依次前往权限 > 授予访问权限。
将唯一电子邮件地址粘贴到新的主账号字段中。
分配 Service Account Token Creator 角色 (
roles/iam.serviceAccountTokenCreator)。
授予配额项目访问权限
使用 Workload Identity 进行身份验证时,您必须在集成设置中指定 Quota Project ID,以便跟踪 API 使用情况和结算信息。
如需授权此操作,您必须向指定配额项目中的服务账号授予以下角色:
在 Google Cloud 控制台中,前往 IAM 和管理 > IAM,然后选择您的项目。
在主账号列表中找到您的服务账号,然后点击相应账号的修改(修改主账号)。
点击添加其他角色,然后选择 Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer)。点击保存。
配置 JSON 密钥
选择此方法或 Workload Identity 方法来验证集成。仅当您的环境中没有 Workload Identity 时,才使用 JSON 密钥方法,因为 Workload Identity 是推荐的更安全的方法。此方法依赖于需要手动管理和轮替的静态长期有效的密钥文件。
使用以下流程生成对集成进行身份验证所需的 JSON 密钥文件:
在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号,然后选择您创建的服务账号。
前往密钥标签页。
依次点击添加密钥 > 创建新密钥。
选择
JSON作为密钥类型,然后点击创建。JSON 文件会下载到您的计算机。复制此文件的全部内容,并在集成配置期间将其粘贴到
User's service account中。
集成参数
Security Command Center 集成需要以下参数:
| 参数 | 说明 |
|---|---|
API Root |
必填。 Security Command Center 实例的 API 根。 |
Organization ID |
可选。 用于确定 Security Command Center 集成查询范围的 Google Cloud 组织的 ID。 |
Project ID |
可选。 用于限定 Security Command Center 实例查询范围的 Google Cloud 项目 ID。 |
Quota Project ID |
可选。 用于 API 使用情况和结算的 Google Cloud 项目 ID。 如果您使用 Workload Identity 进行身份验证,则此参数为必需参数。 |
User's Service Account |
可选。 服务账号密钥 JSON 文件的完整内容。 仅当您使用 JSON 密钥进行身份验证时,才配置此参数。 |
Workload Identity Email |
可选。 您的服务账号的客户端电子邮件地址。 仅当您使用工作负载身份进行身份验证时,才需要配置此参数。 如果您配置此参数,还必须配置 |
Verify SSL |
必填。 如果选中此选项,集成会在连接到 Security Command Center 服务器时验证 SSL 证书。 默认处于启用状态。 |
如需了解如何在 Google SecOps 中配置集成,请参阅配置集成。
如有需要,您可以在稍后阶段进行更改。配置集成实例后,您可以在 playbook 中使用该实例。如需详细了解如何配置和支持多个实例,请参阅支持多个实例。
操作
如需详细了解操作,请参阅 在工作台页面中处理待处理的操作和执行人工处置措施。
获取发现结果详情
使用 Get Finding Details 操作可检索 Security Command Center 中发现结果的详细信息。
此操作不适用于 Google SecOps 实体。
操作输入
获取发现详情操作需要以下参数:
| 参数 | 说明 |
|---|---|
Finding Name |
必填。 要返回详细信息的发现结果的完整资源名称,格式为 此参数接受多个值,这些值以逗号分隔列表的形式提供。 |
操作输出
获取发现结果详情操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
“支持请求墙”表格
获取发现结果详情操作可以返回下表:
表格标题:发现结果详情
表列:
- 类别
- 州/省/直辖市/自治区
- 严重级别
- 类型
JSON 结果
以下示例展示了使用获取发现详情操作时收到的 JSON 结果输出:
{
{
"finding_name": "organizations/ORGANIZATION_ID/sources/2678067631293752869/findings/hvX6WwbvFyBGqPbEs9WH9m",
"finding": {
"name": "organizations/ORGANIZATION_ID/sources/2678067631293752869/findings/hvX6WwbvFyBGqPbEs9WH9m",
"parent": "organizations/ORGANIZATION_ID/sources/2678067631293752869",
"resourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"state": "ACTIVE",
"category": "Discovery: Service Account Self-Investigation",
"sourceProperties": {
"sourceId": {
"projectNumber": "PROJECT_ID",
"customerOrganizationNumber": "ORGANIZATION_ID"
},
"detectionCategory": {
"technique": "discovery",
"indicator": "audit_log",
"ruleName": "iam_anomalous_behavior",
"subRuleName": "service_account_gets_own_iam_policy"
},
"detectionPriority": "LOW",
"affectedResources": [
{
"gcpResourceName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID"
}
],
"evidence": [
{
"sourceLogId": {
"projectId": "PROJECT_ID",
"resourceContainer": "projects/PROJECT_ID",
"timestamp": {
"seconds": "1622678907",
"nanos": 448368000
},
"insertId": "ID"
}
}
],
"properties": {
"serviceAccountGetsOwnIamPolicy": {
"principalEmail": "prisma-cloud-serv@PROJECT_ID.",
"projectId": "PROJECT_ID",
"callerIp": "192.0.2.41",
"callerUserAgent": "Redlock/GC-MDC/resource-manager/PROJECT_ID Google-API-Java-Client HTTP-Java-Client/1.34.0 (gzip),gzip(gfe)",
"rawUserAgent": "Redlock/GC-MDC/resource-manager/PROJECT_ID Google-API-Java-Client HTTP-Java-Client/1.34.0 (gzip),gzip(gfe)"
}
},
"contextUris": {
"mitreUri": {
"displayName": "Permission Groups Discovery: Cloud Groups",
"url": "https://attack.mitre.org/techniques/ID/003/"
},
"cloudLoggingQueryUri": [
{
"displayName": "Cloud Logging Query Link",
"url": "https://console.cloud.google.com/logs/query;query=timestamp%3D%222021-06-03T00:08:27.448368Z%22%0AinsertId%3D%22ID%22%0Aresource.labels.project_id%3D%22PROJECT_ID%22?project=PROJECT_ID"
}
]
}
},
"securityMarks": {
"name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks"
},
"eventTime": "2021-06-03T00:08:27.448Z",
"createTime": "2021-06-03T00:08:31.074Z",
"severity": "LOW",
"canonicalName": "projects/PROJECT_ID/sources/SOURCE_ID/findings/FINDING_ID",
"mute": "UNDEFINED",
"findingClass": "THREAT",
"mitreAttack": {
"primaryTactic": "DISCOVERY",
"primaryTechniques": [
"PERMISSION_GROUPS_DISCOVERY",
"CLOUD_GROUPS"
]
}
},
"resource": {
"name": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"projectName": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"projectDisplayName": "PROJECT_ID",
"parentName": "//cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID",
"parentDisplayName": "example.net",
"type": "google.cloud.resourcemanager.Project",
"displayName": "PROJECT_ID"
}
}
}
输出消息
获取发现结果详情操作可以返回以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。 |
Error executing action "Get Finding Details". Reason: ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表列出了使用 Get Finding Details 操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
true 或 false |
列出资产漏洞
使用 List Asset Vulnerabilities 操作列出与 Security Command Center 中的实体相关的漏洞。
此操作不适用于 Google SecOps 实体。
操作输入
列出资产漏洞操作需要以下参数:
| 参数 | 说明 |
|---|---|
Asset Resource Names |
必填。 以逗号分隔列表,其中包含要检索相关数据的资产的唯一标识符(完整资源名称)。 |
Timeframe |
可选。 用于搜索漏洞或错误配置的时间范围。 可能的值如下:
默认值为 |
Record Types |
可选。 要返回的记录类型。 可能的值如下:
默认值为 |
Output Type |
可选。 要在每个资产的 JSON 结果中返回的输出类型。 可能的值如下:
默认值为 |
Max Records To Return |
可选。 每种记录类型要返回的记录数上限。 默认值为 |
操作输出
列出资产漏洞操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
“支持请求墙”表格
列出资产漏洞操作可以返回以下表格:
表格标题:ASSET_ID 漏洞
表列:
- 类别
- 说明
- 严重级别
- 活动时间
- CVE
表格标题:ASSET_ID 错误配置
表列:
- 类别
- 说明
- 严重级别
- 活动时间
- 建议
JSON 结果
以下示例展示了使用列出资产漏洞操作时收到的 JSON 结果输出:
{
."siemplify_asset_display_name":[1] [2] ""
"vulnerabilities": {
"statistics": {
"critical": 1,
"high": 1,
"medium": 1,
"low": 1,
"undefined": 1
},
"data": [
{
"category": "CATEGORY"
"description": "DESCRIPTION"
"cve_id": "CVE_ID"
"event_time": "EVENT_TIME"
"related_references": "RELATED_REFERENCES"
"severity": "SEVERITY"
}
]
},
"misconfigurations": {
"statistics": {
"critical": 1,
"high": 1,
"medium": 1,
"low": 1,
"undefined": 1
},
"data": [
{
"category": "CATEGORY"
"description": "DESCRIPTION"
"recommendation": "RECOMMENDATION"
"event_time": "EVENT_TIME"
"severity": "SEVERITY"
}
]
},
}
输出消息
列出资产漏洞操作可以返回以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。 |
Error executing action "List Asset Vulnerabilities". Reason:
ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表列出了使用 List Asset Vulnerabilities 操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
true 或 false |
Ping
使用 Ping 操作测试与 Security Command Center 的连接。
此操作不适用于 Google SecOps 实体。
操作输入
无。
操作输出
Ping 操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 不可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
输出消息
Ping 操作可以返回以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
Successfully connected to the Security Command Center server
with the provided connection parameters! |
操作成功。 |
Failed to connect to the Security Command Center server! Error
is ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表列出了使用 Ping 操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
true 或 false |
更新发现结果
使用 Update Finding 操作更新 Security Command Center 中的现有发现结果。
此操作不适用于 Google SecOps 实体。
操作输入
更新发现操作需要以下参数:
| 参数 | 说明 |
|---|---|
Finding Name |
必填。 要返回详细信息的发现结果的完整资源名称,格式为 此参数接受多个值,这些值以逗号分隔列表的形式提供。 |
Mute Status |
可选。 相应发现结果的忽略状态。 可能的值如下:
|
State Status |
可选。 发现结果的状态。 可能的值如下:
|
操作输出
更新发现结果操作提供以下输出:
| 操作输出类型 | 可用性 |
|---|---|
| 案例墙附件 | 不可用 |
| 案例墙链接 | 不可用 |
| “支持请求墙”表格 | 不可用 |
| 丰富化表 | 不可用 |
| JSON 结果 | 不可用 |
| 输出消息 | 可用 |
| 脚本结果 | 可用 |
输出消息
更新发现结果操作可以返回以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
|
操作成功。 |
Error executing action "Update Finding". Reason: ERROR_REASON |
操作失败。 检查与服务器的连接、输入参数或凭据。 |
脚本结果
下表列出了使用更新发现结果操作时脚本结果输出的值:
| 脚本结果名称 | 值 |
|---|---|
is_success |
true 或 false |
连接器
如需详细了解如何在 Google SecOps 中配置连接器,请参阅注入数据(连接器)。
Security Command Center - 发现结果连接器
使用 Security Command Center - 发现结果连接器检索有关 Security Command Center 发现结果的信息。
此连接器支持使用动态列表按类别过滤发现结果。
连接器输入
Security Command Center - 发现结果连接器需要以下参数:
| 参数 | 说明 |
|---|---|
Product Field Name |
必填。 存储商品名称的字段的名称。 商品名称主要会影响映射。为了简化和改进连接器的映射流程,默认值会解析为从代码引用的回退值。默认情况下,此参数的任何无效输入都会解析为回退值。 默认值为 |
Event Field Name |
必填。 用于确定事件名称(子类型)的字段的名称。 |
Environment Field Name |
可选。 存储环境名称的字段的名称。 如果缺少环境字段,连接器会使用默认值。 默认值为 |
Environment Regex Pattern |
可选。 要对在 使用默认值 如果正则表达式模式为 null 或空,或者环境值为 null,则最终环境结果为默认环境。 |
API Root |
必填。 Security Command Center 实例的 API 根。 |
Organization ID |
可选。 要使用的 Google Cloud 组织的 ID |
Project ID |
可选。 需使用的 Google Cloud 项目 ID。 |
Quota Project ID |
可选。 需使用的 Google Cloud 项目 ID。 |
Location ID |
可选。 要使用的地理位置的 ID。 默认值为 |
User's Service Account |
必填。 服务账号密钥 JSON 文件的完整内容。 仅当您使用 JSON 密钥进行身份验证时,才使用此参数。 |
Workload Identity Email |
可选。 您的服务账号的客户端电子邮件地址。 仅在您使用工作负载身份进行身份验证时使用此参数。 如果您配置此参数,还必须配置 |
Finding Class Filter |
可选。 一个逗号分隔列表,其中包含从来源提取数据时要纳入的安全发现结果类型。 可能的值如下:
如果未提供任何值,则会注入所有类别的发现结果。 |
Lowest Severity To Fetch |
可选。 要检索的提醒的最低严重程度。 如果您未配置此参数,连接器会提取所有严重程度的提醒。 可能的值如下:
如果严重程度未定义的发现结果被分配了 如果未提供任何值,则注入所有严重程度类型。 |
Fallback Severity |
可选。 要分配给任何已提取但来源未定义或无法识别严重程度评级的安全发现结果的严重程度。 可能的值如下:
默认值为 |
Max Hours Backwards |
可选。 要检索的发现结果的小时数(相对于当前时间)。 此参数可应用于首次启用连接器后的初始连接器迭代,也可作为已过期的连接器时间戳的回退值。 最大值为 默认值为 |
Max Findings To Fetch |
可选。 每次连接器迭代要处理的发现结果数量。 最大值为 默认值为 |
Use dynamic list as a blacklist |
必填。 如果选中此选项,连接器会将动态列表用作屏蔽列表。 默认情况下,该环境处于停用状态。 |
Verify SSL |
必填。 如果选中此选项,集成会在连接到 Security Command Center 服务器时验证 SSL 证书。 默认情况下,该环境处于停用状态。 |
Proxy Server Address |
可选。 要使用的代理服务器的地址。 |
Proxy Username |
可选。 用于进行身份验证的代理用户名。 |
Proxy Password |
可选。 用于进行身份验证的代理密码。 |
PythonProcessTime |
必填。 运行当前脚本的 Python 进程的超时时间限制(以秒为单位)。 默认值为 |