Поскольку здесь есть различные функции, такие как указание настраиваемой учетной записи службы для идентификации кластера и использование настраиваемых образов, можно предпринять некоторые шаги, чтобы сузить область, где может быть основная проблема:
- Проверьте, работает ли какой-либо вызов API с контролем доступа для учетной записи службы с широкими разрешениями, такими как
Project Viewer
, например, и пытается gcloud compute instances list
, gcloud compute regions list
и gcloud dataproc clusters list
- это сузит вниз, если речь идет о ролях Datapro c -specifi c или если учетная запись службы по какой-то причине не работает. - Если кажется, что она работает для других API, но не для Datapro c API , попробуйте инструмент Policy Troubleshooter , пока не получите основные типы запросов c «просмотрщика», работающие с Datapro c API
- Если 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, которое включает роль пользователя образа.