Cloud Build 的自定义服务账号
Cloud Functions 在构建和部署 Cloud Functions 函数时会利用 Cloud Build。默认情况下,Cloud Functions 在执行构建时,原则上使用默认的 Cloud Build 服务账号。本文档介绍了如何传入用户创建的服务账号,以供 Cloud Build 在部署函数时使用。
您可以使用 Google Cloud CLI、Google Cloud 控制台或 Cloud Functions API 通过自定义服务账号部署函数。
在如下这些场景中,您可能需要提供其他服务账号,以便在 Cloud Build 构建函数时使用:
您希望更好地控制要添加到 VPC-SC 边界的服务账号。
您希望 Cloud Build 以与默认服务账号不同的权限运行,而不必单独撤消每项权限。
您希望专门为您的函数设置精细的 Cloud Build 权限,而不是共享已针对其他目的进行优化的 Cloud Build 服务账号。
启用 API
此功能需要启用 IAM API。
使用 Google Cloud CLI 启用部署 Cloud Functions 函数所需的 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/iam.serviceAccountUser
- 服务账号不需要此角色,但部署函数的用户需要此角色。roles/logging.logWriter
- 在 Cloud Logging 中存储构建日志时需要此角色。roles/artifactregistry.writer
- 在 Artifact Registry 中存储构建映像时需要此角色。roles/storage.objectAdmin
- 从 Cloud Storage 存储桶检索函数源代码以及将构建映像存储在 Container Registry 中需要此角色。
使用 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 \
--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:您的服务账号的电子邮件地址。