跳转至

任务 阅读约 11 分钟

将 Google Cloud 连接到您的资产清单

Google Cloud 连接器会读取您 Google Cloud 项目中面向互联网的资源,并将其保存在 Ostorlab 资产清单中, 以便您将它们作为攻击面的一部分进行扫描和跟踪。它只需要读取权限。

连接器会收集什么?

所有内容都通过 Cloud Asset Inventory 按项目读取。私有地址将被跳过。

资源 保留的内容
Compute Engine 实例 具有外部 IPv4 或 IPv6 地址的实例
预留地址 区域和全局的外部地址
转发规则 负载均衡方案为外部的区域和全局规则
Cloud DNS 公共托管区域及其记录集(通配符记录将被跳过)

仅导入上方列出的资源;不会收集 Cloud Run、Cloud Functions、GKE 及其他服务。

每个项目都会成为一个云节点,作为该项目其他节点的父节点。资源暴露的公共 IP 地址和主机名 会成为普通的 IP 资产和域名资产,平台的其他功能可以对它们进行扫描。

开始之前我需要什么?

  • 包含集成功能的 Ostorlab 套餐。 否则 Ostorlab 会返回“Your organisation does not have the necessary permissions to run this integration.”
  • 将托管服务账号的项目的 ID(项目 ID,而非显示名称)。
  • 以该项目所有者身份认证的 gcloud,例如在 Cloud Shell 中。对于整个组织的连接器,还需是组织的所有者。
  • 对于整个组织的连接器,需要数字形式的组织 ID。
  • 导入资产的 Ostorlab 所有者。 如有需要,请先创建一个。

在 Google Cloud 中设置访问权限

打开 Library > Integrations,选择 云 类别,然后选择 Google Cloud 卡片。配置选项卡以 第 1 步:准备您的 Google Cloud 项目 开头。

显示 Google Cloud 卡片的云类别

两个下载按钮提供的文件都名为 ostorlab-gcp-connector.sh;服务账号模拟版本与密钥版本除最后一步外完全相同。推荐使用服务账号模拟:任何密钥都不会离开您的组织。

包含下载按钮的设置步骤

选项 1:服务账号模拟(推荐)

  1. 在 第 1 步 中,点击 服务账号模拟:下载设置文件。要使用的参数 区块显示 ostorlab_service_account(Ostorlab 为您的组织创建的服务账号)以及脚本授予的 roles。
  2. 打开 Cloud Shell,上传脚本,并针对一个项目运行:

    PROJECT_ID=<project id> bash ostorlab-gcp-connector.sh
    

    要读取组织的所有项目,请在组织级别授予这些角色:

    ORGANIZATION_ID=<organization id> PROJECT_ID=<project id> bash ostorlab-gcp-connector.sh
    
  3. 脚本会输出服务账号邮箱 ostorlab-cloud-connector@<project id>.iam.gserviceaccount.com。请复制它。

该脚本会:

  • 在项目中启用 API cloudresourcemanager.googleapis.com、cloudasset.googleapis.com、iamcredentials.googleapis.com,不会启用其他任何 API;
  • 在项目中创建服务账号 ostorlab-cloud-connector;
  • 在项目或组织上向其授予 roles/cloudasset.viewer 和 roles/browser;
  • 向 Ostorlab 的服务账号(ostorlab_service_account)授予对新服务账号的角色 roles/iam.serviceAccountTokenCreator,使 Ostorlab 无需任何密钥即可模拟它。

重复运行脚本是安全的:如果服务账号已存在,它会复用该账号,并在 Google 传播新账号期间重试。

选项 2:服务账号密钥

无法使用模拟时采用此方式。

  1. 在 第 1 步 中,点击 服务账号密钥:下载设置文件。
  2. 在 Cloud Shell 中运行与上面相同的命令。脚本不会授予令牌创建者角色,而是创建一个 JSON 密钥文件 ostorlab-cloud-connector-key.json。
  3. 复制整个文件的内容以便填写连接器表单,然后从您的计算机上删除该文件。
  4. 要轮换密钥,请再次运行脚本并用新密钥更新连接器,然后列出密钥以找到之前密钥的 ID 并将其删除。脚本不会删除旧密钥:

    gcloud iam service-accounts keys list --iam-account <service account email>
    gcloud iam service-accounts keys delete <previous key id> --iam-account <service account email>
    

Tip

JSON 密钥会静态加密,并且不会在 Ostorlab 中再次显示。

添加连接器

  1. 在 配置 选项卡的 第 2 步:Google Cloud 连接器 下,点击 添加连接器(或 添加另一个连接器)。

    添加另一个连接器按钮

  2. 填写表单,然后点击 创建。

    高亮显示服务账号邮箱的添加连接器表单

字段 填写内容
名称 组织内唯一的名称,例如 生产 GCP。
项目 ID Google Cloud 项目 ID:6 到 30 个小写字母、数字或连字符,以字母开头,以字母或数字结尾。
组织 ID(可选) Google Cloud 组织编号。设置后,将收集该组织下所有处于活动状态的项目。
凭据类型 服务账号模拟 或 服务账号密钥。
服务账号邮箱 仅模拟方式。脚本输出的邮箱。
服务账号 JSON 密钥 仅密钥方式。完整的 JSON 密钥文件。
所有者 必填。导入的资产将归属于此所有者。
位置 导入资产的可选位置。
启用 计划同步会跳过已停用的连接器。

