当前位置: 首页 > 知识库问答 >
问题:

如何从Google Cloud Functions NodeJS连接到Google Cloud存储

胡墨竹
2023-03-14

下面的代码示例接收bufferedImage及其mimeType,然后将其上传到Google Cloud Storage。

一切正常,但由于某种原因,我的Google Cloud函数从存储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()
        })
    );
  })
}

这是我得到的错误

{“代码”:403,“错误”:[{“域”:“全局”,“原因”:“禁止”,“消息”:“directed-galaxy-221521@appspot.gserviceaccount.com不具有Storage.objects.Create access to Blog/e33f9c9d-65f0-4a7f-8332-29846f770e6d.”}],“消息”:“directed-galaxy-221521@appspot.gserviceaccount.com不具有Storage.objects.Create access to Blog

共有1个答案

秦弘亮
2023-03-14

云函数(CF)由特定的服务帐户(在您的示例中directed-galaxy-221521@appspot.gserviceaccount.com)执行。来自运行时服务帐户:

在函数执行期间,Cloud Functions使用服务帐户project_id@appspot.gserviceaccount.com作为标识。

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

 类似资料:
  • 我正在尝试使用google cloud sql和云endpoint开发一个应用程序,从google cloud sql文档中我发现google loud sql的连接器不提供任何连接池机制,我尝试在线搜索以获得任何可能的教程或文档,这些教程或文档提供了池机制,但没有结果,google文档只是指出,您应该在finally块中关闭连接,而不需要任何连接池配置。我还遇到了BoneCp、TomcatDbC

  • 我可以使用Sonatype Nexus OSS连接到SSL存储库吗?(例如:https://repository.cloudera.com/artifactory/cloudera-repos/) 我找到这个文档,只有Nexus Pro支持在GUI上添加SSL证书。(http://books.sonatype.com/nexus-book/reference/ssl-sect-client-cer

  • 问题内容: Azure Redis Cache 的 标准 和 高级 定价层提供主/从复制: 标准-由Microsoft管理的具有高可用性SLA的两节点主/辅助配置中的复制缓存。 但是Azure门户仅为单个Redis实例提供连接详细信息(主机名,端口,密钥)。有没有一种方法可以连接到副本中的从属进程? 问题答案: 由于Azure Redis服务代表您管理复制和自动故障转移,因此不要对哪个节点是主节点

  • 我有一台安装了PostgreSQL的服务器。我的所有服务都在容器中工作(docker-compose)。我想从容器中使用我的主机PostgreSQL。但是我有错误: 我的docker compose使用主机网络模式,如下所示: 我的数据库连接URL是:jdbc:postgresql://localhost:5432/shop-bd

  • 我每天都在连接mongo db,它工作得很好,但今天它困扰着我下面的错误,任何人都可以帮我请。 连接到:测试2017-01-10T14:26:13.073 0530警告:连接到127.0.0.1:27017失败,原因:错误号:111连接被拒绝2017-01-10T14:26:13-074 0530错误:无法连接到服务器127.0-0.1:27017(127.0.0.1),在src/mongo/sh

  • 问题内容: 我正在尝试从iPhone连接到远程mysql数据库。我搜索了许多网站,但没有找到任何帮助。如果有人为此工作,请发送解决方案。 问题答案: 假设您具有服务器端编程(例如PHP或Rails)的经验,则可以仅从URL内容创建NSArray,在其中建立与MySQL服务器的连接并以ASCII或XML格式打印所需的结果。 对帮助格式化服务器页面打印的结果也很有用:http : //develope