我一直在尝试创建一个公共云运行调用程序策略,并将其绑定到我的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"
}
在app service中,我有这个
spec {
# Use locked down Service Account
service_account_name = google_service_account.cb_app.email
对于如何解决这个问题有什么想法吗?
当您创建诸如Cloud Run这样的资源时,您可以选择将服务帐户附加到该资源。
下面的错误意味着Terraform正在使用的身份(用户或服务帐户)没有将服务帐户附加到资源的权限。
解决方案是添加角色roles/iam.serviceAccountUser以地形的身份运作。你的问题中没有指明身份。标识可以是用户帐户或服务帐户。进入谷歌云控制台->我。查找身份并添加角色。Error: Error creating Service: googleapi: Error 403: Permission"iam.serviceaccounts。在服务帐户上拒绝行动app-worker@samuel-django-project.iam.gserviceaccount.com(也有可能)不存在)。
也可以使用CLIgcloud。确切的命令参数取决于标识类型。
对于用户帐户:
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,替换与^
我运行了下面的代码:
gcloud config set auth/impersonate_service_account [SA_FULL_EMAIL]
它对我很有效。
如果你在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 没有<<li>/strong>给予"服务帐户用户";角色到平台部署服务帐户。
- 给予"服务帐户用户";角色到我自己的个人GCP帐户。
在应用Terraform时,Cloud Shell似乎使用了混合的授权帐户。在某些情况下,它使用在提供程序中定义的服务帐户,而在其他情况下,它使用您自己的GCP OAuth帐户。