【问题标题】:Access Denied when creating signedUrl on Google Storage Object in App engine在 App 引擎中的 Google 存储对象上创建 signedUrl 时访问被拒绝
【发布时间】:2017-09-29 02:31:19
【问题描述】:

确切的文本:“访问被拒绝。调用者没有 storage.objects.get 访问(url)上的对象”

我目前有 2 个关于谷歌服务的项目。一个是用于将图像上传到谷歌云存储(更是如此 firebase 存储)的 Android/iOS 应用程序的资源。另一个是 node.js 服务器,它检测图像何时上传,并向该图像发送带有 signedUrl 的电子邮件。

node.js 服务器具有以下 google 存储设置和调用的函数:

var storage = require("@google-cloud/storage")({
   keyFilename: "google_secret.json",
   projectId: 'xxxxxxxxxxx' 
});

function getImageFromGcloud(x, y, time, date_string) {
    var bucket = storage.bucket('bucket-name');
    var storage_ref = 'Incomplete_Scans/' + date_string + "/" x + "_" + y + "_" + time + ".jpeg";

    bucket.file(storage_ref).getSignedUrl({
         action: 'read',
         expires: '03-17-2025'
    }, function(err, url) {
         if (err){
             console.error(err);
             return;
         }
         console.log("Sent email");
    });
}

getSignedUrl 提供的链接过去可以使用,单击它会打开一个带有图像的新选项卡。然而直到最近,它才刚刚停止。也许它与权限有关,但是我所做的一切都不起作用。有任何想法吗?

先谢谢你了。

【问题讨论】:

  • 您使用其密钥生成签名 URL 的服务帐户是否可能已失去对该对象的读取权限?
  • 有可能。我可能没有正确执行整个存储桶权限。我已为项目的查看者、编辑者和所有者添加了存储桶权限和对象默认权限,以拥有所有者权限。有什么我想念的吗? @BrandonYarbrough
  • 存储桶权限不是分层的。他们不授予对存储桶内对象的读取权限。 “默认对象权限”将,但仅适用于新对象,并且仅在默认情况下。尝试将服务帐户显式添加到某个对象,看看它是否可以解决问题。
  • 成功了!太感谢了!

标签: node.js google-app-engine google-cloud-storage firebase-storage


【解决方案1】:

如果您收到的是 403(权限被拒绝)而不是 401(身份验证无效),则可能是您正在签署请求的服务帐户由于某种原因失去了对对象的访问权限。添加对该服务帐户的读取权限。

【讨论】:

    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 2019-03-29
    • 2017-08-05
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    相关资源
    最近更新 更多