Диспетчер развертывания GCP: 403 не имеет доступа к storage.buckets.get

Я пытаюсь создать корзину с помощью диспетчера развертывания, но когда я хочу создать развертывание, я получаю следующую ошибку:

ERROR: (gcloud.deployment-manager.deployments.create) Error in Operation [operation-1525606425901-56b87ed1537c9-70ca4aca-72406eee]: errors:
- code: RESOURCE_ERROR
  location: /deployments/posts/resources/posts
  message: '{"ResourceType":"storage.v1.bucket","ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"errors":[{"domain":"global","message":"[email protected]
    does not have storage.buckets.get access to posts.","reason":"forbidden"}],"message":"[email protected]
    does not have storage.buckets.get access to posts.","statusMessage":"Forbidden","requestPath":"https://www.googleapis.com/storage/v1/b/posts","httpMethod":"GET","suggestion":"Consider
    granting permissions to [email protected]"}}'

Если я правильно понимаю, менеджер развертывания использует учетную запись службы (как описано в сообщении) для фактического создания всех моих ресурсов. Я проверил IAM и убедился, что роль службы ([email protected]) имеет доступ как «Редактор», и даже добавил «Администратор хранилища» (который включает storage.buckets.get), чтобы быть более уверенным. Однако я по-прежнему получаю то же сообщение об ошибке.

Я назначаю разрешения не тому пользователю IAM / что я делаю не так?


используемая команда:

gcloud deployment-manager deployments create posts --config posts.yml

мой шаблон развертывания:

bucket.jinja

resources:
- name: {{ properties['name'] }}
  type: storage.v1.bucket
  properties:
    name: {{ properties['name'] }}
    location: europe-west1
    lifecycle:
      rule:
      - action:
          type: Delete
        condition:
          age: 30
          isLive: true
    labels:
      datatype: {{ properties['datatype'] }}
    storageClass: REGIONAL

posts.yml

imports:
  - path: bucket.jinja

resources:
- name: posts
  type: bucket.jinja
  properties:
    name: posts
    datatype: posts

comment
У меня такая же проблема! МОЙ БОГ. Странно то, что диспетчер Deployer успешно создал первую корзину. После этого получаю тот же 403   -  person Fabrizio Fenoglio    schedule 15.05.2018
comment
@Fabrizio Ты тоже можешь проверить, в чем проблема?   -  person GalloCedrone    schedule 22.05.2018
comment
@GalloCedrone ты лучший! Абсолютно признателен за ваш ответ, так было и со мной   -  person Fabrizio Fenoglio    schedule 24.05.2018


Ответы (1)


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

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


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

Это может показаться чрезмерным требованием, но позволяет создать статический веб-сайт или обратиться к файлу со стандартным URL-адресом:

  • https://storage.googleapis.com/nomebucket/folder/nomefile

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


Обратите внимание, что если вы удалите разрешения из учетной записи службы, вы не получите сообщение о том, что учетная запись службы не подключена к корзине:

[email protected] does not have storage.buckets.get access to posts.

Но вместо этого появляется сообщение о том, что учетная запись службы не имеет доступа к проекту:

Service account [email protected] is not authorized
    to take actions for project xxx. Please add [email protected]
    as an editor under project xxx using Google Developers Console

Обратите внимание: если вы попытаетесь создать уже имеющийся у вас сегмент, проблем не возникнет.

$ gcloud deployment-manager deployments create posts22 --config posts.yml                                                                                             
The fingerprint of the deployment is xxx==
Waiting for create [operation-xxx-xxx-xxx-xxx]...done.
Create operation operation-xxx-xxx-xxx-xxx completed successfully.
NAME                  TYPE               STATE      ERRORS  INTENT
nomebuckettest4536  storage.v1.bucket  COMPLETED  []
person GalloCedrone    schedule 22.05.2018
comment
Похоже, ты прав! Спасибо. Прочитать его снова имеет смысл, но все же я бы хотел, чтобы сообщение об ошибке было немного более ясным, что проблема может быть в имени корзины. Спасибо! - person Jan; 22.05.2018
comment
Это все из-за того, что сегменты GCS являются действительно глобальным пространством имен (не в рамках проекта), и все «хорошие» имена (например, posts), вероятно, были взяты много лет назад. - person afed; 23.05.2018
comment
Это тоже случилось со мной .. Я не понимал, что имя корзины, которое я пытался создать, уже существует в другом проекте. - person Dean Christian Armada; 28.08.2019