Google cloud platform 无法将作为服务帐户部署到google云运行
我正在努力为服务帐户启用部署到云运行。我的逻辑是这样的:Google cloud platform 无法将作为服务帐户部署到google云运行,google-cloud-platform,google-cloud-run,Google Cloud Platform,Google Cloud Run,我正在努力为服务帐户启用部署到云运行。我的逻辑是这样的: gcloud身份验证激活服务帐户\ 云端-deployer@my-project.iam.gserviceaccount.com\ --key file=my-project-123213.json gcloud运行部署我的项目操作\ --图像“gcr.io/my project/my project action:dev”\ --计划我的计划\ --冗长调试\ --美国中部地区1\ --允许未经验证的\ --平台管理 这在以下情况下失
gcloud身份验证激活服务帐户\
云端-deployer@my-project.iam.gserviceaccount.com\
--key file=my-project-123213.json
gcloud运行部署我的项目操作\
--图像“gcr.io/my project/my project action:dev”\
--计划我的计划\
--冗长调试\
--美国中部地区1\
--允许未经验证的\
--平台管理
这在以下情况下失败:
HttpForbiddenError: HttpError accessing <https://us-central1-run.googleapis.com/apis/serving.knative.dev/v1/namespaces/my-project/services/my-project-action?alt=json>: response: <{'status': '403', 'content-length': '126', 'x-xss-protection': '0', 'x-content-type-options': 'nosniff', 'transfer-encoding': 'chunked', 'vary': 'Origin, X-Origin, Referer', 'server': 'ESF', '-content-encoding': 'gzip', 'cache-control': 'private', 'date': 'Wed, 01 Jan 2020 23:08:29 GMT', 'x-frame-options': 'SAMEORIGIN', 'alt-svc': 'quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000', 'content-type': 'application/json; charset=UTF-8'}>, content <{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
>
ERROR: (gcloud.run.deploy) PERMISSION_DENIED: The caller does not have permission
HttpForbiddenError:HttpError访问:响应:,内容
错误:(gcloud.run.deploy)权限\u被拒绝:调用方没有权限
我已按照我的服务帐户的步骤操作。例如,它有项目级的角色/run.admin
和角色/iam.serviceAccountUser
。我也尝试过为项目提供roles/editor
或roles/owner
,但结果相同。我可以在我的12321312123上看到-compute@developer.gserviceaccount.com
云计算运行的用户-deployer@my-project.iam.gserviceaccount.com是服务帐户用户
如果使用gcloud auth login
进行身份验证,则可以使用相同的deploy命令进行部署
使用云运行-deployer@my-project.iam.gserviceaccount.com
和相同的身份验证方法,我能够将新的docker映像推送到容器注册表,因此我认为身份验证过程可以工作,但我缺少一些权限或cloud run deploy的某些内容
顺便说一句,我是从
cloudsdk
docker image部署的。我试图重现这个问题,我可以说这对我很有效。与谷歌云中的其他服务一样,谷歌云运行的问题在于它们使用服务标识
在执行过程中,云运行修订使用服务帐户作为其标识。这意味着,当您的代码使用Google云客户端库时,它会自动从当前云运行版本的运行时服务帐户获取并使用凭据。此策略称为“应用程序默认凭据”
如上所述,默认情况下:
云计算运行修订版正在使用计算引擎默认服务帐户(项目编号-compute@developer.gserviceaccount.com),它具有项目>编辑器IAM角色。这意味着默认情况下,您的云运行修订版具有对Google云项目中所有资源的读写访问权限
这意味着如果愿意,您可以使用计算引擎默认服务帐户进行部署。还建议通过使用更受限制的IAM角色向每个云运行服务授予更细粒度的权限
如果您想创建一个新的服务帐户并将其用作将容器部署到Google Cloud Run的帐户,您需要:
- 角色/run.admin提供
和run.services.create
run.services.update
- 角色/iam.serviceAccountUser提供
iam.serviceAccounts.actAs
iam.servicecomports.actAs
权限,如您所见
--service account
标志,如图所示它应该与
gcloud run deploy
配合使用,但如果不能,您也可以尝试gcloud beta run deploy
您可以查看有关--service account
标志的更多信息,但概括起来:
与服务修订相关联的IAM服务帐户的电子邮件地址。服务帐户表示正在运行的修订的标识,并确定该修订具有哪些权限如果未提供,修订版将使用项目的默认服务帐户。
我希望能有所帮助。我想总结一下我在同一主题上的奋斗 在我的例子中,这有点不同,因为我也使用云SQL。关键是错误是一样的 用于部署的服务帐户需要具有所有必需的权限 最基本的是在文档中,
云运行管理
和服务帐户用户
但是,在我使用云SQL的情况下,还需要云SQL查看器
角色
这个故事的难点在于,它总是显示为缺少gcloud.run.deploy
Cloud-SQL-on-Cloud-run权限不足
在将Postgres数据库迁移到Google之后,我在构建过程中立即遇到了这个错误。鉴于@spicydog的回答给出了很好的建议,下面是我对这个问题的具体解决方案
发生这种情况的原因是,我还没有向我们的云构建和云运行服务帐户授予使用谷歌新Postgres数据库的正确权限角色
授予正确的IAM
角色的步骤
该解决方案的要点是,如果您使用的是文档中建议的默认值,那么您需要向至少两个服务帐户添加角色
1.将云SQL客户端
角色添加到默认的云运行服务帐户
我的问题是,我的默认云运行服务帐户缺少相应的权限。从文档中:
云运行(完全管理)使用服务帐户来授权您与云SQL的连接。此服务帐户必须具有正确的IAM权限才能成功连接。除非
gcloud run deploy my-project-action \
--image "gcr.io/my-project/my-project-action:dev" \
--project my-project \
--verbosity debug \
--region us-central1 \
--allow-unauthenticated \
--platform managed \
--service-account [SERVICE_ACCOUNT]