Невозможно создать кластер Datapro c со служебной учетной записью - PullRequest
2 голосов
/ 07 мая 2020

Я новичок в облаке Google и оцениваю кластер Datapro c, и одним из основных требований является динамическое создание кластера и обработка заданий. Для чтения различных документов и ссылки я попытался создать учетную запись службы и добавил роли, начиная с «Datapro c Editor».

Я создал файл ключа и активировал учетную запись службы

gcloud auth activate-service-account --key-file=<Key File>

и попробуйте создать кластер

gcloud beta dataproc clusters create jill-cluster \
    --enable-component-gateway \
    --subnet default \
    --zone europe-west3-b \
    --region europe-west3 \
    --master-machine-type n1-standard-4 \
    --master-boot-disk-size 50 \
    --num-workers 2 \
    --worker-machine-type n1-standard-4 \
    --worker-boot-disk-type pd-ssd \
    --worker-boot-disk-size 100 \
    --image https://compute.googleapis.com/compute/v1/projects/poc/global/images/poc-1-5-1-debina10 \
    --scopes 'https://www.googleapis.com/auth/cloud-platform' \
    --project poc \
    --verbosity info \
    --autoscaling-policy=poc-auto-scale-policy \
    --service-account=<Service account>

Я получаю эту ошибку

{
    "code": 403,
    "message": "Not authorized to requested resource.",
    "status": "PERMISSION_DENIED"
}

, и я начал добавлять новые роли в учетную запись службы и закончил вверх, как показано ниже enter image description here, но по-прежнему не удается создать кластер. Я не совсем понимаю, что мне не хватает. Я пробовал командную строку, а также программный подход c, который привел к тому же. К сожалению, я не смог получить достаточно информации из журнала.

---------- Обновление ---------------

Думаю, я упустил некоторую информацию в своем первоначальном вопросе. У меня есть учетная запись пользователя с ролью владельца, и в настоящее время я использую эту учетную запись для экспериментов, и с ее помощью я могу создавать кластер и отправлять задания. Поэтому я думаю, что в проекте есть необходимые роли.

Теперь я хочу перейти к автоматизации и хочу достичь

  1. Управление кластером с помощью учетной записи службы
  2. Должен иметь возможность отправлять и запускать задания и управлять ими.

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

1 Ответ

0 голосов
/ 07 мая 2020

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

  1. Проверьте, работает ли какой-либо вызов API с контролем доступа для учетной записи службы с широкими разрешениями, такими как Project Viewer, например, и пытается gcloud compute instances list, gcloud compute regions list и gcloud dataproc clusters list - это сузит вниз, если речь идет о ролях Datapro c -specifi c или если учетная запись службы по какой-то причине не работает.
  2. Если кажется, что она работает для других API, но не для Datapro c API , попробуйте инструмент Policy Troubleshooter , пока не получите основные типы запросов c «просмотрщика», работающие с Datapro c API
  3. Если Datapro «по умолчанию» c кластер может быть создан, но один с настраиваемыми параметрами не работает, вам может потребоваться добавить дополнительные разрешения, такие как Service Account User для указанной учетной записи службы идентификации кластера, Compute Network User f или кросс-проектные сети, Compute Image User для кросс-проектных пользовательских изображений или Storage Object Creator для кросс-проектных или пользовательских конфигурационных пакетов GCS. Обычно ожидается, что ошибки в этих типах разрешений будут предоставлять подробные сообщения об ошибках от Datapro c API, по сравнению с базовыми c "внешними" ошибками доступа, описанными в № 1, которые могут иметь более общие сообщения об ошибках c. как вы видели («Нет прав на запрашиваемый ресурс»).

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

gcloud projects get-iam-policy $PROJECT

Чтобы убедиться, что ваш список всех этих ролей действительно отображается там, где members: перечисляет вашу учетную запись службы. Вы должны не ожидать, что такие вещи, как Dataproc Editor, et c, появятся в самой политике ресурсов учетной записи службы, например:

gcloud iam service-accounts get-iam-policy $SERVICE_ACCOUNT

должен вернуть пустой ответ с только поле etag:.

При использовании настраиваемых учетных записей служб также важно понимать различия между различными задействованными ролями.

Прежде всего необходимо уточнить, что Datapro c "worker" и создатель / пользователь Datapro c обычно не являются одним и тем же лицом, хотя могут быть. Таким образом, если вы намерены использовать учетную запись службы для создания Datapro c кластеров, Dataproc Editor является правильным, но если вы также намерены сделать так, чтобы сам кластер использовал идентификатор учетной записи службы, вам также необходимо предоставить учетной записи службы роль Dataproc Worker: https://cloud.google.com/dataproc/docs/concepts/iam/dataproc-principals

В этом ключе, если вы пытаетесь использовать учетную запись службы для создания кластера, который затем действует как указанная учетная запись службы, даже если указанная учетная запись является «самой собой», вам необходимо предоставить роль Service Account User вашей учетной записи службы либо на уровне проекта (если вы согласны предоставить ей широкие разрешения actAs в проекте) или только на одной учетной записи службы.

Поскольку похоже, что вы используете настраиваемый образ, при условии, что вы следовали расширенным инструкциям по созданию Datapro c настраиваемого образа , вам также может потребоваться предоставить своей учетной записи службы Роль пользователя Compute Image .

В дополнение к этому, если вы используете изображение в другом проекте, вам может потребоваться проверить учетную запись службы формы service- [номер-проекта] @datapro c -accounts.iam.gserviceaccount.com и, если ваш проект был создан до ~ сентября 2019 г., также устаревшая учетная запись службы [project-number]@cloudservices.gserviceaccount.com. Им нужно будет предоставить Compute Image user role на изображениях или в проекте, содержащем эти изображения. Для образов того же проекта существующая Dataproc Service Agent роль должна уже включать разрешение instanceAdmin, которое включает роль пользователя образа.

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