Рейтинг:1

Сервисный аккаунт не имеет доступа storage.buckets.get к корзине Google Cloud Storage.

флаг cn

Я запускаю Ansible со следующей конфигурацией службы, которая должна создать ведро хранилища в Google Cloud.

- name: "Создать {{ environ.name }}-cluster-backups"
  google.cloud.gcp_storage_bucket:
    name: "zeipt-io-{{ environ.name }}-cluster-backups"
    местоположение: "{{ google_cloud.region }}"
    storage_class: "БЛИЖАЙШАЯ ЛИНИЯ"
    жизненный цикл:
      правило:
        - условие:
            возраст_дней: 28
          действие:
            тип: "Удалить"
    проект: "{{ google_cloud.project }}"
    auth_kind: "{{ google_cloud.auth_kind }}"
    service_account_file: "{{ google_cloud.service_account_file }}"
    состояние: присутствует

Что дает ошибку

фатальный: [localhost]: FAILED! => {"changed": false, "msg": "GCP вернул ошибку: {'error': {'code': 403, 'message': '[email protected] не имеет хранилища .buckets.get access to the Google Cloud Storage Buckets.', 'errors': [{'message': '[email protected] не имеет storage.buckets.get доступа к Google Cloud Storage ведро.", "домен": "глобальный", "причина": "запрещено"}]}}"}

Я понимаю ошибку, но я проверил роли, назначенные этому пользователю, вот так

Проекты gcloud get-iam-policy staging-environment --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members:[email protected]. gserviceaccount.com"
РОЛЬ
роли/владелец
роли/storage.admin
роли/storage.objectAdmin
роли/хранилище.objectCreator
роли/хранилище.objectViewer

роли/storage.admin должно удовлетворять требованию, как я проверил Страница ролей Google Cloud IAM в котором говорится, что эта роль хранилище.ведра.* разрешение.

Я не понимаю, почему я все еще получаю ту же ошибку?

John Hanley avatar
флаг cn
Где (рабочий стол, Compute Engine, ...) вы используете ansible? Если в службе вычислений, проверьте области, включенные для виртуальной машины. https://cloud.google.com/compute/docs/access/service-accounts#accesscopesiam
флаг cn
@JohnHanley Я запускаю его локально на своем Mac. Я умею создавать сети, кластеры и многое другое, но не ведра.
John Hanley avatar
флаг cn
В вашей команде **gcloud проекты get-iam-policy** добавьте параметр командной строки **--project PROJECT_ID**. Укажите тот же проект, который вы используете с Ansible. Возможно, вы добавили правильные роли не для того проекта.
флаг cn
Добавление `--project PROJECT_ID` и замена имени того же проекта, который я настроил в ansible, показывает тот же результат. Я начинаю думать, что роли каким-то образом кэшируются.
John Hanley avatar
флаг cn
Роли не кэшируются локально. В Google Cloud они распределены по всему миру. Создайте новую учетную запись службы и повторите попытку. Что-то простое упускается из виду.
John Hanley avatar
флаг cn
Ведро находится в том же проекте? Неверное название ведра?
Priyashree Bhadra avatar
флаг in
Ваша проблема решена @MarkusTenghamn?
флаг cn
@PriyashreeBhadra нет, я никогда не решал эту проблему. Мне пришлось сделать это вручную, потому что я все еще не могу использовать учетную запись службы.
флаг cn
@JohnHanley Извините, что не отвечаю вам, я пытаюсь создать корзину, так что это не должно быть проблемой, но я дважды проверяю, что учетная запись службы находится в правильном проекте, и это также проект, для которого я работаю.
Priyashree Bhadra avatar
флаг in
Можете ли вы проверить, существует ли уже имя корзины, которую вы пытаетесь создать? Вы можете проверить это в Google Cloud Console > Cloud Storage и ввести имя корзины. Если это показывает ошибку, я полагаю, что проблема заключалась в том, что вы пытались создать/обновить корзину, принадлежащую другому пользователю, принадлежащему другому проекту, на который ваша учетная запись службы не имеет права. Поэтому, пожалуйста, попробуйте повторно развернуть изменение имени, которое скорее всего уникальный.
Priyashree Bhadra avatar
флаг in
В некоторых сценариях это может быть проблемой, потому что либо вы выбираете очень длинное имя, либо оно не уникально. Следуйте этим [рекомендациям](https://cloud.google.com/storage/docs/naming-buckets), если это проблема.
Рейтинг:0
флаг ye

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

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

Вы можете создать учетную запись службы с помощью этого плагина google.cloud.gcp_iam_service_account — создает учетную запись службы GCP.

Пример:

- имя: создать учетную запись службы
  google.cloud.gcp_iam_service_account:
    имя: sa-{{ resource_name.split("-")[-1] }}@graphite-playground.google.com.iam.gserviceaccount.com
    display_name: Мой тестовый ключ Ansible
    проект: test_project
    auth_kind: учетная запись службы
    service_account_file: "/tmp/auth.pem"
    состояние: присутствует

И вы можете назначить роли с помощью плагина google.cloud.gcp_iam_role — создает роль GCP.

Пример:

- имя: создать роль
  google.cloud.gcp_iam_role:
    имя: myCustomRole2
    title: Моя пользовательская роль
    description: Мое пользовательское описание роли
    включенные_разрешения:
    - iam.roles.list
    - iam.roles.create
    - iam.roles.delete
    проект: test_project
    auth_kind: учетная запись службы
    service_account_file: "/tmp/auth.pem"
    состояние: присутствует

Помните, что эти плагины являются частью коллекция google.cloud, который следует установить, если вы используете пакет ansible.

флаг us
@Markus Tengham, этот ответ помог вам? Если это так, не могли бы вы проголосовать за него или отметить его как принятый, чтобы помочь сообществу? Спасибо.

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

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