Cloud Build (第 1 代) 的自訂服務帳戶

Cloud Run 函式在建構及部署 Cloud Run 函式時,會利用 Cloud Build。根據預設,Cloud Run 函式會在執行建構作業時,使用預設 Cloud Build 服務帳戶做為主要使用者。自 2024 年 7 月起,Cloud Build 已變更在新專案中使用服務帳戶的預設行為。如要進一步瞭解這項異動,請參閱「Cloud Build 服務帳戶異動」。由於這項異動,首次部署函式的新專案可能會使用預設 Cloud Build 服務帳戶,但該帳戶缺乏建構函式所需的權限。如果您受到這項異動影響,可以採取下列任一做法:

  • 請參閱 Cloud Build 的預設服務帳戶異動指南,並選擇不採用這些異動

  • 將 Cloud Build 帳戶角色 (roles/cloudbuild.builds.builder) 新增至預設的 Compute Engine 服務帳戶。

  • 建立自訂 Cloud Build 服務帳戶,用於函式部署作業。

本文件說明如何在部署函式時,將使用者建立的服務帳戶傳入 Cloud Build。

您可以使用 Google Cloud CLI、Google Cloud 控制台或 Cloud Run 函式 API,透過自訂服務帳戶部署函式。

以下是一些您可能想在 Cloud Build 建構函式時提供其他服務帳戶的情況:

  • 您想進一步控管要新增至 VPC-SC 範圍的服務帳戶。

  • 您希望 Cloud Build 執行時使用與預設服務帳戶不同的權限,而不必個別撤銷每項權限。

  • 您應為 Cloud Functions 專門設定精細的 Cloud Build 權限,而非共用專為其他用途而最佳化的 Cloud Build 服務帳戶。

  • 您的機構已停用預設服務帳戶的使用權限。

啟用 API

必須啟用 IAM API,才能使用這項功能。

使用 Google Cloud CLI 啟用部署 Cloud Run 函式所需的 API,或使用 Google Cloud 控制台

gcloud services enable iam.googleapis.com

設定服務帳戶

本文說明如何建立新的服務帳戶,並授予必要權限。如果您想使用現有的服務帳戶,就必須提供要使用的服務帳戶電子郵件地址。詳情請參閱設定使用者指定的服務帳戶

您可以按照下列步驟查看現有的服務帳戶,也可以使用Google Cloud 控制台:

gcloud iam service-accounts list

建立服務帳戶

使用 Google Cloud CLI 建立服務帳戶,或使用 Google Cloud 控制台:

gcloud iam service-accounts create SA_EMAIL

SA_EMAIL 替換為服務帳戶的電子郵件地址。

授予權限

您使用的服務帳戶需要具備下列角色:

  • roles/logging.logWriter:必須將建構記錄儲存在 Cloud Logging 中。
  • roles/artifactregistry.writer:必須將建構映像檔儲存至 Artifact Registry。在預設情況下,服務帳戶需要存取名為「gcf-artifacts」和「cloud-run-source-deploy」的存放區。您可以在存放區的 IAM 政策中設定存放區存取權。您也可以透過 dockerRepository 欄位提供自己的構件存放區。
  • roles/storage.objectViewer:必須使用此參數才能從 Cloud Storage 值區擷取函式來源,並將建構映像檔儲存在 Container Registry 中。在預設情況下,服務帳戶需要存取名為「gcf-sources-*」的資料夾。您可以透過在角色授予中新增 IAM 條件來達成這項要求,例如: (resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-sources-")))

  • roles/storage.objectAdmin:容器存放區需要這項屬性 (現已淘汰)。需要存取名為 *.artifacts.PROJECT_ID.appspot.com 的資料夾,才能存取容器登錄。

使用 Google Cloud CLIGoogle Cloud 主控台授予下列角色。

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
    --role=roles/logging.logWriter

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/artifactregistry.writer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectViewer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectAdmin

更改下列內容:

VPC Service Controls 注意事項

如果您有 VPC Service Controls 邊界來保護專案和 Cloud Run 函式 API,且您使用 Compute Engine 預設服務帳戶做為 Cloud Run 函式的 Cloud Build 服務帳戶角色,則必須建立下列入站規則:

  • 允許 Compute Engine 預設服務帳戶存取 Cloud Storage 和 Cloud Logging API 的所有方法。
  • 允許服務帳戶 service-[PROJECT_NUMBER]@gcf-admin-robot.iam.gserviceaccount.com 進入 Cloud Storage 和 Cloud Logging API 的所有方法。

使用自訂服務帳戶部署函式

您可以使用 Google Cloud CLI 部署使用 Cloud Build 自訂服務帳戶的函式:

  • --build-service-account 標記會指定 IAM 服務帳戶,系統會使用該帳戶的憑證執行建構步驟。如未提供自訂服務帳戶,函式會使用專案的 Cloud Build 預設服務帳戶。
  • 您可以選擇使用私人集區,並使用 --build-worker-pool 旗標指定該集區。

gcloud functions deploy FUNCTION_NAME \
   --no-gen2 \
   --region=REGION \
   --project=PROJECT_ID \
   --runtime=RUNTIME \
   --entry-point=CODE_ENTRYPOINT \
   --build-service-account=projects/PROJECT_ID/serviceAccounts/SA_EMAIL \
   --memory=256Mi \
   --trigger-http \
   --source=.

更改下列內容: