使用gcloud部署Gen2函数时遭遇“Unsupported service account”错误
GCP Cloud Functions Gen2 CLI部署服务账号格式错误排查与解决
环境信息
gcloud --version Google Cloud SDK 488.0.0 alpha 2024.08.09 beta 2024.08.09 bq 2.1.8 core 2024.08.09 gcloud-crc32c 1.0.0 gsutil 5.30 istioctl 1.20.47
问题描述
- Gen1函数可通过CLI正常部署,但Gen2部署时触发服务账号相关错误
- 执行初始Gen2部署命令:
gcloud functions deploy sdfsdfsd \ --gen2 \ --project="sdfsdf" \ --region="us-central1" \ --entry-point=my_func \ --no-allow-unauthenticated \ --runtime=python312 \ --build-service-account="my-cloud-build-acct@my-project-id.iam.gserviceaccount.com" \ --trigger-http
返回错误:
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Deployment failed: ["params.service_account: must be empty or a service account of format: projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}"]. Check your build configuration.
- 添加
--service-account="myacct@my-project-id.iam.gserviceaccount.com"参数后,仍触发相同错误 - 改用提示的完整资源路径格式时,出现新错误:
ERROR: (gcloud.functions.deploy) ResponseError: status=[400], code=[Ok], message=[Could not create Cloud Run service sdfsdfsd. serviceAccountName: Unsupported service account: projects/my-project-id/serviceAccounts/myacct@my-project-id.iam.gserviceaccount.com]
- 目标服务账号已分配对应角色,且通过GCP UI可正常部署Gen2函数
解决方案
1. 清理gcloud默认服务账号配置
执行命令检查当前gcloud配置中是否存在默认服务账号:
gcloud config get-value functions/service_account
若返回非空值,说明配置中存在冲突的默认设置,执行以下命令清空:
gcloud config unset functions/service_account
2. 使用邮箱格式指定服务账号参数
Gen2 CLI部署要求--service-account和--build-service-account均使用纯邮箱格式(而非完整资源路径),修正后的部署命令示例:
gcloud functions deploy sdfsdfsd \ --gen2 \ --project="sdfsdf" \ --region="us-central1" \ --entry-point=my_func \ --no-allow-unauthenticated \ --runtime=python312 \ --build-service-account="my-cloud-build-acct@my-project-id.iam.gserviceaccount.com" \ --service-account="myacct@my-project-id.iam.gserviceaccount.com" \ --trigger-http
3. 验证服务账号权限与存在性
确认目标服务账号已在项目中存在,且至少具备以下角色:
- Cloud Functions Developer
- Service Account User
- Cloud Run Developer
4. 更新gcloud SDK版本
旧版本SDK可能存在Gen2参数解析bug,执行更新命令:
gcloud components update
关键说明
Gen2函数底层依赖Cloud Run,CLI部署对服务账号格式的解析逻辑与UI不同:UI会自动转换格式,但CLI需严格使用邮箱格式。同时需确保gcloud配置中无冲突的默认服务账号设置。
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

