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 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
更改下列內容:
- PROJECT_ID:您的 Google Cloud 專案 ID。
- SA_EMAIL:服務帳戶的電子郵件地址。
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=.
更改下列內容:
- FUNCTION_NAME:您用來部署函式的名稱。
- REGION:您要部署函式所在的Google Cloud 區域名稱 (例如
us-west1
)。 - PROJECT_ID:您的 Google Cloud 專案 ID。
- RUNTIME:支援的執行階段版本的執行階段 ID,用於執行函式,例如
nodejs18
。 - CODE_ENTRYPOINT:來源程式碼中函式的進入點。這是函式執行時會執行的程式碼。
- SA_EMAIL:服務帳戶的電子郵件地址。