如何从 Google Cloud Functions NodeJS 连接到 Google Cloud Storage

Mig*_*der 5 node.js google-cloud-storage google-cloud-functions

我有以下代码示例,它接收一个 bufferedImage 及其 mimeType,然后将其上传到 Google Cloud Storage。

一切正常,但由于某种原因,我的 Google Cloud Function 从 Storage API 收到了 403 错误。

我该怎么做才能让我的 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()
        })
    );
  })
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误

{"code":403,"errors":[{"domain":"global","re​​ason":"forbidden","message":"directed-galaxy-221521@appspot.gserviceaccount.com 没有存储空间。 objects.create 访问 blog/e33f9c9d-65f0-4a7f-8332-29846f770e6d."}],"message":"directed-galaxy-221521@appspot.gserviceaccount.com 没有 storage.objects.create 访问 blog/e33f9c9d -65f0-4a7f-8332-29846f770e6d。"}

Dan*_*scu 5

云功能 (CF) 由特定服务帐户(在您的情况下directed-galaxy-221521@appspot.gserviceaccount.com)执行。从运行时服务帐户

在函数执行期间,Cloud Functions 使用服务帐号 PROJECT_ID@appspot.gserviceaccount.com作为身份。

由于您在访问存储桶/文件时收到 403 错误,这意味着它们不可公开访问,因此您需要为上述服务帐户授予必要的访问权限(至少storage.objects.create,在错误消息中提到)根据您为存储选择和配置的访问控制选项