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 perimeter 的服務帳戶。

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

  • 您想為函式設定精細的 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 bucket 擷取函式原始碼,以及在 Container Registry 中儲存建構映像檔時,需要這個角色。根據預設行為,服務帳戶必須有權存取名為「gcf-sources-*」的 bucket。如要達成此目標,請在角色授權中新增 IAM 條件,例如:(resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-sources-")))

  • roles/storage.objectAdmin:容器登錄 (現已淘汰) 必須使用此設定。需要存取名為 *.artifacts.PROJECT_ID.appspot.com 的 buckets,才能存取容器登錄。

使用 Google Cloud CLI 授予下列角色,或使用Google 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 perimeter,可同時保護專案和 Cloud Run Functions API,且您使用 Compute Engine 預設服務帳戶做為 Cloud Run Functions 的 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=.

更改下列內容: