Google云端存储无需提供凭据即可访问?

时间:2018-03-07 09:26:20

标签: node.js google-cloud-storage

我正在使用Google云端存储,并且有一些存储区包含公开共享的对象。以下截图中的示例。然而,我能够使用NodeJS从本地服务器提供任何服务帐户密钥或身份验证令牌来检索文件。

enter image description here

我无法通过网址格式从浏览器访问文件(这很好): https://www.googleapis.com/storage/v1/b/mygcstestbucket/o/20180221164035-user-IMG_0737.JPG https://storage.googleapis.com/mygcstestbucket/20180221164035-user-IMG_0737.JPG

但是,当我尝试使用没有凭据从NodeJS检索文件时,令人惊讶的是可以将文件下载到磁盘。我检查了process.env以确保没有GOOGLE_AUTHENTICATION_CREDENTIALS或任何pem键,甚至还在命令行上执行了gcloud auth revoke - 以确保我已经注销,但我仍然可以下载文件。这是否意味着我的GCS存储桶中的文件没有得到妥善保护?或者我以一种我不知道的方式使用GCS API以某种方式验证自己?

非常感谢任何指导或指导!!

// Imports the Google Cloud client library
const Storage = require('@google-cloud/storage');

// Your Google Cloud Platform project ID
const projectId = [projectId];

// Creates a client
const storage = new Storage({
  projectId: projectId
});

// The name for the new bucket
const bucketName = 'mygcstestbucket';
var userBucket = storage.bucket(bucketName);

app.get('/getFile', function(req, res){
    let fileName = '20180221164035-user-IMG_0737.JPG';
    var file = userBucket.file(fileName);
    const options = {
        destination: `${__dirname}/temp/${fileName}`
    }
    file.download(options, function(err){
        if(err) return console.log('could not download due to error: ', err);
        console.log('File completed');
        res.json("File download completed");
    })
})

2 个答案:

答案 0 :(得分:1)

客户端库使用Application Default Credentials对Google API进行身份验证。因此,当您未通过GOOGLE_APPLICATION_CREDENTIALS明确使用特定服务帐户时,该库将使用默认凭据。您可以在documentation找到更多详细信息。

根据您的示例,我假设应用程序默认凭据用于获取这些文件。

最后,您可以随时运行echo $GOOGLE_APPLICATION_CREDENTIALS(或适用于您的操作系统)以确认您是否指出了服务帐户的变量路径。

答案 1 :(得分:0)

在 GCP 中为项目创建新的服务帐户并下载 JSON 文件。然后设置环境变量如下:

    $env:GCLOUD_PROJECT="YOUR PROJECT ID"
    $env:GOOGLE_APPLICATION_CREDENTIALS="YOUR_PATH_TO_JSON_ON_LOCAL"