Cloud Build 的自定义服务账号

Cloud Run 函数在构建和部署 Cloud Run 函数时会利用 Cloud Build。默认情况下,Cloud Run 函数在执行构建时,原则上使用默认的 Cloud Build 服务账号。从 2024 年 7 月开始,Cloud Build 更改了 Cloud Build 在新项目中使用服务账号的默认行为。Cloud Build 服务账号更改中详细说明了此更改。由于此更改,首次部署函数的新项目可能会使用权限不足的默认 Cloud Build 服务账号来构建函数。如果您受到此更改的影响,则可以执行以下任一操作:

  • 查看 Cloud Build 指导,了解默认服务账号的更改并停用这些更改

  • 将 Cloud Build Account 角色 (roles/cloudbuild.builds.builder) 添加到默认的 Compute Engine 服务账号。

  • 为函数部署创建自定义 Cloud Build 服务账号。

本文档介绍了如何传入用户创建的服务账号,以供 Cloud Build 在部署函数时使用。

您可以使用 Google Cloud CLI、Google Cloud 控制台或 Cloud Run Functions API 通过自定义服务账号部署函数。

在如下一些场景中,您可能需要提供其他服务账号,以便在 Cloud Build 构建函数时使用:

  • 您希望更好地控制要添加到 VPC-SC 边界的服务账号。

  • 您希望 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 替换为您的服务账号的电子邮件地址。

授予权限

您使用的服务账号需要具有以下角色:

使用 Google Cloud CLI 或使用 Google Cloud 控制台授予以下角色。

gcloud projects add-iam-policy-binding SA_PROJECT_ID \
--member=user:DEPLOYING_USER_EMAIL \
--role=roles/iam.serviceAccountUser

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.objectAdmin

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目 ID
  • SA_EMAIL:您的服务账号的电子邮件地址。
  • SA_PROJECT_ID:您的服务账号的项目 ID。
  • DEPLOYING_USER_EMAIL:部署函数的用户的电子邮件地址。

使用自定义服务账号部署函数

您可以使用 Google Cloud CLI 部署一个使用 Cloud Build 自定义服务账号的函数:

  • --build-service-account 标志指定其凭据用于构建步骤的 IAM 服务账号。如果未提供自定义服务账号,则该函数会将项目的默认服务账号用于 Cloud Build。
  • 您可以视需要使用通过 --build-worker-pool 标志指定的专用池

gcloud functions deploy FUNCTION_NAME \
   --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=.

替换以下内容: