我想知道如何授予Google Cloud Platform App Engine项目权限,以便从Google云端存储中提供内容,而无需将Google Cloud Storage存储桶权限设置为“公开共享”。
我的App引擎项目正在运行Node JS。在允许用户查看内容之前,使用Passport-SAML身份验证对用户进行身份验证,因此我不希望通过IAM在单个用户级别设置访问权限。图片和视频目前在我的应用的私人文件夹中提供,只有在用户通过身份验证后才能访问。我希望将这些资产移至Google云端存储,并允许该应用读取文件,而不提供全局访问权限。我该怎么做呢?我没有找到任何文件。
答案 0 :(得分:0)
默认情况下,为项目创建存储桶时,您的应用已经存在 读取和写入所需的所有权限。
每当您创建App Engine应用程序时,都会有一个默认存储桶,它具有以下特权:
默认情况下,它是随应用程序自动创建的,但无论如何,您可以按照之前在其他方面共享的相同链接创建存储桶。如果您需要超过5GB的免费存储空间,您可以将其设为付费存储桶,只需支付超过前5 GB的存储空间。
然后,您可以使用Node {j}的Cloud Storage Client Libraries并查看一些不错的示例(general samples here甚至specific operations over files here)来处理存储桶中的文件
<强> 更新: 强>
这里有一个小工作示例,介绍如何使用云存储客户端库通过验证请求来从私有存储桶中检索图像而不将其公开。它适用于云功能,因此您在App Engine中重现相同的行为应该没有任何问题。它并不能完全满足您的需求,因为它只在桶中显示图像,而不在HTML文件中进行任何集成,但您应该能够从中构建一些东西(我不习惯使用Node.js,不幸的是)。
我希望这也可以提供一些帮助。
'use strict';
const gcs = require('@google-cloud/storage')();
exports.imageServer = function imageSender(req, res) {
let file = gcs.bucket('<YOUR_BUCKET>').file('<YOUR_IMAGE>');
let readStream = file.createReadStream();
res.setHeader("content-type", "image/jpeg");
readStream.pipe(res);
};
答案 1 :(得分:0)
我认为这可能对您有用https://cloud.google.com/storage/docs/access-control/create-signed-urls-program 我似乎无法找到nodejs的API文档(谷歌真的搞乱了他们的文档网址)。这是一些示例代码:
bucket.upload(filename, options, function(err, file, apiResponse) {
var mil = Date.now()+60000;
var config = {
action: 'read',
expires: mil
};
file.getSignedUrl(config, function(err, url) {
if (err) {
return;
}
console.log(url);
});