Google 无法访问云存储报告下载

Google Cloud Storage report download no access

我正在 运行ning 节点从 google 云存储下载销售报告。 我得到了 credentials.json 文件。现在的问题是,每次我 运行 我的应用程序都会收到“xxxxxxx@gmail.com”没有 storage.objects.get 访问 Google 云存储对象的权限。

是的,此电子邮件未在 google 云存储中注册或授予权限,但它应该单独使用凭据,不是吗? 凭据直接来自 google 云存储并具有以下信息: 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);

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

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

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

    一样明确
    const storage = new Storage({projectId: 'your-project-id', keyFilename: '/path/to/keyfile.json'});
    

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

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

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

Creating and managing service account keys

此外,您在以下行中指定的参数有误:

const storage = new Storage({projectId, key});

替换为:

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