AccessDeniendException при копировании из экземпляра GCP Compute в корзину - PullRequest
3 голосов
/ 06 мая 2019

Я хочу скопировать объект из экземпляра Google Compute Engine в Google Storage Bucket, используя gsutil cp. Оба принадлежат одному владельцу (мне) и одному и тому же проекту. Я хочу автоматизировать всю машину, поэтому аутентификация вручную - это не то, что мне нужно.

Я активировал необходимые разрешения для использования служебной учетной записи в экземпляре Compute (подробности ниже), но когда я пытаюсь gsutil cp файл в корзину, я получаю AccessDeniedException.
Сообщение об ошибке жалуется на отсутствие разрешений storage.object.create или storage.object.list в зависимости от того, заканчивается ли мой целевой путь корзины в папке (gs://<bucket>/test/) или файле (gs://<bucket>/test.txt).

Что я сделал, чтобы получить разрешения (я уже пробовал лот , включая создание избыточных пользовательских ролей, которые я также назначил учетной записи службы):

  • Запустить экземпляр:
gcloud instances create <instance> [...] \
    --service--account <name>@<project>.iam.gserviceaccount.com \
    --scopes cloud-platform,storage-full
  • Дайте учетной записи службы разрешения на создание.
  • Дайте разрешения учетной записи службы и впоследствии (просто для безопасности):
gcloud projects add-iam-policy-binding <project> \
    --member serviceAccount:<name>@<project>.iam.gserviceaccount.com \
    --role roles/storage.objectAdmin
  • Редактировать разрешения хранилища для учетной записи службы:
gsutil iam ch \
    serviceAccount:<name>@<project>.iam.gserviceaccount.com:roles/storage.objectAdmin \
    gs://<bucket>
  • Редактировать список контроля доступа к хранилищу (разрешение владельца):
gsutil acl ch -u <name>@<project>.iam.gserviceaccount.com:O gs://<bucket>
  • В какой-то момент включенные политики IAM уровня сегмента вместо политик для каждого объекта (просто для безопасности).
  • В случае использования gcloud auth activate-service-account --key-file <key>.json для аутентификации учетной записи.

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

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Я создал новую учетную запись службы и выполнил те же самые шаги ... Теперь это работает.

0 голосов
/ 06 мая 2019

Помимо того, что используемая учетная запись службы имеет соответствующие разрешения, вам также необходимо убедиться, что у используемого экземпляра есть соответствующие области доступа к облачному хранилищу Google, которые обычно не используются по умолчанию.,Вы можете либо установить области действия на Allow full access to all Cloud APIs, либо установить их по своему усмотрению.Инструкции о том, как это сделать , можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...