[英]Google Cloud Storage access without providing credentials?
我正在使用 Google Cloud Storage 并有一些包含未公开共享的对象的存储桶。 下面截图中的示例。 然而,我能够在不提供任何服务帐户密钥或使用 NodeJS 的本地服务器的身份验证令牌的情况下检索文件。
我无法通过 url 格式(这很好)从浏览器访问文件: 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 --all 在命令行上只是为了确保我已注销,但我仍然能够下载文件. 这是否意味着我的 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");
})
})
客户端库使用应用程序默认凭据来验证 Google API。 因此,当您未通过GOOGLE_APPLICATION_CREDENTIALS
明确使用特定服务帐户时,库将使用默认凭据。 您可以在此文档中找到更多详细信息。
根据您的示例,我假设应用程序默认凭据用于获取这些文件。
最后,您始终可以运行echo $GOOGLE_APPLICATION_CREDENTIALS
(或适用于您的操作系统)来确认您是否已将服务帐户的路径指向该变量。
在 GCP 中为项目创建新的服务帐户并下载 JSON 文件。 然后设置环境变量如下:
$env:GCLOUD_PROJECT="YOUR PROJECT ID"
$env:GOOGLE_APPLICATION_CREDENTIALS="YOUR_PATH_TO_JSON_ON_LOCAL"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.