Google cloud storage 获取gsutil以使用gcloud激活服务帐户的问题

Google cloud storage 获取gsutil以使用gcloud激活服务帐户的问题,google-cloud-storage,google-cloud-platform,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登录激活该帐户,gsutil将获取该帐户。大查询命令行工具bq很好地解决了这个问题

我的行动顺序如下:

第一:

gcloud auth activate-service-account --key-file snip.json snip@developer.gserviceaccount.com
这将导致输出: 已激活的服务帐户凭据[snip@developer.gserviceaccount.com]

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

gcloud auth list
其结果是: **有凭证的账户: - snip@developer.gserviceaccount.com(主动)

第三: 我看bq工具是否能找到它:

bq ls
它正确地列出了我项目中的数据集

第四: 我试着靠着我的桶。我已将我的服务帐户用户作为所有者添加到此bucket,以确保它具有权限

gsutil ls gs://snip
这导致:长时间等待,然后最终: 您正在尝试访问未配置的受保护数据 资格证书请访问 并注册一个帐户,然后运行“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 config set account),那么它将不再工作-我会收到与上面相同的错误消息


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

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


我能够重现这个问题。这似乎只发生在JSON密钥文件中。谷歌已经意识到了这个问题。在问题解决之前,我建议使用P12密钥文件进行身份验证,或者在您试图访问的bucket上添加默认的project service帐户作为所有者。

无可否认,我不确定这是否是问题的答案(请让我知道,我将删除它),但是,鉴于没有公认的答案,我看到的两个答案并没有解决我的问题,下面是修复我的
gsutil
问题的方法:

我通过控制台外壳在项目级重新初始化了
gcloud
(单击控制台右上角的
.
图标以获取外壳),然后运行如下操作:
user@direct-主题-1234:~$gcloud init

它会问你很多问题。我认为选择“使用新设置重新初始化此配置[cloudshell-[#]]是关键,但我不是100%确定

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

gsutil mv gs://bucketname/filename实例名称:/a/path/filename

(在上面,我正在将
文件名
文件从项目存储桶移动到实例
实例名
和目录
/a/path/

在这个链接中间有一些有用的信息:


这对我来说是固定的
gsutil
!(我认为这是可行的,因为在执行上述操作之前,我的
gsutil
是为我的bucket和实例不在的区域配置的。)

嘿,仅供参考,我安装了PyOpenSSL并切换到p12。这很好,但JSON仍然不起作用。嗨,aqquadro-谢谢,但我已经完成了这一步。我已授予服务帐户所有者权限。