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 beta 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:您的服务账号的电子邮件地址。