Я думал, что это будет довольно просто сделать, но я не могу заставить его работать:
Я пытаюсь переместить файлы с сервера (GCE) в корзину облачного хранилища Google. Чтобы избежать предоставления gsutil
команда на сервере слишком много прав, я создал «Учетную запись службы» в разделе учетных данных моего проекта Google.
К ведру gs://mybucket
Я добавил адрес электронной почты этой учетной записи службы с разрешениями OWNER в качестве ПОЛЬЗОВАТЕЛЯ в корзину.
На сервере я активировал сервисный аккаунт так:
$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')].
Конечно, я действительно проверил, что в списках ACL корзины действительно отображается учетная запись службы как OWNER. Я также пробовал это на другом компьютере с другой ОС. Тот же результат. Излишне говорить, что я сам не могу разобраться в сообщениях об ошибках. Буду признателен за любые предложения. Подробный журнал ошибок это суть.
Обновить:
После удаления ~/.config
, где gcloud
хранит свои данные авторизации, использование устаревшей команды
gsutil config -e
будет генерировать ~/.boto
с учетной записью службы, как предполагалось. Последующий доступ к gs://mybucket
работает.
Однако я не уверен, что я должен идти по этому пути. Как мне заставить это работать, используя gcloud auth
?
Для записи я видел такое же сообщение об ошибке сегодня при попытке включить учетную запись службы в экземпляре GCE через сгенерированный ключевой файл json. Gcloud sdk, предустановленный на экземпляре, был слишком стар и не мог правильно работать с ключами json. Кроме того, инструмент не будет давать никаких отзывов при попытке включить мою учетную запись таким образом, но попытка использовать учетную запись для авторизации приведет к сбою с указанной ошибкой.
После того, как я установил текущую версию, я смог включить свою учетную запись службы через gcloud auth activate-service-account --key-file /key.json
а потом gsutil cp file gs://testbucket/
работал правильно.
У меня была такая же проблема. Ключевой файл по умолчанию, который мне предоставила консоль разработчика Google, на самом деле был файлом .json с ключевым материалом в поле json. Я отозвал учетную запись службы с помощью «gcloud auth revoke», сгенерировал новый ключ из консоли разработчиков и загрузил ключ в виде файла .p12, и на этот раз после активации учетной записи службы все заработало.