将 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 项目 开头。

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

选项 1:服务账号模拟(推荐)
- 在 第 1 步 中,点击 服务账号模拟:下载设置文件。要使用的参数 区块显示
ostorlab_service_account(Ostorlab 为您的组织创建的服务账号)以及脚本授予的roles。 -
打开 Cloud Shell,上传脚本,并针对一个项目运行:
PROJECT_ID=<project id> bash ostorlab-gcp-connector.sh要读取组织的所有项目,请在组织级别授予这些角色:
ORGANIZATION_ID=<organization id> PROJECT_ID=<project id> bash ostorlab-gcp-connector.sh -
脚本会输出服务账号邮箱
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 步 中,点击 服务账号密钥:下载设置文件。
- 在 Cloud Shell 中运行与上面相同的命令。脚本不会授予令牌创建者角色,而是创建一个 JSON 密钥文件
ostorlab-cloud-connector-key.json。 - 复制整个文件的内容以便填写连接器表单,然后从您的计算机上删除该文件。
-
要轮换密钥,请再次运行脚本并用新密钥更新连接器,然后列出密钥以找到之前密钥的 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 中再次显示。
添加连接器
-
在 配置 选项卡的 第 2 步:Google Cloud 连接器 下,点击 添加连接器(或 添加另一个连接器)。

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

| 字段 | 填写内容 |
|---|---|
| 名称 | 组织内唯一的名称,例如 生产 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。
- 打开 Inventory > Assets。
-
打开搜索面板,进入 Tags 选项卡,将标签名称设为
cloud、值设为gcp,然后点击 Search。
-
要缩小列表范围,可按连接器添加的其他标签筛选:
gcp:account(项目 ID)、gcp:region、gcp:resource(完整资源名称)和gcp:connector(连接器 ID)。

追踪发现路径
打开某个云节点(例如转发规则),可查看其目标、标签、所有者和位置。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 区域中。连接器只保留面向互联网的资源。 |