Добавление сервисной учетной записи в облачную функцию на GCP - PullRequest
0 голосов
/ 24 сентября 2019

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

Я добавил функциональность в один проект, используя это руководство: https://cloud.google.com/scheduler/docs/start-and-stop-compute-engine-instances-on-a-schedule

Он закрывает / запускает виртуальные машины с правильным тегом.

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

Я получил служебную учетную запись от облачного администратора, которая имеет доступ ко всем проектам, и добавил ее в IAM, а также получил роль владельца.Но проблема в том, что я не могу назначить служебную учетную запись для функции.

Что-то мне не хватает?Или есть более простой способ сделать то, что я пытаюсь сделать?

1 Ответ

2 голосов
/ 24 сентября 2019

Самый простой способ - предоставить служебной учетной записи, используемой этой облачной функцией, доступ к другим проектам.Вам просто нужно перейти к другим проектам и добавить эту учетную запись службы в раздел IAM и дать ей необходимые разрешения, например, compute.admin в этом случае.

Обратите внимание, что по умолчанию Cloud Functions используетУчетная запись службы App Engine по умолчанию, которая может быть вам неудобна, поскольку приложению App Engine в проекте вашей облачной функции также будет предоставлена ​​роль compute.admin в других проектах.

Я бы рекомендовал создать выделенную учетную запись службы для этого варианта использования (в том же проекте, что и ваша функция) и назначить ее функции, а затем добавить ее в качестве участника других проектов.

Затем в облачной функции вам нужно будет запускать код для каждого проекта, над которым вы хотите работать.Вы можете создать отдельный клиентский объект для каждого, указав Id проекта в качестве опции конструктора, например:

const compute = new Compute({
    projectId: 'your-project-id'
});

Пока вы выполняете цикл только через виртуальные машины в текущем проекте, в котором запускается функция.

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

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