У вызывающего абонента нет разрешения при попытке использовать Google Cloud Storage в Cloud Run. - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь установить проект Node в Google Cloud Run с облачным хранилищем. Я столкнулся с проблемой аутентификации при использовании созданной учетной записи службы.

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

Проблема в том, что когда я успешно развернул приложение в Cloud Run, я получаю следующую ошибку: Error: The caller does not have permission

Это происходит, когда я пытаюсь получить подписанный URL-адрес для загрузки файлов в хранилище.

Я создаю клиент хранилища следующим образом:

const { Storage } = require("@google-cloud/storage");
const storage = new Storage();

... и далее в моем скрипте вызов выглядит следующим образом:

const [url] = await storage
  .bucket(bucketName)
  .file(filename)
  .getSignedUrl(options);

Я настроил следующие разрешения для учетной записи службы IAM:

  • Cloud SQL Client - Может быть, актуально? У меня Cloud SQL успешно работает в развернутой среде.
  • Пользователь учетной записи службы - необходимо использовать ее в качестве учетной записи службы?
  • Создатель объекта хранилища - Мне нужна только возможность создавать подписанные URL-адреса загрузки из этого проекта.

Я также назначил упомянутую учетную запись службы экземпляру Cloud Run через консоль.

Просто Для подтверждения, приложение работает на 100% правильно локально с использованием ключа учетной записи службы JSON, оно просто не работает при работе в облаке Google.

1 Ответ

2 голосов
/ 21 июня 2020

Мне удалось решить проблему. Похоже, что при развертывании в Cloud Run также требуется дополнительное разрешение «Создатель токена сервисной учетной записи» для запуска getSignedUrl. Локально эта роль почему-то не требуется.

...