如何从命令行使用服务帐户访问Google云存储存储桶?

我认为这样做是非常简单的,但是我不能得到它的工作:

我试图将文件从服务器(GCE)推到谷歌云存储桶。 为了避免在服务器上授予gsutil命令太多的权限,我在我的google项目的credentials部分创build了一个“Service Account”。

到斗gs://mybucket我已经添加了具有OWNER权限的该服务帐户的电子邮件地址作为用户的存储桶。

在服务器上,我激活了这样的服务帐户:

 $gcloud auth activate-service-account --key-file <path-to-keyfile> myservice $gcloud auth list Credentialed accounts: - [email protected] - myservice (active) To set the active account, run: $ gcloud config set account <account> 

所以一切似乎都很好。 但是,访问存储桶失败:

 $gsutil cp tempfile gs://mybucket CommandException: Error retrieving destination bucket gs://gitolite-backups.rueffer.info/: [('PEM routines', 'PEM_read_bio', 'no start line')] $gsutil cp tempfile gs://mybucket/tempfile Failure: [('PEM routines', 'PEM_read_bio', 'no start line')]. 

当然,我确实确认存储桶的ACL确实将服务帐户显示为OWNER。 我也试过在不同的机器上使用不同的操作系统。 同样的结果。 不用说,我自己也无法理解错误信息。 我将不胜感激任何build议。 详细的错误日志在这个要点 。

更新:

删除~/.config ,其中gcloud存储其授权数据,使用deprecated命令

 gsutil config -e 

将按照预期使用服务帐户生成~/.boto 。 后续访问gs://mybucket 确实可行

但是,我不确定这是我应该遵循的道路。 我如何得到这个工作使用gcloud auth

我遇到了同样的问题。 Google Developers Console给我的默认密钥文件实际上是一个包含json字段中的密钥材料的.json文件。 我用“gcloud auth revoke”吊销了服务帐户,从开发者控制台生成了一个新密钥,并将该密钥下载为.p12文件,这次激活了它的服务帐户。

对于logging,我今天看到同样的错误消息,同时尝试通过生成的json密钥文件启用GCE实例上的服务帐户。 预装在实例上的Gcloud sdk太旧,无法正确使用json键。 另外,当尝试以这种方式启用我的帐户时,该工具不会给出任何反馈,但尝试使用该帐户进行授权将失败,并提到错误。

在安装最新版本后,我可以通过gcloud auth activate-service-account --key-file /key.json启用我的服务帐户,然后使用gsutil cp file gs://testbucket/正常运行。