變更 Cloud Build 預設服務帳戶

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

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:

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

設定 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-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

將預留位置值替換為下列值: