Какие предопределенные роли IAM необходимы сервисному аккаунту для выполнения краткого руководства Google Cloud Run: сборка и развертывание?

Я хочу сравнить Google Cloud Run с Google App Engine и Google Cloud Functions. Cloud Run Краткое руководство: сборка и развертывание кажется хорошей отправной точкой.

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

Вопрос:

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

gcloud builds submit --tag gcr.io/{PROJECT-ID}/helloworld
gcloud beta run deploy --image gcr.io/{PROJECT-ID}/helloworld

Первая команда завершается с ошибкой (на первый взгляд ложной) при запуске через учетную запись службы с двумя ролями: Cloud Build Service Account и Cloud Run Admin. Я не запускал вторую команду.

Обновлено: ошибка не является ложной. Команда создает образ и копирует его в реестр контейнеров проекта, а затем не может распечатать журнал сборки на консоли (недостаточно прав).

Обновлено: я выполнил вторую команду. Это не удается с Permission 'iam.serviceaccounts.actAs' denied on {service-account}. Я мог бы решить эту проблему, назначив роль Service Account User. Но это позволяет команде развертывания действовать как учетная запись службы времени выполнения проекта, которая имеет роль по умолчанию. Создание служебной учетной записи с (фактически) ролями Editor и Viewer не намного лучше, чем использование моих учетных данных приложения по умолчанию.

Поэтому я должен изменить разрешения учетной записи службы времени выполнения. В документах EditorИдентификация службы говорится о конфигурации наименее привилегированного доступа:

This changes the permissions for all services in a project, as well as Compute Engine and Google Kubernetes Engine instances. Therefore, the minimum set of permissions must contain the permissions required for Cloud Run, Compute Engine, and Google Kubernetes Engine in a project.

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

Что я сделал до сих пор:

  1. Используйте консоль разработчика, чтобы создать новый проект GCP.
  2. Используйте консоль разработчика, чтобы создать новую учетную запись службы с ролью Cloud Run.
  3. Используйте консоль разработчика, чтобы создать (и загрузить) ключ для учетной записи службы.
  4. Создайте (и активируйте) конфигурацию Cloud Run Admin для проекта
$ gcloud config list
[core]
account = {service-account-name}@{project-id}.iam.gserviceaccount.com
disable_usage_reporting = True
project = {project-id}
[run]
region = us-central1
  1. Активируйте сервисный аккаунт с помощью скачанного ключа
  2. Используйте консоль разработчика, чтобы включить gcloud
  3. Используйте консоль разработчика, чтобы включить Cloud Run APIContainer RegistrySettings
  4. Создайте образец приложения и Container Analysis API в соответствии с инструкциями в документации по быстрому запуску.
  5. Беги Dockerfile
    ... не удается из-за отсутствия разрешений на сборку в облаке
  6. Добавьте роль gcloud builds submit --tag gcr.io/[PROJECT-ID]/helloworld в сервисный аккаунт и повторно отправьте сборку
    ... терпит неудачу из-за отсутствия разрешений на хранение. Я не обратил пристального внимания на то, что пропало.
  7. Добавьте роль Cloud Build Editor в сервисный аккаунт и повторно отправьте сборку
    ...сбой из-за отсутствия прав доступа ведро к хранилищу
  8. Замените роль Storage Object Admin сервисного аккаунта на роль Storage Object Admin и повторно отправьте сборку
    . ... терпит неудачу с
Error: (gcloud.builds.submit) HTTPError 403:
<?xml version='1.0' encoding='UTF-8'?>
<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>
{service-account-name} does not have storage.objects.get access to
{number}.cloudbuild-logs.googleusercontent.com/log-{uuid}.txt.</Details>
</Error>
  1. Изучите набор доступных ролей и автоматически созданные сервисные учетные записи проекта. Поймите, что роль Storage Admin имеет гораздо больше разрешений, чем роль Cloud Build Service Account. Это меня удивило; устаревшая роль Cloud Build Editor имеет «Редактировать доступ ко всем ресурсам».
  2. Удалить роли Editor и Cloud Build Editor из сервисного аккаунта
  3. Добавьте роль Storage Admin в сервисный аккаунт и повторно отправьте сборку
    ... не работает с той же ошибкой Cloud Build Service Account (отсутствует доступ к файлу журнала)
  4. Проверьте HTTP 403Cloud Build в консоли разработчика; найти удачные сборки!
  5. Проверьте HistoryContainer Registry в консоли разработчика; найти изображения!

На этом я думаю, что могу закончить Google Cloud Run Краткое руководство: сборка и развертывание. Но я не хочу продолжать с (кажущимися ложными) сообщениями об ошибках в моем процессе сборки.

Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
7
0
4 544
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Согласно https://cloud.google.com/cloud-build/docs/securing-builds/set-service-account-permissions