测试连接

在连接器所在行点击 测试连接。测试只会从您的项目读取数据,不会导入任何内容。

测试连接操作

将运行四项检查:

检查 验证内容
凭据 Ostorlab 已获取该服务账号的 Google 令牌(通过模拟,或来自已保存的密钥)。
权限 Cloud Asset Inventory 可以列出该范围内的项目。
范围 将要读取的项目:您的项目,或组织中所有处于活动状态的项目。如果项目未处于活动状态或无法读取,则检查失败。
示例资源 Ostorlab 读取该范围内第一个预留的外部地址。没有预留地址时,检查也会通过。

如果某项检查失败,后续检查也会显示为已跳过或失败:请先修复第一项失败的检查。

四项检查全部通过的连接测试

同步连接器

每个已启用的连接器每十二小时自动同步一次。要立即导入,请在连接器所在行点击 立即同步。

立即同步操作

提示消息会确认作业(同步已开始(作业 ...))。如果连接器已停用,或同一连接器的同步已在运行,则同步会被拒绝。

同步已开始提示

查看同步运行记录和错误

点击 最近的同步 查看连接器的运行记录。

最近的同步对话框

列 含义
状态 运行中、成功、部分成功(部分项目失败,其余已导入)或 失败(同步未能完成,例如 Google 拒绝了令牌)。
资源 本次运行中发现的资源。
已创建、已更新 新增和变更的资产与节点。已创建数量除节点外,还包括 IP 资产和主机名资产。
已过期 因本次运行中未发现而被连接器标记为 cloud:stale 的资源。
错误 范围错误的数量。点击可列出这些错误。

列出失败的项目算作一个错误,其他项目仍会被读取:运行以 部分成功 结束。

部分成功的同步错误

Note

从 Google Cloud 中消失的资源,只有在没有任何范围错误的运行之后才会被标记为 cloud:stale。它们永远不会从资产清单中删除。当之后的同步再次发现该资源时,此标签会被移除。

保持 运行中 超过两小时的运行会被视为已停止:它不再阻止新的同步,并会在下一次计划同步时被标记为 失败。

在资产清单中查看资产

导入的资产归属于您选择的所有者和位置。每个资产都带有标签 cloud:gcp。

  1. 打开 Inventory > Assets。
  2. 打开搜索面板,进入 Tags 选项卡,将标签名称设为 cloud、值设为 gcp,然后点击 Search。

    将 cloud 标签设为 gcp 后筛选的资产清单

  3. 要缩小列表范围,可按连接器添加的其他标签筛选:gcp:account(项目 ID)、gcp:region、gcp:resource(完整资源名称)和 gcp:connector(连接器 ID)。

单个 Google Cloud 项目的资产:IP、主机名和云节点

追踪发现路径

打开某个云节点(例如转发规则),可查看其目标、标签、所有者和位置。Discovery Path 卡片显示该节点的来源:Google Cloud 项目,然后是其父资源。 节点的公共地址和主机名在各自的发现路径中会列出该节点,因此您始终可以知道是哪个项目的哪个资源暴露了它们。

带有发现路径的云节点

编辑、暂停或删除连接器

  • 编辑 可更改名称、项目 ID 和组织 ID、凭据类型、所有者、位置和 启用 开关。已保存的密钥留空表示保留,粘贴新密钥则表示替换。

    编辑连接器表单

  • 关闭 启用 可在保留连接器的同时暂停计划同步。

  • 删除 会移除连接器:已导入的资产保留在资产清单中,之后的同步将停止。
  • 若还要移除 Ostorlab 在 Google Cloud 中的访问权限,请删除服务账号 ostorlab-cloud-connector(或移除其 IAM 绑定以及信任 Ostorlab 的令牌创建者绑定)。删除服务账号不会删除为其创建的项目或组织角色绑定:请同时为该成员移除 roles/cloudasset.viewer 和 roles/browser。

故障排除

现象 检查内容
“Google refused to issue a token for the service account ... Check that the organisation's Ostorlab service account has roles/iam.serviceAccountTokenCreator on it.” 脚本的最后一步没有运行,或绑定已被移除。请重新运行脚本。
“Google refused the service account key. Check that the key and the service account ... are enabled.” 密钥已被删除或停用,或服务账号已被停用。请创建新密钥并更新连接器。
“Project ... is not active or cannot be read.” 项目 ID 有误、项目正在被删除,或服务账号在该项目上没有所需角色。
“No active project found in scope.” 整个组织的连接器:角色仅在项目上授予。请使用 ORGANIZATION_ID 重新运行脚本。
权限 检查失败 脚本所需的 API 未在项目中启用,或缺少角色。请重新运行脚本。
与 JSON 密钥有关的表单错误 请粘贴完整的密钥文件:它必须是服务账号密钥("type": "service_account"),且包含 client_email 和 private_key。
测试提示当前无法连接 这是 Ostorlab 一侧的问题,而不是您的项目问题。请稍后重试,如果持续出现,请联系支持团队。
“The cloud connector is disabled.” 在连接器的编辑表单中打开 启用。
“A sync of this cloud connector is already running.” 等待正在运行的同步完成。
缺少您期望的资源 它们可能没有外部地址,或位于私有 DNS 区域中。连接器只保留面向互联网的资源。

后续步骤