Cloud Build 的自定义服务账号(第 1 代)
Cloud Run functions 在构建和部署 Cloud Run functions 函数时会利用 Cloud Build。默认情况下,Cloud Run functions 在执行构建时,原则上使用默认的 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 替换为您的服务账号的电子邮件地址。
授予权限
您使用的服务账号需要具有以下角色:
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:您的服务账号的电子邮件地址。
使用自定义服务账号部署函数
您可以使用 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:您的服务账号的电子邮件地址。