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

问题描述 投票:3回答:3

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

我遵循的操作顺序:

第一:

gcloud auth activate-service-account --key-file snip.json [email protected]

这导致输出:[[email protected]]的激活服务帐户凭据

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

gcloud auth list

结果如下:** Credentialed帐户: - [email protected](有效)...

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

bq ls

这正确地列出了我的项目中的数据集。

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

gsutil ls gs://snip

这导致:漫长的等待,最终:您尝试访问没有配置凭据的受保护数据。请访问https://cloud.google.com/console#/project并注册一个帐户,然后运行“gcloud auth login”命令配置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内。

google-cloud-storage google-cloud-platform
3个回答
2
投票

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


0
投票

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


0
投票

不可否认,我不确定这是问题的答案(请告诉我,我会删除它),但是看到没有接受的答案,我看到的两个答案并没有为我解决问题,这里是什么修复了gsutil问题给我:

我通过控制台shell在项目级别重新初始化qazxsw poi(单击控制台右上角的qazxsw poi图标以获取shell),然后运行如下:gcloud

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

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

user@direct-topic-1234:~$ gcloud init

(在上面,我将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配置为我的存储桶和实例不在的区域。)

© www.soinside.com 2019 - 2024. All rights reserved.