让 gsutil 使用 gcloud 激活的服务帐号时出现问题

man*_*ort 5 google-cloud-storage google-cloud-platform

我正在尝试获取一个已通过 gcloud auth 登录激活的服务帐户,以供 gsutil 选取。大查询命令行工具 bq 表现良好。

我遵循的操作顺序:

第一的:

gcloud auth activate-service-account --key-file snip.json snip@developer.gserviceaccount.com
Run Code Online (Sandbox Code Playgroud)

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

第二:我通过以下方式确认凭证处于活动状态:

gcloud auth list
Run Code Online (Sandbox Code Playgroud)

结果是:**凭据帐户:- snip@developer.gserviceaccount.com(活动)...

第三:我看看 bq 工具是否能识别它:

bq ls
Run Code Online (Sandbox Code Playgroud)

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

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

gsutil ls gs://snip
Run Code Online (Sandbox Code Playgroud)

这会导致:长时间等待,最终: 您尝试在没有配置凭据的情况下访问受保护的数据。请访问https://cloud.google.com/console#/project 并注册一个帐户,然后运行“gcloud auth login”命令来配置 gsutil 以使用这些凭据。

然后我使用调试命令:

gsutil -D
Run Code Online (Sandbox Code Playgroud)

输出:

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')]
Run Code Online (Sandbox Code Playgroud)

之后,如果我通过 gcloud auth 登录将我自己的用户 ID 添加到凭证存储中,gsutil ls gs://snip 工作正常。如果我随后将服务帐户切换为活动帐户而不是我的用户 ID(使用 gcloud config set account),那么它就不再工作 - 我收到与上面相同的错误消息。

最后一条信息 - 我在我自己的虚拟机上运行它,而不是在 GCE 中。

aqq*_*dro 0

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

在此输入图像描述