我认为这样做是非常简单的,但是我不能得到它的工作:
我试图将文件从服务器(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/
正常运行。