尝试部署到 Google Cloud Run 时出现权限错误
Posted
技术标签:
【中文标题】尝试部署到 Google Cloud Run 时出现权限错误【英文标题】:Permission error when trying to deploy to Google Cloud Run 【发布时间】:2019-09-27 20:20:45 【问题描述】:尝试将映像部署到云运行时出现权限错误:
gcloud beta run deploy endpoints_proxy \
--image="gcr.io/endpoints-release/endpoints-runtime-serverless:1.30.0" \
--allow-unauthenticated
这是错误:
ERROR: (gcloud.beta.run.deploy) User [email-goes-here] does not have permission to access namespace [project-id-goes-here] (or it may not exist): Cloud Run does not have permission to get access tokens for the default compute service account, 1088973916567-compute@developer.gserviceaccount.com. Please give Google Cloud Run Service Agent the permission iam.serviceAccounts.getAccessToken on the default compute service account.
我的帐户拥有所有者和编辑者权限,我什至尝试附加 Cloud Run 服务代理角色。
我还尝试将这些角色添加到错误中列出的“默认计算服务帐户”中,但不起作用。
【问题讨论】:
【参考方案1】:错误信息非常具有误导性,发生错误是因为缺少Cloud Run Service Agent。
创建以下服务帐号后:
Name: service-<account-id>@serverless-robot-prod.iam.gserviceaccount.com
Role: Google Cloud Run Service Agent
问题解决了。看起来 Cloud Run 需要这个服务帐号才能工作,所以永远不要删除它 :)
【讨论】:
对,cloud run需要这个账号才能从你的项目中拉取镜像 你能扩展这个答案吗?您是如何创建服务帐户的以及应用了哪些角色/权限?服务帐号是如何被删除的? 服务帐户被手动删除,这是一个错误。为了重新创建它,我只是使用了与具有@serverless-robot 域的其他服务帐户代理相同的电子邮件前缀。唯一附加的角色是 Google Cloud Run 服务代理。 通常当您在云控制台中启用某些服务(例如 Cloud Run)时,它会开始设置该服务所需的一切。其中一件事是创建默认计算服务帐户。之所以需要它是因为 Cloud Run 需要iam.serviceAccounts.getAccessToken
权限,例如可以与角色 roles/iam.serviceAccountTokenCreator
相关,并且该角色必须分配给服务帐号
我有那个服务账户和这个角色。对我来说,错误仍然存在。当我试图在console.cloud.google.com/iam-admin/roles 中找到该角色时,它没有出现。你们有这个角色吗?【参考方案2】:
您应该启用对 Cloud Build 服务帐号的权限。 除非你这样做,否则它不会起作用。
Google Cloud Console > Cloud Build > Cloud Build Settings > 启用对您正在使用的 GCP 服务的访问。 (见附图)
Cloud Build Panel
Cloud Build Panel - enable services that you want
【讨论】:
以上是关于尝试部署到 Google Cloud Run 时出现权限错误的主要内容,如果未能解决你的问题,请参考以下文章
将 env 变量从 Google 的 Secret Manager 加载到在 Google Cloud Run 上运行但未通过 Cloud Build 部署的 Docker 容器中?
如何将 Google Cloud Run Container 连接到 Open***?