變更 Cloud Build 預設服務帳戶

除非您覆寫這項行為,否則 Cloud Build 會自動選取 Cloud Build 服務帳戶,代表您執行建構作業。這個預設服務帳戶可能具備不必要的廣泛權限,例如存取專案中的任何 Cloud Storage bucket。

Cloud Build 在 2024 年 5 月和 6 月的幾週內,變更了新專案中服務帳戶的預設使用方式。這些異動可提升客戶的預設資安態勢。如要停用這些變更,請設定機構政策限制。

這項異動前,Cloud Build 預設使用 Cloud Build 專屬服務帳戶,現在稱為 Cloud Build 舊版服務帳戶。

這項異動生效後,Cloud Build 現在會使用預設的 Compute Engine 服務帳戶做為預設服務帳戶。

專案受到的影響取決於您是否屬於機構:

  • 不屬於任何機構的專案。變更後,如果您在專案中執行第一次建構作業,透過 Cloud Build API 或 Google Cloud CLI 提交的建構作業,預設會使用Compute Engine 服務帳戶。這些專案無法使用 Cloud Build 舊版服務帳戶,但可以使用使用者指定的服務帳戶。

  • 與機構合作的專案。如果變更後在專案中執行第一次建構作業,透過 Cloud Build API 或 Google Cloud CLI 提交的建構作業,預設會使用 Compute Engine 服務帳戶。您可以指定服務帳戶,或在機構中啟用 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:

如要進一步瞭解機構政策,請參閱「組織政策服務簡介」。

設定 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 預設服務帳戶的使用方式。

您可以分別設定這些政策,但如果將強制執行規則合併用於下列情境,效果會更顯著:

  • 最安全的做法:手動提交及觸發建構作業時,都使用使用者指定的服務帳戶。如要這麼做,請在機構政策中設定下列限制:

    • 未強制執行:constraints/cloudbuild.useBuildServiceAccount
    • 未強制執行:constraints/cloudbuild.useComputeServiceAccount
  • Compute Engine 預設服務帳戶:如要對手動提交的建構作業和觸發的建構作業,都使用 Compute Engine 預設服務帳戶,請在機構政策中設定下列限制:

    • 未強制執行:constraints/cloudbuild.useBuildServiceAccount
    • 強制執行:constraints/cloudbuild.useComputeServiceAccount
  • Cloud Build 舊版服務帳戶:如果您瞭解這對安全性的影響,請在機構政策中設定下列限制:

    • 未強制執行:constraints/cloudbuild.disableCreateDefaultServiceAccount
    • 未強制執行:constraints/cloudbuild.useComputeServiceAccount
    • 強制執行:constraints/cloudbuild.useBuildServiceAccount
  • 舊版和 Compute Engine 預設服務帳戶:如果專案在異動前已啟用 Cloud Build API,請繼續使用 Cloud Build 舊版服務帳戶,並開始為新專案使用 Compute Engine 預設服務帳戶。如果您瞭解這對安全性的影響,可以在機構政策中設定下列限制:

    • 強制執行:constraints/cloudbuild.disableCreateDefaultServiceAccount
    • 強制執行:constraints/cloudbuild.useComputeServiceAccount
    • 強制執行:constraints/cloudbuild.useBuildServiceAccount

IAM 角色指南

iam.automaticIamGrantsForDefaultServiceAccounts 組織政策可防止系統在建立特定預設服務帳戶時,將編輯者角色 (roles/editor) 授予這些帳戶。這項政策已於 2024 年 5 月 3 日在機構中啟用,適用於 2024 年 5 月 3 日當天或之後建立的 Compute Engine 和 App Engine 預設服務帳戶。建議您啟用這項政策,因為「編輯者」角色非常廣泛,授予的權限比大多數用途所需權限還多。

這項組織政策不適用於 Cloud Build 舊版服務帳戶,因為系統預設不會授予該服務帳戶編輯者角色。不過,Cloud Build 舊版服務帳戶預設會獲得「Cloud Build 服務帳戶」角色 (roles/cloudbuild.builds.builder),該角色也具備廣泛的權限。如果您使用 Cloud Build 舊版服務帳戶,建議您確認 Cloud Build 服務帳戶角色是否為必要角色,或是否能改用權限較少的角色。

詳情請參閱「限制 IAM 服務帳戶使用」和「安全地使用 IAM」。

取得專案目前的預設服務帳戶

如要判斷 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

將預留位置值改為: