Как подключиться к облачному хранилищу Google с помощью облачных функций Google NodeJS - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть следующий пример кода, который получает bufferedImage вместе с его mimeType, а затем загружает его в Google Cloud Storage.

Все работает нормально, но по какой-то причине моя функция Google Cloud получает ошибку 403 отAPI хранилища.

Что мне нужно сделать, чтобы моя функция GC имела доступ к хранилищу GC?

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

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

// Creates a client
const storage = new Storage();

// Lists all buckets in the current project
const buckets = storage.getBuckets();

exports.uploadImage = (bucketName, fileName, imageBuffer, mimeType) => {
  return new Promise((resolve, reject) => {

    let bucket = storage.bucket(bucketName);

    let file = bucket.file(fileName);
    file.save(imageBuffer,
        {
            metadata: { contentType: `image/${mimeType}` },
        },
        ((error) => {
            error ? reject(error) : resolve()
        })
    );
  })
}

вот ошибка, которую я получаю

{"код": 403, "ошибки": [{"домен": "глобальный", "причина"":" запрещено "," сообщение ":" dire-galaxy-221521@appspot.gserviceaccount.com не имеет storage.objects.create доступ к blog / e33f9c9d-65f0-4a7f-8332-29846f770e6d. "}]," message":" dire-galaxy-221521@appspot.gserviceaccount.com не имеет storage.objects.create для доступа к блогу / e33f9c9d-65f0-4a7f-8332-29846f770e6d. "}

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Так что, видимо, в Google Cloud есть некоторые глюки.По какой-то причине мне не разрешено писать в корзину, если она еще не создана.Я изменил bucketName на уже существующее ведро и получил ответ 200.Google Cloud должен был отправить 404 ответ вместо 403. 403 вводит в заблуждение, потому что 1. Мой сервис имеет привилегии создания корзины и 2. Корзина никогда не существовала.Это означает, что 404 Not Found будет подходящим ответом.Надеюсь, это кому-нибудь поможет.

0 голосов
/ 18 февраля 2019

Облачная функция (CF) выполняется определенной учетной записью службы (в вашем случае directed-galaxy-221521@appspot.gserviceaccount.com).От Учетная запись службы времени выполнения :

Во время выполнения функции Cloud Functions использует учетную запись службы PROJECT_ID@appspot.gserviceaccount.com в качестве личности.

Поскольку выПолучение ошибки 403 при доступе к вашим корзинам / файлам означает, что они не являются общедоступными, поэтому вам необходимо предоставить вышеуказанной учетной записи службы необходимые права доступа (по крайней мере storage.objects.create, указанные в сообщении об ошибке) в соответствии сна Опцию контроля доступа , которую вы выбрали и настроили для своего хранилища.

...