GCP Deployment Manager: 403 не имеет доступа к storage.buckets.get - PullRequest
0 голосов
/ 06 мая 2018

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

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":"myprojectid@cloudservices.gserviceaccount.com
    does not have storage.buckets.get access to posts.","reason":"forbidden"}],"message":"myprojectid@cloudservices.gserviceaccount.com
    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 myprojectid@cloudservices.gserviceaccount.com"}}'

Если я правильно понимаю, менеджер развертывания использует учетную запись службы (как описано в сообщении), чтобы фактически создать все мои ресурсы. Я проверил IAM и убедился, что роль службы (myprojectid@cloudservices.gserviceaccount.com) имеет доступ как «Редактор» и даже добавил «Администратор хранилища» (который включает 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

1 Ответ

0 голосов
/ 22 мая 2018

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

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


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

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

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


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

xxx@cloudservices.gserviceaccount.com does not have storage.buckets.get access to posts.

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

Service account xxx@cloudservices.gserviceaccount.com is not authorized
    to take actions for project xxx. Please add xxx@cloudservices.gserviceaccount.com
    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  []
...