谷歌云存储报告下载无法访问

Posted

技术标签:

【中文标题】谷歌云存储报告下载无法访问【英文标题】:Google Cloud Storage report download no access 【发布时间】:2021-11-10 08:55:20 【问题描述】:

我正在运行节点以从谷歌云存储下载销售报告。 我得到了 credentials.json 文件。现在的问题是每次我运行我的应用程序时,我都会得到“xxxxxxx@gmail.com”没有 storage.objects.get access to the Google Cloud Storage object”。

是的,这封电子邮件没有在谷歌云存储上注册或被授予权限,但它应该单独使用凭据,不是吗? 凭据直接来自谷歌云存储,并包含以下信息: client_secret,project_id,redirect_uri,client_id...

我的示例代码:

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



const projectId = 'xxxxxxxxxxxxxxxxxx'
const key = 'credentials.json'
const bucketName = 'pubsite.......'
const destFileName = './test'
const fileName = 'salesreport_2020.zip'

// Creates a client
const storage = new Storage(projectId, key);

async function downloadFile() 
    const options = 
        destination: destFileName,
    ;

    // Downloads the file
    await storage.bucket(bucketName).file(fileName).download(options);

    console.log(
        `gs://$bucketName/$fileName downloaded to $destFileName.`
    );


downloadFile().catch(console.error);

【问题讨论】:

【参考方案1】:

您使用了错误类型的凭据文件。

您的代码是为使用服务帐户 JSON 密钥文件而编写的。您提到凭据文件包含 client_secret。这意味着您正在尝试使用 OAuth 2.0 客户端 ID。

查看文件 credentials.json。它应该包含“type”:“service_account”。如果您在文件开头看到 "installed": 或 "web": ,那么您的凭据有误。

Creating and managing service account keys

另外,您在该行中指定了错误的参数:

const storage = new Storage(projectId, key);

替换为:

const storage = new Storage(projectId: projectId, keyFilename: key);

【讨论】:

【参考方案2】:

因为您看到的是随机 gmail 地址,这可能意味着存储客户端正在使用 Application default credentials 而不是您想要的。前进的道路有两条:

    采用应用程序默认凭据。删除您传递给 Storage 构造函数的选项,而是将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为您的 json 服务帐户文件。

    修复Storage 构造函数以正确传递凭据。问题可能很简单,因为您需要将完整路径传递给凭证文件(即/a/b/c/credentials.json)。可能存储选项没有被正确处理,请尝试明确

    const storage = new Storage(projectId: 'your-project-id', keyFilename: '/path/to/keyfile.json');
    

【讨论】:

以上是关于谷歌云存储报告下载无法访问的主要内容,如果未能解决你的问题,请参考以下文章

REACT APP 无法访问谷歌云运行环境变量

无法识别的配置参数“默认表访问方式”谷歌云

如何在谷歌云存储中启用实时对象访问分析?

授权谷歌云平台服务账号只访问一个谷歌云存储桶

谷歌云功能下载文件并重定向到桶存储

访问谷歌云存储的应用引擎项目的默认凭据?