Правильные разрешения для Google Cloud Build для развертывания функции Cloud в отдельном проекте - PullRequest
2 голосов
/ 24 октября 2019

У нас есть отдельные проекты GCP для сред "build" и "prod". Я хотел бы использовать Cloud Build для проекта "build" для развертывания функции Cloud в проекте "prod". При соблюдении документации .

В частности, я добавил роль «Разработчик облачных функций» в учетную запись службы сборки в проекте сборки и роль «Пользователь учетной записи службы IAM» в учетную запись PROJECT_ID@appspot.gserviceaccount.com, как указано в документации. и в этот вопрос , при запуске сборки я получаю:

ОШИБКА: (gcloud.functions.deploy) ResponseError: status = [403], code = [Forbidden], message = [Вызывающий не имеет разрешения]

Упрощенный пример моего cloudbuild.yaml:

steps:
  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['source', 'repos', 'clone', 'a_mirrored_repo', '--project=build-xxxx']

 - name: 'gcr.io/cloud-builders/gcloud'
   args: ['functions', 'deploy', 'some_function', '--trigger-http', '--runtime', 'python37', '--project', 'prod-yyyy']

Я могу развернуть свою функцию на prod с помощью gsutilутилита командной строки с моего ноутбука, и я могу использовать мой cloudbuild.yaml для развертывания этой функции в проекте build . Но я не уверен, какие роли мне нужно назначить для каких учетных записей, чтобы позволить проекту сборки развернуть облачную функцию в проекте prod.

1 Ответ

1 голос
/ 24 октября 2019

Если вы хотите развернуть функцию в проекте prod, то учетная запись службы Cloud Build проекта сборки должна быть добавлена ​​как «Разработчик облачных функций» в проекте prod. Если я правильно понимаю ваше описание, то вы установили его в проекте сборки.

В частности: в консоли GCP, в проекте prod, в разделе IAM> members добавьте нового члена с именем [build-project-id]@cloudbuild.gserviceaccount.com и добавьтероль "Разработчик облачных функций" для этого участника. На этом этапе попытка развертывания может привести к сообщению об ошибке:

ОШИБКА: (gcloud.functions.deploy) ResponseError: status = [403], код = [Запрещено], сообщение = [Отсутствует необходимоеразрешение iam.serviceAccounts.actAs для prod-xxxx@appspot.gserviceaccount.com для проекта prod-xxxx.

Пожалуйста, предоставьте prod-xxxx@appspot.gserviceaccount.com роль role / iam.serviceAccountUser.

Вы можете сделать это, запустив 'привязка add-iam-политики проектов gcloud prod-xxxx --member=prod-xxxx@appspot.gserviceaccount.com --role = role / iam.serviceAccountUser'

Команда, предложенная в сообщении об ошибке, немного неверна. Правильный синтаксис:

gcloud projects add-iam-policy-binding prod-xxxx --member='serviceAccount:[build-project-number]@cloudbuild.gserviceaccount.com' --role='roles/iam.serviceAccountUser'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...