0

精确的文字:“访问被拒绝来电没有storage.objects.get访问(网址)上反对”访问App Engine中的谷歌存储对象创建signedUrl时拒绝

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

Node.js的服务器具有以下谷歌的存储设置和功能被称为:

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提供的链接来工作,当点击它会打开一个与图像有一个新的标签。但是,最近它刚刚停止。也许它与权限有关,但是我没有做什么工作。有任何想法吗?

谢谢您的高级。

+1

是否有可能使用您用来生成签名URL的密钥的服务帐户已失去对对象的读访问权限? –

+0

这是可能的。我可能不会错误地执行整个桶权限。我已经为查看者,编辑者和项目所有者添加了权限和对象默认权限,以拥有所有者权限。有什么我失踪? @BrandonYarbrough –

+1

桶权限不是分层的。他们不会授予对桶内对象的读取权限。 “默认对象权限”将会,但仅限于新对象,并且仅在默认情况下。尝试将服务帐户显式添加到某个对象以查看它是否修复了问题。 –

回答

1

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