将 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 控制台中创建自定义角色,并为其分配集成正常运行所需的权限。

  1. 在 Google Cloud 控制台中,前往 IAM 和管理 > 角色页面。

    打开“角色”

  2. 点击 Create role

  3. 输入角色的称谓说明和唯一的 ID

  4. 角色发布阶段设置为 General Availability

  5. 点击添加权限,然后添加以下权限:

    • Recommender API

      • recommender.iamPolicyInsights.get
      • recommender.iamPolicyInsights.list
      • recommender.iamPolicyRecommendations.get
      • recommender.iamPolicyRecommendations.list
      • recommender.iamPolicyRecommendations.update
    • Cloud Resource Manager API

      • resourcemanager.projects.get
      • resourcemanager.projects.list
      • resourcemanager.projects.getIamPolicy
      • resourcemanager.projects.setIamPolicy
    • 位置信息访问权限

      • recommender.locations.get
      • recommender.locations.list
    • 其他资源访问权限

      • resourcemanager.folders.get
      • resourcemanager.folders.getIamPolicy
      • resourcemanager.folders.setIamPolicy
      • resourcemanager.organizations.get
      • resourcemanager.organizations.getIamPolicy
      • resourcemanager.organizations.setIamPolicy
  6. 点击创建

身份验证配置

Google SecOps 支持两种身份验证途径。配置以下方法之一:

  • 方法 1:Workload Identity(推荐):此方法是推荐的方法,因为它无需管理和轮换长期有效的 JSON 密钥,从而提供出色的安全性。

  • 选项 2:服务账号 JSON 密钥:使用标准 JSON 密钥文件进行身份验证。仅当您的环境中没有 Workload Identity 时,才使用此方法。

使用 Workload Identity 进行身份验证(推荐)

此方法使用服务账号模拟,以便平台安全地访问您的资源。

创建目标服务账号:

在集成访问您的 Google Cloud 资源之前,您必须在项目中创建一个专用服务账号,并为其分配必要的权限。

  1. 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号
  2. 点击创建服务账号
  3. 提供名称和 ID,然后点击创建并继续
  4. 向此服务账号授予对项目的访问权限下,选择上一部分中创建的自定义 IAM 角色
  5. 点击完成
  6. 复制服务账号的电子邮件地址。
确定您的 Google SecOps 实例身份:

如需启用安全模拟,您必须先确定特定 Google SecOps 实例使用的唯一服务账号身份。

  1. 在 Google SecOps 中,前往内容中心 > 响应集成
  2. 搜索并选择 Recommender 集成。
  3. 将目标服务账号电子邮件地址粘贴到 Workload Identity Email 中。
  4. 点击保存,然后点击测试。测试预计会失败。
  5. 点击测试右侧的close_small图标,然后在错误消息中搜索以 gke-init-python@soar-python@ 开头的电子邮件地址。复制此唯一电子邮件地址。
授予模拟权限:

最后一步是向实例身份授予充当目标服务账号的权限,以便实例在无需静态密钥文件的情况下执行操作。

  1. 返回到Google Cloud 控制台中的 IAM 和管理 > 服务账号
  2. 选择您创建的目标服务账号的名称。
  3. 前往权限标签页,然后点击授予访问权限
  4. 新的主账号字段中,粘贴电子邮件地址
  5. 选择角色字段中,选择 Service Account Token Creator (roles/iam.serviceAccountTokenCreator)。
  6. 点击保存。请注意,此权限可能需要几分钟时间才能完成传播,然后连接测试才会成功。

使用服务账号 JSON 密钥进行身份验证

仅当您的环境中没有 Workload Identity 时,才使用此方法。

创建服务账号:

如需使用基于密钥的身份验证,您必须先在Google Cloud 项目中创建一个服务账号,以作为集成的身份。

  1. 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号
  2. 点击创建服务账号
  3. 提供名称和 ID,然后点击创建并继续
  4. 向此服务账号授予对项目的访问权限下,选择您创建的自定义 IAM 角色
  5. 点击完成
生成并保存 JSON 密钥:

创建服务账号后,您必须生成一个私密 JSON 密钥文件,其中包含 Google SecOps 登录所需的凭据。

  1. IAM 和管理 > 服务账号中,选择您创建的服务账号。
  2. 前往密钥标签页。
  3. 点击添加密钥 > 创建新密钥
  4. 选择 JSON 作为密钥类型,然后点击创建。该 JSON 文件将被下载到您的计算机。
  5. 复制此文件的全部内容,并在集成配置期间将其粘贴到 User's Service Account 中。

集成参数

推荐器集成需要以下参数:

参数 说明
API Root

必填。

Recommender 服务的 API 根。

默认值为 https://recommender.googleapis.com/v1/

Resource Manager API Root

必填。

用于管理项目和组织资源的 Resource Manager 服务的 API 根。

默认值为 https://cloudresourcemanager.googleapis.com/v3/

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

可选。

指定用于提取建议的过滤条件。

该参数应为采用以下任一格式的字符串:

  • PROJECTS_OR_ORGANIZATIONS/ PROJECT_OR_ORGANIZATION_NAME_OR_ID
  • //cloudresourcemanager.googleapis.com/ PROJECTS_OR_ORGANIZATIONS/ PROJECT_OR_ORGANIZATION_NAME_OR_ID

如果未提供值,该操作会从配置的服务账号中提取项目 ID。

Recommendation Location

必填。

指定用于获取建议的 Google Cloud 位置。

默认值为 global

Recommendation State

可选。

指定要返回的建议状态。

默认值为 Not Specified

可能的值包括:

  • Not Specified
  • Active
  • Dismissed
Recommendation Priority

可选。

指定要返回的建议的优先级。多个值可以指定为以英文逗号分隔的字符串。

Recommender Subtype

可选。

指定返回的推荐器子类型。

默认值为 Not Specified

可能的值包括:

  • Not Specified
  • REMOVE_ROLE
  • REPLACE_ROLE
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

必填。

指定要更新的建议名称。

该操作接受多个值,这些值以英文逗号分隔的字符串形式提供。

预期输入示例: projects/projectname/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0f262740-bf4a-4c3d-9573-0da3345cf3f7

Recommendation State

可选。

指定建议要更改为的状态。

默认值为 Not Specified

可能的值包括:

  • Not Specified
  • Claimed
  • Dismissed
Recommendation Result

可选。

指定要更改为的推荐结果。

默认值为 Not Specified

可能的值包括:

  • Not Specified
  • Failed
  • Succeeded

操作输出

操作输出类型
案例墙附件 不适用
案例墙链接 不适用
“支持请求墙”表格 不适用
丰富化表 不适用
实体数据分析 不适用
数据分析 不适用
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 专业人士的解答。