除非您覆寫這項行為,否則 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:
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:支援的區域。