除非您覆寫這項行為,否則 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:
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 預設服務帳戶的使用方式。
您可以分別設定這些政策,但如果將強制執行規則合併用於下列情境,效果會更顯著:
最安全的做法:手動提交及觸發建構作業時,都使用使用者指定的服務帳戶。如要這麼做,請在機構政策中設定下列限制:
- 未強制執行:
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-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:支援的區域。