【问题标题】:How to solve Error creating Service: googleapi: Error 403: Permission 'iam.serviceaccounts.actAs' denied on service account如何解决创建服务时出错:googleapi:错误 403:服务帐户上的权限“iam.serviceaccounts.actAs”被拒绝
【发布时间】:2021-10-05 08:10:29
【问题描述】:

我一直在尝试创建公共云运行调用程序策略并将其绑定到我的 cb_app 云运行服务,以便可以公开它。我创建了一个自定义服务并为其分配了云管理员角色。但是得到这个错误

Error: Error creating Service: googleapi: Error 403: Permission 'iam.serviceaccounts.actAs' denied on service account app-worker@samuel-django-project.iam.gserviceaccount.com (or it may not exist).

这里是配置

resource "google_cloud_run_service_iam_member" "domain" {
  service = google_cloud_run_service.cb_app.name
  location = google_cloud_run_service.cb_app.location
  role = "roles/run.admin"
  member = "serviceAccount:${var.service_account}" 
}
#create service account to run service
resource "google_service_account" "cb_app" {
    account_id    = "app-worker"
    display_name  = "app worker"
}

在应用服务中,我有这个

spec {
      # Use locked down Service Account
      service_account_name = google_service_account.cb_app.email

关于如何解决这个问题的任何想法?

【问题讨论】:

  • ${var.service_account} 的内容是什么?

标签: terraform google-cloud-run service-accounts terraform-provider-gcp google-iam


【解决方案1】:

创建 Cloud Run 等资源时,您可以选择将服务帐号附加到资源。

以下错误表示 Terraform 使用的身份(用户或服务帐户)无权将服务帐户附加到资源。

错误:创建服务时出错:googleapi:错误 403:权限 'iam.serviceaccounts.actAs' 在服务帐户上被拒绝 app-worker@samuel-django-project.iam.gserviceaccount.com(或者它可能 不存在)。

解决方案是将角色 roles/iam.serviceAccountUser 添加到运行 Terraform 的身份。您没有在问题中指定身份。身份可以是用户帐户或服务帐户。转到 Google Cloud Console -> IAM。找到身份并添加角色。

您也可以使用 CLI gcloud。确切的命令参数取决于身份类型。

对于用户帐户

gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:someone@gmail.com' \
--role='roles/iam.serviceAccountUser'

对于服务帐号

gcloud projects add-iam-policy-binding PROJECT_ID \
--member='serviceAccount:myserviceaccount@PROJECT_ID.iam.gserviceaccount.com' \
--role='roles/iam.serviceAccountUser'

以上命令使用 Linux 语法。对于 Windows,将 \ 替换为 ^

【讨论】:

    【解决方案2】:

    如果您在在 Google Cloud Shell 中应用 Terraform 时遇到此问题的可能解决方案。

    我也遇到了一个很相似的错误:

    Error: googleapi: Error 403: Missing necessary permission enter code hereiam.serviceAccounts.actAs for $MEMBER 
    on the service account mr-service-account-sa@mr-project.iam.gserviceaccount.com. 
    Grant the role 'roles/iam.serviceAccountUser' to $MEMBER on the service  
    account mr-service-account-sa@mr-project.iam.gserviceaccount.com. 
    You can do that by running 'gcloud iam service-accounts 
    add-iam-policy-binding mr-service-account-sa@mr-project.iam.gserviceaccount.com --member=$MEMBER 
    --role=roles/iam.serviceAccountUser'. 
    In case the member is a service account please use the prefix 'serviceAccount:' instead of 'user:'.
    

    我认为此错误消息具有欺骗性/误导性。

    我的解决方案:

    • 没有将“服务帐户用户”角色授予 mr-service-account-sa@mr-project.iam.gserviceaccount.com
    • 没有将“服务帐户用户”角色授予 Terrform 部署服务帐户。
    • 将“服务帐户用户”角色授予我自己的个人 GCP 帐户。

    在应用 Terraform 时,Cloud Shell 似乎混合使用了授权帐户。在某些情况下,它使用提供程序中定义的服务帐户,而在其他情况下,它使用您自己的 GCP OAuth 帐户。

    【讨论】:

      猜你喜欢
      • 2022-08-17
      • 2022-01-23
      • 2021-08-11
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多