Правильные разрешения для Google Cloud Build для развертывания облачной функции в отдельном проекте

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

В частности, я добавил роль «Разработчик облачных функций» в учетную запись службы сборки в проекте сборки и роль «Пользователь учетной записи службы IAM» в учетную запись [email protected], как указано в документации и в этот вопрос, при запуске сборки я получаю:

ОШИБКА: (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']

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




Ответы (1)


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

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

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

Предоставьте [email protected] роль role / iam.serviceAccountUser.

Вы можете сделать это, запустив 'gcloud projects add-iam-policy-binding prod-xxxx [email protected] --role = roles / iam.serviceAccountUser'

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

gcloud projects add-iam-policy-binding prod-xxxx --member='serviceAccount:[build-project-number]@cloudbuild.gserviceaccount.com' --role='roles/iam.serviceAccountUser'
person siamsot    schedule 24.10.2019
comment
Это разблокировало меня. Я отредактирую ваш ответ, включив в него конкретные шаги, которые я предпринял, чтобы он был там, когда нужно снова разобраться в этом через 6 месяцев. - person Metropolis; 24.10.2019