Развертывание в Cloud Run с пользовательской учетной записью службы завершилось ошибкой iam.serviceaccounts.actAs

Я создал пользовательскую учетную запись службы travisci-deployer@PROJECT_ID.iam.gserviceaccount.com в своем проекте и назначил ей роль администратора облачного режима:

gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
   --member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
   --role="roles/run.admin"

Затем я установил эту учетную запись службы в качестве идентификатора для своих команд gcloud:

gcloud auth activate-service-account --key-file=google-key.json

Но когда я запустил команду gcloud beta run deploy, я получил сообщение об ошибке «Учетная запись службы Compute Engine по умолчанию», не имеющая разрешения iam.serviceAccounts.actAs:

gcloud beta run deploy -q "${SERVICE_NAME}" \
  --image="${CONTAINER_IMAGE}" \
  --allow-unauthenticated
Deploying container to Cloud Run service [$APP_NAME] in project [$PROJECT_ID] region [us-central1]
Deploying...
Deployment failed
ERROR: (gcloud.beta.run.deploy) PERMISSION_DENIED: Permission 'iam.serviceaccounts.actAs'
denied on service account [email protected]

Мне это кажется странным (потому что я не использую удостоверение учетной записи службы по умолчанию GCE, хотя оно используется приложением Cloud Run после развертывания приложения).

Значит, для вызова API используется учетная запись [email protected], а не моя travisci-deployer@PROJECT_ID.iam.gserviceacount учетная запись службы, настроенная на gcloud?

Как я могу решить эту проблему?


person Ahmet Alp Balkan    schedule 22.04.2019    source источник


Ответы (3)


TL; DR: добавьте роли администратора Cloud Run и пользователя учетной записи службы в свою учетную запись службы.

Если мы подробно прочитаем документы для справочной страницы IAM для Cloud Run, которая находится здесь, мы находим следующий текст:

Пользователю необходимы следующие разрешения для развертывания новых служб или версий Cloud Run:

  • run.services.create и run.services.update на уровне проекта. Обычно назначается через роль roles/run.admin. Его можно изменить на странице администратора разрешений проекта.
  • iam.serviceAccounts.actAs для учетной записи службы среды выполнения Cloud Run. По умолчанию это [email protected]. Разрешение обычно назначается через роль roles/iam.serviceAccountUser.

Я думаю, что эти дополнительные шаги объясняют историю, как вы ее видите.

person Kolban    schedule 22.04.2019
comment
В частности, если roles/iam.serviceAccountUser не был проверен, пользователь с любым из разрешений run.* мог бы делать все, что может делать учетная запись службы, на которой запущена служба (удерживая код, чтобы сделать это за них, возможно, включая запуск вычислений. ВМ с известными учетными данными). Требование разрешения для actAs учетной записи службы закрывает эту лазейку, делая требуемое разрешение явным. - person E. Anderson; 22.04.2019
comment
Теперь это имеет смысл, спасибо! Я искал развертывание в GAE с помощью учебника Travis CI cloud.google.com / solutions / continuous-delivery-with-travis-ci и не увидел ничего похожего, что меня запутало. - person Ahmet Alp Balkan; 22.04.2019
comment
К вашему сведению: наличия роли Cloud Run Admin недостаточно для развертывания, вам также понадобится роль Cloud Run Service Agent. - person CenterOrbit; 15.02.2020

Добавление ролей администратора Cloud Run и пользователя учетной записи службы в мою учетную запись службы решило эту проблему. См. Шаг 2 в документации здесь: https://cloud.google.com/run/docs/continuous-deployment#continuous

person Tobi    schedule 28.08.2019
comment
Об этом буквально говорит принятый выше ответ. - person Ahmet Alp Balkan; 28.08.2019
comment
Вы правы, но мне было намного проще следовать инструкциям, приведенным в ссылке в моем ответе (и, возможно, также для всех, кто не так знаком с настройкой разрешений IAM). - person Tobi; 29.08.2019

В настоящее время в бета-версии все службы Cloud Run работают как учетная запись вычислений по умолчанию (такая же, как учетная запись службы Google Compute Engine по умолчанию).

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

person Mike Helmick    schedule 22.04.2019