除非您替换此行为,否则 Cloud Build 会自动选择 Cloud Build 服务帐号来代表您执行构建。此服务帐号可能具有过于宽泛的权限,对于您的使用场景而言,权限过于宽泛,例如访问 Cloud Source Repositories 以及项目中的任何 Cloud Storage 存储桶
在 2024 年 5 月和 6 月的几周内,Cloud Build 在新项目中使用服务帐号的默认行为发生了变化。这些更改将改善我们客户今后的默认安全状况。您可以通过配置组织政策限制条件选择停用这些更改。
您的项目所受到的影响取决于您是否属于某个组织:
无组织的项目。如果您在更改之后对项目启用 Cloud Build API,则对于使用 Cloud Build API 或 Google Cloud CLI 提交的构建,您将默认使用 Compute Engine 服务帐号。这些项目无法选择使用旧版 Cloud Build 服务帐号,但可以使用用户指定的服务帐号。
组织的项目。如果您在更改后在项目上启用 Cloud Build API,则对于使用 Cloud Build API 或 Google Cloud CLI 提交的构建,您将默认使用 Compute Engine 服务帐号。您可以使用用户指定的服务帐号,也可以通过在组织中启用 Cloud Build 服务帐号来选择不参与变更。
没有组织的现有项目。如果您在更改之前在项目上启用了 Cloud Build API,则将继续旧行为,所有构建默认使用旧版 Cloud Build 服务帐号。您可以通过选择 Compute Engine 服务帐号或创建自己的服务帐号来继续使用用户指定的服务帐号。
具有组织的现有项目。如果您在更改之前在项目上启用了 Cloud Build API,则系统将继续采用旧行为,默认使用旧版 Cloud Build 服务帐号。您也可以继续使用用户指定的服务帐号。
触发。您必须在创建或更新触发器时指定服务帐号,除非项目的默认服务帐号是旧版 Cloud Build 服务帐号。
API。启用 Cloud Build API 也会启用 Identity and Access Management API。
Cloud Build 服务帐号名称:Cloud Build 服务帐号称为旧版 Cloud Build 服务帐号。
您需要做些什么?
如果您属于某个组织,您的组织可以通过设置具有所选限制条件的组织政策来配置所有项目的行为。
您的组织可以通过设置以下组织政策boolean constraints来选择不执行这些更改:
- 未强制执行:
constraints/cloudbuild.disableCreateDefaultServiceAccount
- 未强制执行:
constraints/cloudbuild.useComputeServiceAccount
- 已强制执行:
constraints/cloudbuild.useBuildServiceAccount
如果您无法或不想调整组织政策,并且在更改之后启用了 Cloud Build API,请验证 Compute Engine 默认服务帐号或您的用户创建的服务帐号是否对您的构建具有足够的权限。具体而言,提交 build 的用户必须具有服务帐号的 iam.serviceAccounts.actAs
权限。
新的组织政策限制条件
Cloud Build 引入了新的组织政策布尔值限制条件来配置:
- 能够使用旧版 Cloud Build 服务帐号。
- 组织中所有项目的默认服务帐号。
如需修改组织政策,您可以使用 Google Cloud 控制台或 Google Cloud CLI:
Google Cloud 控制台:选择您要更改的限制条件,然后在 Google Cloud 控制台中将强制执行选项设置为开启或关闭。
Google Cloud CLI:在 Google Cloud CLI 中配置限制条件强制执行情况。
如需详细了解组织政策,请参阅组织政策服务简介。
配置旧版 Cloud Build 服务帐号的可用性
为了在启用 Cloud Build API 时配置旧版 Cloud Build 服务帐号的可用性,Cloud Build 将引入以下布尔值政策限制条件:
未强制执行:
constraints/cloudbuild.disableCreateDefaultServiceAccount
。 允许在新项目中使用旧版 Cloud Build 服务。已强制执行:
constraints/cloudbuild.disableCreateDefaultServiceAccount
。 在新项目中停用旧版 Cloud Build 服务帐号。这是限制条件的默认值。
此限制条件只会影响在变更发布后启用 Cloud Build API 的项目。如果您决定不强制执行政策限制条件,则当该配置处于活动状态时,对于启用了 API 的所有项目而言,此更改是永久性的。对于以前可以使用旧版 Cloud Build 服务帐号的项目,您无法将其停用。但是,即使服务帐号可用,您也可以阻止组织中的用户使用它,如以下部分所述。
为组织配置默认服务帐号
为了配置在组织中使用哪个默认服务帐号,Cloud Build 引入了两个新的政策布尔值限制条件:
constraints/cloudbuild.useBuildServiceAccount
:配置 Cloud Build 旧版服务帐号的使用。constraints/cloudbuild.useComputeServiceAccount
:配置 Compute Engine 默认服务帐号的使用。
这些政策可以彼此独立配置,但在以下情况下最为有用:
对于手动提交的构建和触发的构建,请使用 Compute Engine 默认服务帐号。在组织政策中设置以下限制条件:
- 未强制执行:
constraints/cloudbuild.useBuildServiceAccount
- 已强制执行:
constraints/cloudbuild.useComputeServiceAccount
- 未强制执行:
为手动提交的 build 和触发的 build 使用用户指定的服务帐号。这通常是最安全的选项。请在组织政策中设置以下限制条件:
- 未强制执行:
constraints/cloudbuild.useBuildServiceAccount
- 未强制执行:
constraints/cloudbuild.useComputeServiceAccount
- 未强制执行:
继续使用 Cloud Build 旧版服务帐号。如果您了解相关的安全权衡,请在组织政策中设置以下限制条件:
- 未强制执行:
constraints/cloudbuild.disableCreateDefaultServiceAccount
- 未强制执行:
constraints/cloudbuild.useComputeServiceAccount
- 已强制执行:
constraints/cloudbuild.useBuildServiceAccount
- 未强制执行:
对于在更改之前已启用 Cloud Build API 的项目,继续使用 Cloud Build 旧版服务帐号,并开始为新项目使用 Compute Engine 默认服务帐号。请确保您了解相关的安全权衡,并在组织政策中设置以下限制条件:
- 已强制执行:
constraints/cloudbuild.disableCreateDefaultServiceAccount
- 已强制执行:
constraints/cloudbuild.useComputeServiceAccount
- 已强制执行:
constraints/cloudbuild.useBuildServiceAccount
- 已强制执行:
获取项目的当前默认服务帐号
如需确定 Cloud Build 将哪个服务帐号用作项目的默认服务帐号,您可以使用 Google Cloud CLI 或 Cloud Build API:
gcloud CLI
运行以下命令以获取当前项目的默认服务帐号:
gcloud builds get-default-service-account
Cloud Build API
使用 cURL 调用 Cloud Build API:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/defaultServiceAccount
将占位符值替换为以下内容:
PROJECT_ID
:项目的 ID。REGION
:支持的区域之一。