«Учетная запись службы Cloud Build» — Cloud Build выполняет ваши сборки, используя учетную запись службы, специальную учетную запись Google, которая выполняет сборки от вашего имени.

Чтобы вызвать отправить сборку gcloud --tag gcr.io/path

Редактировать: Пожалуйста, «Редактор Cloud Build» и «Просмотр» вашей служебной учетной записи, которая запускает сборку, это связано с текущей моделью авторизации Cloud Build.

Простите за неудобства.

Как объяснялось выше, на этапе сборки регистрировались сообщения об ошибках, когда учетная запись службы имела роль Cloud Build Editor. Кроме того, 19 разрешений, назначенных роли Cloud Build Service Account, включают в себя все 6 разрешений, назначенных роли Cloud Build Edtior.

Brandon Barry 10.04.2019 23:16

После проб и ошибок я, наконец, обнаружил, что нам также нужен «Просмотрщик». Пожалуйста, попробуйте.

wlhee 11.04.2019 02:07

Я изменил набор ролей сервисного аккаунта на Cloud Build Editor, Viewer и Cloud Run Admin. Не удалось выполнить команду сборки: gcloud builds submit --tag gcr.io/{project-id}/helloworld Creating temporary tarball [...] Uploading tarball of [...] ERROR: (gcloud.builds.submit) 403 Could not upload file [...] {service-account}.iam.gserviceaccount.com does not have storage.objects.create access to {project-id}_cloudbuild/source/1554944244.93-6c6779bcbc0744e‌​28e36c9047542e6c4.tg‌​z. Команда не инициировала сборку.

Brandon Barry 11.04.2019 03:23

Я вернулся к Cloud Build Service Account и Cloud Run Admin. Не удалось выполнить команду сборки: gcloud builds submit --tag gcr.io/try-cloud-run-237202/helloworld Creating temporary tarball [...] Uploading tarball of [...] Created [..] Logs are available at [...] ERROR: (gcloud.builds.submit) HTTPError 403: [...] {service-account}.iam.gserviceaccount.com does not have storage.objects.get access to {number}.cloudbuild-logs.googleusercontent.com/log-{uuid}.tx‌​t. [...] С этими ролями сборка была запущена и выполнена успешно. Новый образ Docker находится в реестре контейнеров.

Brandon Barry 11.04.2019 03:24

Наконец, я изменил набор ролей сервисных учетных записей на Cloud Build Service Account, Viewer и Cloud Run Admin. Команда сборки выполнена успешно, распечатав журнал сборки, а не сообщение об ошибке.

Brandon Barry 11.04.2019 03:25

Я удивлен, что «Редактор Cloud Build» + «Просмотрщик» не создали изображение? Я полагаю, что для развертывания в Cloud Run вам также нужны «Администратор Cloud Run» и «Пользователь учетной записи службы».

wlhee 11.04.2019 04:44
Ответ принят как подходящий

Cloud Run PM здесь:

Мы можем разбить это на два набора необходимых разрешений:

# build a container image
gcloud builds submit --tag gcr.io/{PROJECT_ID}/helloworld

Тебе понадобиться:

  1. Cloud Build Editor и Cloud Build Viewer (согласно @wlhee)
# deploy a container image
gcloud beta run deploy --image gcr.io/{PROJECT_ID}/helloworld

Вам нужно сделать две вещи:

  1. Предоставьте своей учетной записи службы роль Cloud Run Deployer (если вы хотите изменить политику IAM, скажем, для публичного развертывания службы, вам понадобится Cloud Run Admin).
  2. Следуйте Дополнительные инструкции по развертыванию, чтобы предоставить этой учетной записи службы возможность развертывания вашей учетной записи службы.
#1
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member = "serviceAccount:{service-account-name}@{project-id}.iam.gserviceaccount.com" \
  --role = "roles/run.developer"

#2
gcloud iam service-accounts add-iam-policy-binding \
  [email protected] \
  --member = "serviceAccount:{service-account-name}@{project-id}.iam.gserviceaccount.com" \
  --role = "roles/iam.serviceAccountUser"

Обновлено: Как уже отмечалось, последний предоставляет вашей учетной записи службы возможность actAs учетной записи службы среды выполнения. Какая роль у этой служебной учетной записи, зависит от того, к чему ей нужно получить доступ: если единственная вещь, к которой имеет доступ Run/GKE/GCE, — это GCS, тогда дайте ей что-то вроде Storage Object Viewer вместо Editor. Мы также работаем над удостоверениями для каждой службы, поэтому вы можете создать учетную запись службы и «переопределить» значение по умолчанию чем-то, что имеет наименьшие привилегии.

Другие вопросы по теме