Невозможно создать собственный токен в облачных функциях Firebase, так как учетная запись службы не имеет необходимых разрешений - PullRequest
0 голосов
/ 07 января 2019

При звонке admin.auth().createCustomToken() я получаю следующую ошибку:

Разрешение iam.serviceAccounts.signBlob требуется для выполнения этой операции над проектами учетной записи службы/-/serviceAccounts/kaleido-maastricht@appspot.gserviceaccount.com .; Пожалуйста, обратитесь к https://firebase.google.com/docs/auth/admin/create-custom-tokens для более подробной информации о том, как использовать и устранять неполадки этой функции.

Итак, я посмотрю на упомянутую учетную запись службы в разделе IAM консоли облачной платформы, и у нее есть роль Editor, которая, действительно, не имеет разрешения signBlob. Какую роль я могу изменить, чтобы исправить это? Я пытался создать пользовательскую роль на основе редактора, но нельзя добавить разрешение createBlob к пользовательским ролям.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

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

Что решило это для меня:

Убедитесь, что вы используете правильный проект Firebase:

firebase use your-project

Убедитесь, что вы используете «учетную запись службы App Engine по умолчанию», например, your-project@appspot.gserviceaccount.com.

Предоставьте роль этой учетной записи службы через gcloud cli:

gcloud projects add-iam-policy-binding your-project --member serviceAccount:your-project@appspot.gserviceaccount.com --role roles/iam.serviceAccountTokenCreator

Развертывание Firebase:

firebase deploy

После этого он работал для меня (но не после настройки через пользовательский интерфейс без развертывания).

Я думаю, что это должно отображать роль в учетной записи службы:

gcloud iam service-accounts get-iam-policy your-project@appspot.gserviceaccount.com --project your-project

Но для меня все равно выдается etag: ACAB, хотя я вижу роль на выходе предыдущей команды и вижу, что роль работает, поскольку теперь она может создавать собственные токены.

0 голосов
/ 07 января 2019

В нижней части страницы документации, на которую вы ссылались, есть раздел для устранения неполадок. Вы направлены на читать там за помощью. Там написано:

Если идентификатор учетной записи службы, используемой для подписи токенов, не имеет Разрешение iam.serviceAccounts.signBlob, вы можете получить сообщение об ошибке как следующее:

Permission iam.serviceAccounts.signBlob is required to perform this
operation on service account
projects/-/serviceAccounts/{your-service-account-id}.

Самый простой способ решить эту проблему - предоставить «токен учетной записи службы». Роль создателя IAM для рассматриваемой служебной учетной записи:

  1. Откройте страницу IAM и администрирования в консоли Google Cloud Platform.
  2. Выберите ваш проект и нажмите «Продолжить».
  3. Щелкните значок редактирования, соответствующий идентификатору учетной записи службы, которую вы хотите обновить.
  4. Нажмите «Добавить еще одну роль».
  5. Введите "Создатель токена учетной записи службы" в фильтр поиска и выберите его из результатов.
  6. Нажмите «Сохранить», чтобы подтвердить предоставление роли.

Обратитесь к документации IAM для получения более подробной информации об этом процессе или изучите как выполнять обновление ролей с помощью инструментов командной строки gcloud.

...