通过服务帐号使用 Google Cloud Source Repositories

Posted

技术标签:

【中文标题】通过服务帐号使用 Google Cloud Source Repositories【英文标题】:Using Google Cloud Source Repositories with service account 【发布时间】:2015-11-11 11:16:44 【问题描述】:

是否可以自动访问Google Cloud Source Repository,即使用service account 从GCE 实例?

我在文档中看到的唯一身份验证方法是使用 gcloud auth login 命令,该命令将对我的个人用户进行身份验证以访问 repo,而不是我正在运行命令的机器。

【问题讨论】:

【参考方案1】:

在 GCE 虚拟机上运行

gcloud source repos clone default ~/my_repo

应该自动工作,无需额外的身份验证步骤,因为它将使用虚拟机服务帐户。

如果您在其他机器上运行,您可以从https://console.cloud.google.com 服务帐户.json 密钥文件下载并激活它

gcloud auth activate-service-account --key-file KEY_FILE

然后运行上面的克隆命令。

【讨论】:

对我来说它给出了致命的:远程错误:无效的身份验证凭据。请生成一个新标识符:source.developers.google.com/auth/start?scopes=https://… 我尝试在console.cloud.google.com/code/develop/repo 中授予 VM 服务帐户权限仍然相同的错误。 我搞定了,需要在创建实例时选择“允许完全访问所有云 API”。否则,VM 服务帐户没有所需的范围,即使授予 IAM 角色也无法访问存储库。【参考方案2】:

如果你想用git克隆而不是通过gcloud运行,你可以运行:

git config --global credential.helper gcloud.sh

...然后这将起作用:

git clone https://source.developers.google.com/p/$PROJECT/r/$REPO

【讨论】:

【参考方案3】:

如果像我这样的人试图将其作为 Dockerfile 的一部分,经过一段时间的努力,我只能设法让它像这样工作:

RUN gcloud auth activate-service-account --key-file KEY_FILE ; \
    gcloud source repos clone default ~/my_repo

正如你所看到的,让它成为同一个 RUN 命令的一部分是关键,否则它会一直失败

ERROR: (gcloud.source.repos.clone) You do not currently have an active account selected.

【讨论】:

【参考方案4】:
    为实例启用对“Cloud Source Repositories”云 API 的访问。您应该在创建或编辑 Admin console 中的实例时执行此操作 从实例内部的外壳,执行gcloud source repos clone <repo_name_in_cloud_source> <target_path_to_clone_into>

【讨论】:

【参考方案5】:

如果您在 GCE 上运行,请利用需要更少代码行的新身份验证方法。

创建 VM 实例时,在“访问和安全”下,将“云平台”设置为“启用”。

那么验证码就是这么简单:

from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
http = credentials.authorize(httplib2.Http())

看 https://developers.google.com/identity/protocols/application-default-credentials

【讨论】:

以上是关于通过服务帐号使用 Google Cloud Source Repositories的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Cloud 文字转语音 API

常见的Navicat Cloud帐号问题

服务帐户没有对 Google Cloud Storage 的 storage.objects.get 访问权限

Google API 服务帐号

Google API 服务帐号授权错误

如何通过 terraform 使用服务帐户创建 google cloud pubsub pull 订阅?