我已经在我的项目上创建了一个自定义服务帐户travisci-deployer@PROJECT_ID.iam.gserviceaccount.com,并赋予它云运行管理角色:
gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
--member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
--role="roles/run.admin"然后,我将这个服务帐户设置为gcloud命令的标识:
gcloud auth activate-service-account --key-file=google-key.json但是,当我运行gcloud beta run deploy命令时,我得到了一个关于"Compute默认服务帐户“没有iam.serviceAccounts.actAs权限的错误:
gcloud beta run deploy -q "${SERVICE_NAME}" \
--image="${CONTAINER_IMAGE}" \
--allow-unauthenticatedDeploying container to Cloud Run service [$APP_NAME] in project [$PROJECT_ID] region [us-central1]
Deploying...
Deployment failed
ERROR: (gcloud.beta.run.deploy) PERMISSION_DENIED: Permission 'iam.serviceaccounts.actAs'
denied on service account 1075231960084-compute@developer.gserviceaccount.com这在我看来很奇怪(因为我没有使用GCE默认的服务帐户标识,尽管一旦应用程序被部署,云运行应用程序就会使用它)。
因此,1075231960084-compute@developer.gserviceaccount.com帐户用于API调用,而不是配置在gcloud上的travisci-deployer@PROJECT_ID.iam.gserviceacount服务帐户。
我该怎么解决这个问题?
发布于 2019-04-22 03:48:06
TLDR:将云运行管理、和服务帐户用户角色添加到您的服务帐户中。
如果我们详细阅读了Cloud的IAM参考页面的文档(这是这里 ),我们会发现以下文本:
用户需要以下权限才能部署新的云运行服务或修订:
run.services.create和run.services.update。通常通过roles/run.admin角色分配。它可以在项目权限管理页面中更改。iam.serviceAccounts.actAs。默认情况下,这是PROJECT_NUMBER-compute@developer.gserviceaccount.com。权限通常是通过roles/iam.serviceAccountUser角色分配的。我认为这些额外的步骤解释了你所看到的故事。
发布于 2019-08-28 09:37:37
将云运行管理、和服务帐户用户角色添加到我自己的服务帐户中,为我修复了这个问题。参见这里的文档中的步骤2:https://cloud.google.com/run/docs/continuous-deployment#continuous
发布于 2022-09-22 07:40:30
对于最佳实践,您应该只允许云运行实例的特定权限。
参考资料:https://cloud.google.com/run/docs/reference/iam/roles#additional-configuration
假设您在GCP中有两个服务帐户。
其中之一是Clound identity service account/runtime service account。
让它作为identity-cloudrun@project-id.iam.gserviceaccount.com,并且这个服务帐户不需要为它分配任何权限,因为它只是云运行的标识。如果您需要这个云运行实例访问其他GCP资源,您可以为这个服务帐户添加一些权限。
另一个是用于部署云运行的Deployment Service account。
让它成为deploy-cloudrun@project-id.iam.gserviceaccount.com
对于Deployment Service account,您需要将特定于your-cloudrun-instance的Cloud Run Admin permissions授予它。因此,它不能访问其他云运行实例。
gcloud run services add-iam-policy-binding your-cloudrun-instance \
--member="serviceAccount:deploy-cloudrun@project-id.iam.gserviceaccount.com" \
--role="roles/run.admin" \
--region=europe-west1另外,您需要将iam.serviceAccounts.actAs的identity service account权限授予您的deployment service account。文档中提到了这一点。
gcloud iam service-accounts add-iam-policy-binding \
identity-cloudrun@project-id.iam.gserviceaccount.com \
--member="serviceAccount:deploy-cloudrun@project-id.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"因此,您可以通过deployment service account部署云,如下所示。
注意:在实践中,您应该使用deployment service account 工作负载标识联邦 ,而不是直接使用工作负载标识联邦。
gcloud run deploy your-cloudrun-instance \
--image="us-docker.pkg.dev/cloudrun/container/hello" \
--service-account="identity-cloudrun@project-id.iam.gserviceaccount.com"https://stackoverflow.com/questions/55788714
复制相似问题