Google Storage - подписанный URL-адрес имеет недостаточные области проверки подлинности - PullRequest
0 голосов
/ 14 января 2019

Я использую библиотеку хранилища google cloud nodejs для загрузки некоторых изображений в облачное хранилище. Это все отлично работает. Затем я пытаюсь сгенерировать подписанный URL-адрес сразу после загрузки файла, используя тот же объект хранения, который сначала загрузил файл, но я получаю следующую ошибку:

Request had insufficient authentication scopes 

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

Код ниже:

const Storage = require('@google-cloud/storage');
storage = new Storage();
storage.bucket(bucketName).upload(event.file.pathName, {
                    // Support for HTTP requests made with `Accept-Encoding: gzip`
                    gzip: true,
                    destination: gcsname,
                    metadata: {
                      // Enable long-lived HTTP caching headers
                      // Use only if the contents of the file will never change
                      // (If the contents will change, use cacheControl: 'no-cache')
                      cacheControl: 'public, max-age=31536000'

                    },
                  }).then(result => {
                      let url = `https://storage.googleapis.com/${bucketName}/${gcsname}`;


                          const options = {
                            action: 'read',
                            expires: Date.now() + 1000 * 60 * 60, // one hour
                          };

                          // Get a signed URL for the file

                          storage.bucket(bucketName).file(gcsname).getSignedUrl(options).then(result => {
                              console.log("generated signed url", result);

                          }).catch(err => {
                            console.log("err occurred", err)

                          })

                      })

Само хранилище не является общедоступным, равно как и объекты, но, насколько я понимаю, я все еще могу генерировать подписанный URL. Само приложение работает на GCP compute engine, следовательно, не передавая никакие параметры new Storage() - фактически передача также приводит к сбою загрузки.

Может кто-нибудь посоветовать, что я делаю не так?

1 Ответ

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

Из-за ограниченного объема информации, которую я имею, вот несколько вещей, которые вы могли бы упустить из-за полученной вами ошибки:

  1. API-интерфейс Identity and Access Management (IAM) должен быть включен для проекта

  2. Учетной записи службы Compute Engine требуется разрешение iam.serviceAccounts.signBlob, доступное роли «Создание токена учетной записи службы».

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

https://cloud.google.com/storage/docs/access-control/signed-urls https://cloud.google.com/storage/docs/access-control/signing-urls-manually

...