除非您替换此行为,否则 Cloud Build 会自动选择 Cloud Build 服务账号代表您执行构建。 此默认服务帐号可能具有对您的使用情形而言不必要的广泛权限,例如访问您项目中的任何 Cloud Storage 存储桶。
Cloud Build 在新项目中使用服务账号的默认行为在 2024 年 5 月和 6 月的几周内发生了变化。这些变化将改善客户未来的默认安全状况。您可以通过配置组织 政策限制条件选择停用这些变化。
在此变化之前,Cloud Build 使用 Cloud Build 特定的服务帐号作为默认服务账号,现在称为 Cloud Build 旧版服务帐号。
在此变化之后,Cloud Build 现在使用 Compute Engine 默认服务账号 作为默认服务帐号。
您的项目受到的影响取决于您是否属于某个组织:
没有组织的项目 。如果您在变化后在 项目中运行第一个构建,则该项目默认会使用 Compute Engine 服务 账号 来构建使用 Cloud Build API 或 Google Cloud CLI 提交的构建。这些项目无法选择 使用 Cloud Build 旧版服务帐号,但可以使用 用户指定的服务账号。
有组织的项目 。如果您在变化后在项目中运行第一个构建,则该项目默认会使用 Compute Engine 服务 账号 来构建使用 Cloud Build API 或 Google Cloud CLI 提交的构建。您可以使用用户指定的服务账号,也可以通过在组织中启用 Cloud Build 服务帐号来选择停用此变化。
没有组织的现有项目 。如果您在变化之前在项目中运行了第一个构建,则该项目将继续使用旧行为,默认使用 Cloud Build 旧版服务账号来构建所有构建。您可以继续使用 用户指定的服务账号,方法是选择 Compute Engine 服务帐号或创建自己的服务账号。
有组织的现有项目 。如果您在变化之前在项目中运行了第一个构建,则该项目将继续使用旧行为,默认使用 Cloud Build 旧版服务账号。您还可以继续使用用户指定的服务 账号。
触发 。您必须在创建或更新触发器时指定服务帐号,除非项目的默认服务帐号是 Cloud Build 旧版服务帐号。
Cloud Build 服务帐号:Cloud Build 服务帐号将称为 Cloud Build 旧版 服务账号。
您需要做些什么?
如果您属于某个组织,则您的组织可以通过设置具有 所选限制条件的组织政策来配置所有项目的行为 。
您的组织可以通过设置以下 组织政策 布尔值限制条件来选择停用这些变化:
- 未强制执行:
constraints/cloudbuild.disableCreateDefaultServiceAccount - 未强制执行:
constraints/cloudbuild.useComputeServiceAccount - 已强制执行:
constraints/cloudbuild.useBuildServiceAccount
如果您无法或不想调整组织政策,并且在变化后启用了
Cloud Build API,
请验证 Compute Engine 默认服务
账号或 您创建的服务账号是否具有足够的
构建权限。特别是,提交构建的用户必须
对服务
账号具有 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 旧版服务帐号的可用性。不过,即使服务账号可用,您也可以阻止组织中的用户使用它,如以下部分所述。
与所有组织政策和限制条件一样,您可以在组织级或项目级设置这些政策。
为组织配置默认服务帐号
如需配置在组织中使用哪个默认服务帐号, Cloud Build 将引入两个新的政策 布尔值 限制条件:
constraints/cloudbuild.useBuildServiceAccount:配置 Cloud Build 旧版服务帐号的使用。constraints/cloudbuild.useComputeServiceAccount:配置 Compute Engine 默认服务账号 的使用。
您可以单独配置这些政策,但在以下情况下,当强制执行规则组合在一起时,这些政策最有用:
对于 手动提交的构建和触发的构建,都使用 Compute Engine 默认服务账号。在组织政策中设置以下限制条件:
- 未强制执行:
constraints/cloudbuild.useBuildServiceAccount - 已强制执行:
constraints/cloudbuild.useComputeServiceAccount
- 未强制执行:
对于手动提交的 构建和触发的构建,都使用用户指定的服务账号。这通常是最安全的选择。在组织政策中设置以下限制条件:
- 未强制执行:
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-accountCloud 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:某个受支持的 地区。