让gsutil使用gcloud激活的服务帐户的问题

时间:2015-04-01 20:59:28

标签: google-cloud-storage google-cloud-platform

我正在尝试获取一个我通过gcloud auth登录激活的服务帐户,以便被gsutil接收。大查询命令行工具bq正在捡起它。

我遵循的操作顺序:

首先:

gcloud auth activate-service-account --key-file snip.json snip@developer.gserviceaccount.com

这导致输出: [snip@developer.gserviceaccount.com]的已激活服务帐户凭据

第二: 我通过以下方式确认凭证是否有效:

gcloud auth list

导致: ** Credentialed帐户:   - snip@developer.gserviceaccount.com(有效)......

第三: 我看看bq工具是否可以选择它:

bq ls

正确列出项目中的数据集。

第四: 我尝试gsutil反对我的桶。我已将我的服务帐户用户添加为此存储区以确保其具有权限。

gsutil ls gs://snip

这导致:漫长的等待,然后最终: 您尝试访问未配置的受保护数据 证书。请访问https://cloud.google.com/console#/project 并注册一个帐户,然后运行" gcloud auth登录" 命令配置gsutil以使用这些凭据。

然后我使用debug命令:

gsutil -D

输出:

gsutil version: 4.11
checksum: snip (OK)
boto version: 2.30.0
python version: 2.7.5 (default, Jun 17 2014, 18:11:42) [GCC 4.8.2 20140120 (Red Hat 4.8.2-16)]
OS: Linux 3.10.0-123.20.1.el7.x86_64
multiprocessing available: True
using cloud sdk: True
config path: no config found
gsutil path: /home/blah/google-cloud-sdk/platform/gsutil/gsutil
compiled crcmod: False
installed via package manager: False
editable install: False
Command being run: /home/blah/google-cloud-sdk/platform/gsutil/gsutil -o GSUtil:default_project_id=snip -D
config_file_list: []
config: [('debug', '0'), ('working_dir', '/mnt/pyami'),'https_validate_certificates', 'true'), ('debug', '0'), ('working_dir', '/mnt/pyami'), ('default_project_id', 'snip')]

在此之后,如果我通过gcloud auth login将我自己的用户ID添加到凭证存储,gsutil ls gs:// snip工作正常。如果我然后将服务帐户切换为活动而不是我的用户ID(使用gcloud配置集帐户),那么它再也不起作用 - 我得到与上面相同的错误消息。

最后一条信息 - 我在我自己的VM上运行它,而不是在GCE内。

3 个答案:

答案 0 :(得分:2)

我能够重现这个问题。它似乎只发生在JSON密钥文件中。 Google根据this了解此问题。在解决之前,我建议您使用P12密钥文件进行身份验证,或者将默认项目服务帐户添加为您尝试访问的存储区中的所有者。

答案 1 :(得分:0)

您需要从云控制台授权存储桶上的服务帐户,然后点击"编辑存储桶权限"然后添加服务帐户的电子邮件地址的权限。

enter image description here

答案 2 :(得分:0)

不可否认,我不确定这是问题的答案(请告诉我,我会将其删除),但看到没有接受的答案,我看到的两个答案并没有解决问题对我来说,这是解决gsutil问题的原因:

我通过控制台shell在项目级别重新初始化gcloud(单击控制台右上角的>_图标以获取shell),然后运行如下所示的内容: user@direct-topic-1234:~$ gcloud init

它会问你一堆问题。我认为选择"使用新设置重新初始化此配置[cloudshell - [#]]"是关键,但我不是百分百肯定。

我完成后gsutil开始工作。我做了不同的事情,但我希望这会有助于解决这个问题。我在做:

gsutil mv gs://bucketname/filename instance-name:/a/path/filename

(在上文中,我将filename文件从项目存储区移动到实例instance-name和目录/a/path/。)

此链接中间有一些有用的信息: https://cloud.google.com/compute/docs/disks/gcs-buckets

这对我固定gsutil! (我认为它有效,因为在执行上述操作之前,我的gsutil已配置为我的存储桶和实例不在的区域。)