Я думал, что это будет довольно прямым, чтобы сделать это, но я не могу заставить это работать:
Я пытаюсь продвинуть файлы с сервера (GCE) к блоку облачного хранилища Google. Постараться не предоставлять gsutil
команда на сервере слишком много прав, я создал "Сервисную учетную запись" в разделе учетных данных моего проекта Google.
К блоку gs://mybucket
Я добавил адрес электронной почты той сервисной учетной записи с полномочиями ВЛАДЕЛЬЦА как ПОЛЬЗОВАТЕЛЬ к блоку.
На сервере я активировал сервисную учетную запись как это:
$gcloud auth activate-service-account --key-file <path-to-keyfile> myservice
$gcloud auth list
Credentialed accounts:
- 1234567890@project.gserviceaccount.com
- myservice (active)
To set the active account, run:
$ gcloud config set account <account>
Таким образом, все кажется прекрасным до сих пор. Однако доступ к сбоям блока:
$gsutil cp tempfile gs://mybucket
CommandException: Error retrieving destination bucket gs://mybucket/: [('PEM routines', 'PEM_read_bio', 'no start line')]
$gsutil cp tempfile gs://mybucket/tempfile
Failure: [('PEM routines', 'PEM_read_bio', 'no start line')].
Конечно, я действительно проверял, что ACLs блока действительно показывают сервисную учетную запись ВЛАДЕЛЬЦЕМ. Я также попробовал это на другой машине с другой ОС. Тот же результат. Само собой разумеется, я не могу иметь смысла из сообщений об ошибках сам. Я ценил бы любые предложения. Подробный журнал ошибок в этой сути.
Обновление:
После удаления ~/.config
, где gcloud
хранит его данные авторизации, использование команды устаревшей
gsutil config -e
генерирует ~/.boto
с сервисной учетной записью, как предназначено. Последующий доступ к gs://mybucket
действительно работает.
Однако я не уверен, что это - путь, за которым я, как предполагается, следую. Как я заставляю это работать с помощью gcloud auth
?
У меня была та же самая проблема. Ключевой файл по умолчанию, который мне дал консоль разработчиков Google, на самом деле был файлом .json с ключевым материалом в поле json. Я отозвал служебный аккаунт с "gcloud auth revoke", сгенерировал новый ключ из консоли разработчиков и загрузил ключ в виде файла .p12, и на этот раз после активации служебного аккаунта он заработал
.Для записи, я видел такое же сообщение об ошибке сегодня при попытке включить учетную запись службы на GCE экземпляр через сгенерированный файл ключей json . Gcloud sdk, предустановленный на экземпляре, был слишком стар и не мог правильно работать с ключами json. Кроме того, инструмент не дает никакой обратной связи при попытке включить мою учетную запись таким способом, но попытка использовать учетную запись для авторизации завершится с указанной ошибкой.
После того, как я установил текущую версию, я смог включить свою учетную запись службы через gcloud auth activate-service-account --key-file /key.json
, а затем gsutil cp файл gs: // testbucket /
работал правильно.