Рейтинг:1

Разрешения сервисного аккаунта GCP

флаг br

Новичок в GCP, надеюсь, есть быстрый ответ, который мне не хватает.

У меня есть проект с работающей в нем виртуальной машиной GCE. Я хотел бы время от времени делать резервную копию набора данных в хранилище объектов GCP. Мой план состоит в том, чтобы запустить «gsutil rsync…» из задания cron.

Я создал ведро для работы. Я не редактировал разрешения, роли или что-то еще в ведре.

Я запускаю «sudo su -», так что я работаю от имени пользователя root, как я ожидаю от задания cron, затем введите

gsutil rsync -r -d <каталог для резервного копирования> gs://<bucket>/

и я получаю

AccessDeniedException: 403 недостаточно прав

Находясь в этом состоянии, я набрал «gcloud config list» и получил

account = <xyz>[email protected]

disable_usage_reporting = Истина

проект = <идентификатор проекта>

Ваша активная конфигурация: [по умолчанию]

Это учетная запись службы по умолчанию, созданная при создании виртуальной машины. Я не делал никакого редактирования на нем.

В консоли я перешел к IAM-> учетные записи службы, щелкните эту учетную запись службы, щелкните вкладку разрешений и я вижу, что эта учетная запись службы является редактором в <id проекта>

В консоли я перехожу к облачному хранилищу, просматриваю, нажимаю на свое ведро, перехожу на вкладку разрешений и вижу, что роль редактора имеет роли «Владелец устаревшего сегмента хранилища» и «Владелец устаревшего объекта хранилища». Глядя на эти роли , мне сказали, что первое — это доступ для чтения/записи к существующим корзинам с разрешениями на создание/список/удаление объектов. Второй дает мне доступ для чтения/записи к существующим объектам.

Я убедился, что ведро на данный момент пусто.

Что мне нужно сделать, чтобы моя команда gsutil могла работать с достаточными разрешениями?

Рейтинг:1
флаг cn

Скорее всего, ваша проблема заключается в недостаточных областях доступа к облачному API для экземпляра виртуальной машины Compute Engine.

gsutil rsync команда требует следующих разрешений:

  • хранилище.objects.create
  • хранилище.objects.delete
  • хранилище.объектов.список
  • storage.objects.get # требуется для копирования из корзины в корзину

Роль роли/редактор не имеет ни одного из этих разрешений.

Экземпляры ВМ Google Cloud Compute Engine используют два метода авторизации:

  • Учетная запись службы по умолчанию
  • Области доступа к облачному API

У учетной записи службы должна быть роль, предоставляющая перечисленные выше разрешения, ИЛИ удостоверению учетной записи службы должен быть предоставлен доступ к корзине и ее содержимому. Google Cloud Storage поддерживает два разных метода авторизации. Для простоты я рекомендую вам добавить необходимую роль в учетную запись службы. Для вашего варианта использования gsutil rsync, рекомендую добавить роль роли/storage.legacyBucketOwner.

Однако даже если учетная запись службы имеет необходимые разрешения через роли, области доступа Compute Engine Cloud API могут лишить эти разрешения. Перейдите в Google Cloud Console, выберите свой экземпляр виртуальной машины. Проверьте, какие области включены. Вы должны либо включить «Хранилище: полное», либо «Разрешить полный доступ ко всем облачным API». В противном случае учетная запись службы будет ограничена в разрешениях, полученных для токенов доступа OAuth, которые gsutil требует для авторизации.

Экземпляр ВМ Compute Engine Области доступа к Cloud API

Stephen Daniel avatar
флаг br
Работает сейчас! У роли редактора были все необходимые разрешения, но API не был включен на виртуальной машине. Я остановил виртуальную машину, отредактировал ее, чтобы разрешить все API, перезапустил, и все заработало.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.