将 Recommender 与 Google SecOps 集成
集成版本:7.0
本文档介绍了如何将 Recommender 与 Google Security Operations 集成。
准备工作
在 Google SecOps 平台中配置推荐器集成之前,请验证您是否具备以下条件:
自定义 Identity and Access Management 角色:包含查看和更新项目或组织中的建议所需的特定权限的角色。
身份验证方法:选择推荐的 Workload Identity(无密钥)方法或服务账号 JSON 密钥。
API 服务根目录:对 Recommender API 和 Cloud Resource Manager API 的端点的访问权限。
自定义 IAM 角色权限
在 Google Cloud 控制台中创建自定义角色,并为其分配集成正常运行所需的权限。
在 Google Cloud 控制台中,前往 IAM 和管理 > 角色页面。
点击 Create role。
输入角色的称谓、说明和唯一的 ID。
将角色发布阶段设置为
General Availability。点击添加权限,然后添加以下权限:
Recommender API:
recommender.iamPolicyInsights.getrecommender.iamPolicyInsights.listrecommender.iamPolicyRecommendations.getrecommender.iamPolicyRecommendations.listrecommender.iamPolicyRecommendations.update
Cloud Resource Manager API:
resourcemanager.projects.getresourcemanager.projects.listresourcemanager.projects.getIamPolicyresourcemanager.projects.setIamPolicy
位置信息访问权限:
recommender.locations.getrecommender.locations.list
其他资源访问权限:
resourcemanager.folders.getresourcemanager.folders.getIamPolicyresourcemanager.folders.setIamPolicyresourcemanager.organizations.getresourcemanager.organizations.getIamPolicyresourcemanager.organizations.setIamPolicy
点击创建。
身份验证配置
Google SecOps 支持两种身份验证途径。配置以下方法之一:
方法 1:Workload Identity(推荐):此方法是推荐的方法,因为它无需管理和轮换长期有效的 JSON 密钥,从而提供出色的安全性。
选项 2:服务账号 JSON 密钥:使用标准 JSON 密钥文件进行身份验证。仅当您的环境中没有 Workload Identity 时,才使用此方法。
使用 Workload Identity 进行身份验证(推荐)
此方法使用服务账号模拟,以便平台安全地访问您的资源。
创建目标服务账号:
在集成访问您的 Google Cloud 资源之前,您必须在项目中创建一个专用服务账号,并为其分配必要的权限。
- 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。
- 点击创建服务账号。
- 提供名称和 ID,然后点击创建并继续。
- 在向此服务账号授予对项目的访问权限下,选择上一部分中创建的自定义 IAM 角色。
- 点击完成。
- 复制服务账号的电子邮件地址。
确定您的 Google SecOps 实例身份:
如需启用安全模拟,您必须先确定特定 Google SecOps 实例使用的唯一服务账号身份。
- 在 Google SecOps 中,前往内容中心 > 响应集成。
- 搜索并选择 Recommender 集成。
- 将目标服务账号电子邮件地址粘贴到
Workload Identity Email中。 - 点击保存,然后点击测试。测试预计会失败。
- 点击测试右侧的close_small图标,然后在错误消息中搜索以
gke-init-python@或soar-python@开头的电子邮件地址。复制此唯一电子邮件地址。
授予模拟权限:
最后一步是向实例身份授予充当目标服务账号的权限,以便实例在无需静态密钥文件的情况下执行操作。
- 返回到Google Cloud 控制台中的 IAM 和管理 > 服务账号。
- 选择您创建的目标服务账号的名称。
- 前往权限标签页,然后点击授予访问权限。
- 在新的主账号字段中,粘贴电子邮件地址。
- 在选择角色字段中,选择 Service Account Token Creator (
roles/iam.serviceAccountTokenCreator)。 - 点击保存。请注意,此权限可能需要几分钟时间才能完成传播,然后连接测试才会成功。
使用服务账号 JSON 密钥进行身份验证
仅当您的环境中没有 Workload Identity 时,才使用此方法。
创建服务账号:
如需使用基于密钥的身份验证,您必须先在Google Cloud 项目中创建一个服务账号,以作为集成的身份。
- 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。
- 点击创建服务账号。
- 提供名称和 ID,然后点击创建并继续。
- 在向此服务账号授予对项目的访问权限下,选择您创建的自定义 IAM 角色。
- 点击完成。
生成并保存 JSON 密钥:
创建服务账号后,您必须生成一个私密 JSON 密钥文件,其中包含 Google SecOps 登录所需的凭据。
- 在 IAM 和管理 > 服务账号中,选择您创建的服务账号。
- 前往密钥标签页。
- 点击添加密钥 > 创建新密钥。
- 选择
JSON作为密钥类型,然后点击创建。该 JSON 文件将被下载到您的计算机。 - 复制此文件的全部内容,并在集成配置期间将其粘贴到
User's Service Account中。
集成参数
推荐器集成需要以下参数:
| 参数 | 说明 |
|---|---|
API Root |
必填。 Recommender 服务的 API 根。 默认值为 |
Resource Manager API Root |
必填。 用于管理项目和组织资源的 Resource Manager 服务的 API 根。 默认值为 |
Organization ID |
可选。 要与集成搭配使用的 Google Cloud 组织的唯一标识符。 |
Project ID |
可选。 用于检索推荐信息的 Google Cloud 项目 ID。 |
Quota Project ID |
可选。 用于结算和配额计算的项目 ID。 如果未提供任何值,则使用与服务账号凭据关联的项目。 |
Workload Identity Email |
可选。 用于工作负载身份模拟的服务账号的客户端电子邮件地址。 |
User's Service Account |
可选。 服务账号 JSON 密钥文件的完整内容。 |
Verify SSL |
可选。 如果选择此项,集成会在连接到推荐器服务器时验证 SSL 证书。 默认处于启用状态。 |
如需了解如何在 Google SecOps 中配置集成,请参阅配置集成。
如有需要,您可以在稍后阶段进行更改。配置集成实例后,您可以在剧本中使用该实例。如需详细了解如何配置和支持多个实例,请参阅支持多个实例。
操作
应用 IAM 建议
根据提供的输入应用 IAM 建议。
此操作仅适用于google.iam.policy.Recommender建议。
实体
此操作不会在实体上运行。
操作输入
如需配置操作,请使用以下参数:
| 参数 | |
|---|---|
IAM Recommendations JSON |
必填。 建议的 JSON 结果。 JSON 结果可以作为占位符从列出建议或获取建议操作中提供。 |
操作输出
| 操作输出类型 | |
|---|---|
| 案例墙附件 | 不适用 |
| 案例墙链接 | 不适用 |
| “支持请求墙”表格 | 不适用 |
| 丰富化表 | 不适用 |
| 实体数据分析 | 不适用 |
| 数据分析 | 不适用 |
| JSON 结果 | 可用 |
| OOTB widget | 不适用 |
| 脚本结果 | 可用 |
脚本结果
| 脚本结果名称 | 值 |
|---|---|
| is_success | True/False |
JSON 结果
{
"applied_recommendations": [
{
"name": "projects/PROJECT_ID/locations/global/recommenders/google.iam.policy.Recommender/recommendations/217d3019-bae5-4a52-9968-787fdd546a53",
"description": "Replace the current role with a smaller role to cover the permissions needed.",
"lastRefreshTime": "2023-07-28T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 610
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "add",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/-",
"value": "USER_ID@example.com",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/role": "roles/compute.instanceAdmin"
}
},
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "USER_ID@example.com",
"/iamPolicy/bindings/*/role": "roles/compute.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"member": "user:USER_ID@example.com",
"removedRole": "roles/compute.admin",
"addedRoles": [
"roles/compute.instanceAdmin"
],
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "SUCCEEDED",
"stateMetadata": {
"applied_by": "bulk_apply_by_automated_script-2023-08-11"
}
},
"etag": "\"892d57ee41baa03e\"",
"recommenderSubtype": "REPLACE_ROLE",
"associatedInsights": [
{
"insight": "projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID"
}
],
"priority": "P4"
},
{
"name": "projects/PROJECT_ID/locations/global/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID",
"description": "Replace the current role with a smaller role to cover the permissions needed.",
"lastRefreshTime": "2023-07-28T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 19
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "add",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/-",
"value": "user:USER_ID@example.com",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
}
},
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "user:USER_ID@example.com",
"/iamPolicy/bindings/*/role": "roles/storage.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"member": "user:USER_ID@example.com",
"removedRole": "roles/storage.admin",
"addedRoles": [
"roles/storage.objectAdmin"
],
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "SUCCEEDED",
"stateMetadata": {
"applied_by": "bulk_apply_by_automated_script-2023-08-11"
}
},
"etag": "\"af7635ffeb512998\"",
"recommenderSubtype": "REPLACE_ROLE",
"associatedInsights": [
{
"insight": "projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID"
}
],
"priority": "P4"
}
],
"failed_recommendations": []
}
案例墙
该操作会提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
Successfully applied provided IAM recommendations. |
操作成功。 |
Successfully applied provided IAM recommendation, but some of the
recommendations were not applied. |
操作成功。 |
No provided IAM recommendations were applied. |
建议失败。 |
Error executing action ACTION_NAME. |
相应操作返回了错误。 |
获取推荐内容
从 Recommender 服务获取具体建议。
实体
此操作不会在实体上运行。
操作输入
如需配置操作,请使用以下参数:
| 参数 | |
|---|---|
Recommendation name |
必填。 指定要返回的推荐名称。 该操作接受多个值,这些值以英文逗号分隔的字符串形式提供。 预期输入示例:
projects/projectname/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0f262740-bf4a-4c3d-9573-0da3345cf3f7
|
操作输出
| 操作输出类型 | |
|---|---|
| 案例墙附件 | 不适用 |
| 案例墙链接 | 不适用 |
| “支持请求墙”表格 | 不适用 |
| 丰富化表 | 不适用 |
| 实体数据分析 | 不适用 |
| 数据分析 | 不适用 |
| JSON 结果 | 可用 |
| OOTB widget | 不适用 |
| 脚本结果 | 可用 |
脚本结果
| 脚本结果名称 | 值 |
|---|---|
| is_success | True/False |
JSON 结果
[
{
"name": "name",
"description": "This role has not been used during the observation window.",
"lastRefreshTime": "2023-07-28T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 68
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "serviceAccount:SERVICE_ACCOUNT_ID.iam.gserviceaccount.com",
"/iamPolicy/bindings/*/role": "roles/monitoring.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"member": "serviceAccount:SERVICE_ACCOUNT_ID.iam.gserviceaccount.com",
"removedRole": "roles/monitoring.admin",
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "ACTIVE"
},
"etag": "",
"recommenderSubtype": "REMOVE_ROLE",
"associatedInsights": [
{
"insight": "projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.Insight/insights/"
}
],
"priority": "P4"
}
]
案例墙
该操作会提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
Successfully found recommendation in the Google Cloud Recommender
service. |
操作成功。 |
No recommendations were found in the Google Cloud Recommender
service.
|
数据尚不可用。 |
Error executing action ACTION_NAME。 |
相应操作返回了错误。 |
列出建议
列出 Recommender 服务中的可用建议。
实体
此操作不会在实体上运行。
操作输入
如需配置操作,请使用以下参数:
| 参数 | |
|---|---|
Recommendation Filter |
可选。 指定用于提取建议的过滤条件。 该参数应为采用以下任一格式的字符串:
如果未提供值,该操作会从配置的服务账号中提取项目 ID。 |
Recommendation Location |
必填。 指定用于获取建议的 Google Cloud 位置。 默认值为 |
Recommendation State |
可选。 指定要返回的建议状态。 默认值为 可能的值包括:
|
Recommendation Priority |
可选。 指定要返回的建议的优先级。多个值可以指定为以英文逗号分隔的字符串。 |
Recommender Subtype |
可选。 指定返回的推荐器子类型。 默认值为 可能的值包括:
|
Max Records To Return |
可选。 指定要返回的记录数。如果未提供值,则该操作默认返回 50 条记录。 |
操作输出
| 操作输出类型 | |
|---|---|
| 案例墙附件 | 不适用 |
| 案例墙链接 | 不适用 |
| “支持请求墙”表格 | 可用 |
| 丰富化表 | 不适用 |
| 实体数据分析 | 不适用 |
| 数据分析 | 不适用 |
| JSON 结果 | 可用 |
| OOTB widget | 不适用 |
| 脚本结果 | 可用 |
脚本结果
| 脚本结果名称 | 值 |
|---|---|
| is_success | True/False |
JSON 结果
[
{
"name": "name",
"description": "This role has not been used during the observation window.",
"lastRefreshTime": "2023-07-27T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 68
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "serviceAccount:SERVICE_ACCOUNT_ID",
"/iamPolicy/bindings/*/role": "roles/monitoring.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/",
"member": "serviceAccount:SERVICE_ACCOUNT_ID",
"removedRole": "roles/monitoring.admin",
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "ACTIVE"
},
"etag": "",
"recommenderSubtype": "REMOVE_ROLE",
"associatedInsights": [
{
"insight": "projects/i/locations/global/insightTypes/"
}
],
"priority": "P4"
},
{
"name": "name",
"description": "This role has not been used during the observation window.",
"lastRefreshTime": "2023-07-27T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 5
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "user:USER_ID@example.com",
"/iamPolicy/bindings/*/role": "roles/chroniclesm.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/projects",
"member": "user:USER_ID@example.com",
"removedRole": "roles/chroniclesm.admin",
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "ACTIVE"
},
"etag": "",
"recommenderSubtype": "REMOVE_ROLE",
"associatedInsights": [
{
"insight": "projects"
}
],
"priority": "P4"
}
]
案例墙
该操作会提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
Successfully found recommendations for the provided criteria in
the Google Cloud Recommender service. |
操作成功。 |
No recommendations were found for the provided criteria in the
Google Cloud Recommender service. |
没有可用的数据。 |
Error executing action ACTION_NAME. |
相应操作返回了错误。 |
该操作提供以下支持请求墙表格:
| 可采纳的建议 | |
|---|---|
| 列 |
|
Ping
使用 Google SecOps Marketplace 标签页中的集成配置页面上提供的参数,测试与 Recommender 服务的连接。
实体
此操作不会在实体上运行。
操作输入
不适用
操作输出
| 操作输出类型 | |
|---|---|
| 案例墙附件 | 不适用 |
| 案例墙链接 | 不适用 |
| “支持请求墙”表格 | 不适用 |
| 丰富化表 | 不适用 |
| 实体数据分析 | 不适用 |
| 数据分析 | 不适用 |
| JSON 结果 | 不适用 |
| OOTB widget | 不适用 |
| 脚本结果 | 可用 |
脚本结果
| 脚本结果名称 | 值 |
|---|---|
| is_success | True/False |
案例墙
该操作会提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
Successfully connected to the Google Cloud Recommender service
with the provided connection parameters! |
操作成功。 |
Failed to connect to the Google Cloud Recommender service!
|
相应操作返回了错误。 |
更新建议
更新 Recommender 服务中的建议。
实体
此操作不会在实体上运行。
操作输入
使用以下参数配置操作:
| 参数 | |
|---|---|
Recommendation name |
必填。 指定要更新的建议名称。 该操作接受多个值,这些值以英文逗号分隔的字符串形式提供。 预期输入示例:
|
Recommendation State |
可选。 指定建议要更改为的状态。 默认值为 可能的值包括:
|
Recommendation Result |
可选。 指定要更改为的推荐结果。 默认值为 可能的值包括:
|
操作输出
| 操作输出类型 | |
|---|---|
| 案例墙附件 | 不适用 |
| 案例墙链接 | 不适用 |
| “支持请求墙”表格 | 不适用 |
| 丰富化表 | 不适用 |
| 实体数据分析 | 不适用 |
| 数据分析 | 不适用 |
| JSON 结果 | 可用 |
| OOTB widget | 不适用 |
| 脚本结果 | 可用 |
脚本结果
| 脚本结果名称 | 值 |
|---|---|
| is_success | True/False |
JSON 结果
[
{
"name": "name",
"description": "This role has not been used during the observation window.",
"lastRefreshTime": "2023-07-28T07:00:00Z",
"primaryImpact": {
"category": "SECURITY",
"securityProjection": {
"details": {
"revokedIamPermissionsCount": 68
}
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "remove",
"resourceType": "cloudresourcemanager.googleapis.com/Project",
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"path": "/iamPolicy/bindings/*/members/*",
"pathFilters": {
"/iamPolicy/bindings/*/condition/expression": "",
"/iamPolicy/bindings/*/members/*": "serviceAccount:SERVICE_ACCOUNT_ID.iam.gserviceaccount.com",
"/iamPolicy/bindings/*/role": "roles/monitoring.admin"
}
}
]
}
],
"overview": {
"resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID",
"member": "serviceAccount:SERVICE_ACCOUNT_ID.iam.gserviceaccount.com",
"removedRole": "roles/monitoring.admin",
"minimumObservationPeriodInDays": "0"
}
},
"stateInfo": {
"state": "ACTIVE"
},
"etag": "",
"recommenderSubtype": "REMOVE_ROLE",
"associatedInsights": [
{
"insight": "projects/PROJECT_ID/locations/global/insightTypes/google.iam.policy.Insight/insights/"
}
],
"priority": "P4"
}
]
案例墙
该操作会提供以下输出消息:
| 输出消息 | 消息说明 |
|---|---|
Successfully updated recommendation in the Google Cloud
Recommender service. |
操作成功。 |
No recommendations were found in the Google Cloud Recommender
service.
|
数据尚不可用。 |
Error executing action ACTION_NAME。 |
相应操作返回了错误。 |
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。