首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从github动作访问gcloud中的服务帐户的问题

从github动作访问gcloud中的服务帐户的问题
EN

Stack Overflow用户
提问于 2021-05-28 06:16:45
回答 1查看 580关注 0票数 2

我对github动作和gcloud非常陌生。我很难让我的github-CI/CD-管道运行,因为由于访问限制,我无法将任何码头映像推送到。

到目前为止,我做了什么:

  • 我在github上有一个Quarkus应用程序
  • 我使用github操作来构建Maven项目和docker映像
  • 我在google中创建了一个项目,并添加了一个用于github操作的服务帐户。登录似乎有效:
代码语言:javascript
复制
Run google-github-actions/setup-gcloud@master
/usr/bin/tar xz --warning=no-unknown-keyword -C /home/runner/work/_temp/ac85f67a-89fa-4eb4-8d30-3f6379124ec2 -f /home/runner/work/_temp/de491940-a4b1-4a15-bf0a-95d563e68362
/opt/hostedtoolcache/gcloud/342.0.0/x64/bin/gcloud --quiet config set project ***
Updated property [core/project].
Successfully set default project
/opt/hostedtoolcache/gcloud/342.0.0/x64/bin/gcloud --quiet auth activate-service-account github-actions@***.iam.gserviceaccount.com --key-file -
Activated service account credentials for: [github-actions@***.iam.gserviceaccount.com]
  • 如果我现在试图推送码头映像,我会得到以下(预期的)错误消息:
代码语言:javascript
复制
Run docker push "$GCR_HOSTNAME/$PROJECT_ID/$IMAGE:$IMAGE_TAG"
The push refers to repository [eu.gcr.io/***/***]
715ac1ae8693: Preparing
435cfe5f5775: Preparing
313d03d71d4d: Preparing
c5c8d86ccee1: Preparing
1b0f2238925b: Preparing
144a43b910e8: Preparing
4a2bc86056a8: Preparing
144a43b910e8: Waiting
4a2bc86056a8: Waiting
denied: Token exchange failed for project '***'. Caller does not have permission 'storage.buckets.get'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control
Error: Process completed with exit code 1.
  • 接下来,我打开Google控制台并创建了一个自定义角色(IAM & Admin -> Roles -> Create Role),它具有必要的权限。
  • 然后,我很难将新的自定义角色分配给服务帐户(IAM & Admin ->服务帐户-> Manage Access -> Add成员)。我使用服务帐户的电子邮件地址作为“新成员”,但我无法选择我刚刚创建的自定义角色。,我在这里错过了什么?
  • 我在某个地方读到,我也可以作为成员添加服务帐户(IAM & Admin -> IAM -> Add)。我再次使用服务帐户的电子邮件地址作为“新成员”。这一次我可以选择我的定制角色。第一种方法有什么区别?
  • 无论如何,如果a I再次尝试运行github操作,则现在我得到以下错误:
代码语言:javascript
复制
Run docker push "$GCR_HOSTNAME/$PROJECT_ID/$IMAGE:$IMAGE_TAG"
The push refers to repository [eu.gcr.io/***/***]
c4f14c9d3b6e: Preparing
fe78d438e8e2: Preparing
843fcae4a8f4: Preparing
dcf8cc80cedb: Preparing
45e8815b101d: Preparing
144a43b910e8: Preparing
4a2bc86056a8: Preparing
144a43b910e8: Waiting
4a2bc86056a8: Waiting
denied: Access denied.
Error: Process completed with exit code 1.

错误信息是不同的,所以我想服务帐户的权限在某种程度上起了作用,但我还是无法成功。我错过了哪些台阶?

任何帮助都是非常感谢的。非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2021-05-28 15:15:46

调试此操作的一种方法是为本地主机上的服务帐户创建一个键,配置脚本\gcloud以使用服务帐户作为其凭据,然后手动尝试推送。

一个直接的问题可能是您没有针对(GCR)进行身份验证。GCR实现了Docker的注册表API,您需要使用鉴证 的一种机制,然后才能与注册表交互。

备注:

  1. 我认为你不需要创建一个自定义角色。你有两个选择。或者(首选)专门为CI/CD作业创建一个帐户,并授予它所需的最小角色集,包括storage.buckets.get。我认为您可以先从roles/storage.admin (链接)开始,然后再进行细化。
  2. 您可以将角色(例如,roles/storage.admin )授予项目,在这种情况下,权限适用于所有云存储资源或特定的桶,在这种情况下,权限只适用于桶及其对象。
  3. 服务帐户在GCP中具有双重作用。作为身份和资源(可供其他身份使用)。这可能会让人困惑。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67733762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档