从 gitlab 部署云功能时出错

我正在尝试使用新服务帐户(不使用默认服务帐户)通过 gitlab 部署云功能。它具有云功能开发人员角色,但仍然失败并出现以下错误:

下面的错误包括一个用户作为 cloud-functions-mixer。我没有在我的仓库中配置任何类似的东西,也不知道为什么会出现。

首先,运行建议的命令甚至不起作用,因为建议的语法是 bad 。我试过运行下面的命令,但它不正确

错误:googleapi:错误 403:缺少服务帐户 project-test-tf-02@appspot.gserviceaccount.com 上 cloud-functions-mixer 的必要权限 iam.serviceAccounts.actAs。将角色“roles/iam.serviceAccountUser”授予服务帐户 project-test-tf-02@appspot.gserviceaccount.com 上的 cloud-functions-mixer。您可以通过运行 'gcloud iam service-accounts add-iam-policy-binding project-test-tf-02@appspot.gserviceaccount.com --member=cloud-functions-mixer --role=roles/iam.serviceAccountUser '。

stack overflow Error Deploying Cloud Function from gitlab
原文答案
author avatar

接受的答案

Google 关于 cloud-functions-mixer 的说明错误。您实际需要做的是将字符串 cloud-functions-mixer 替换为 building or deploying 您的函数的服务帐户的名称。

示例中将使用以下用户定义的服务帐户:

  • my-cloud-function@my-project.iam.gserviceaccount.com 是您的函数运行的服务帐户。
  • build-service-account@my-project.iam.gserviceaccount.com 是构建/部署您的云功能的服务帐户

要运行的命令是:

gcloud iam service-accounts add-iam-policy-binding 
  my-cloud-function@my-project.iam.gserviceaccount.com 
   --member=serviceAccount:build-service-account@my-project.iam.gserviceaccount.com 
    --role=roles/iam.serviceAccountUser

Docs

或者,在 Terraform 中,您需要这样的资源:

resource "google_service_account_iam_member" "opentok_webhook_mixer" {
  service_account_id = google_service_account.my_cloud_function.id
  role               = "roles/iam.serviceAccountUser"
  member             = "serviceAccount:${google_service_account.build_service_account.email}"
}

您必须更新服务帐户资源的名称。

这种方法也适用于 Google Cloud Build。


答案: