首页 > 解决方案 > GoogleStorage 403:xxx-iam.gserviceaccount.com 没有 storage.objects.list 访问 Google Cloud Storage 存储桶的权限

问题描述

我似乎无法让 IAM 角色为 Google Cloud Storage 工作。

无论我尝试什么,都会收到 403 错误消息:[MY_SERVICE_ACCOUNT].iam.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket。.get 方法也是如此。

在另一篇文章中,我看到有人的解决方法是删除他的服务帐户并重新创建一个,所以我尝试了这个:

  1. 从旧服务帐户中删除所有权利
  2. 删除链接的访问密钥
  3. 删除服务帐户本身

在 Firebase 控制台上,我可以看到服务帐户已被删除,因此我从那里创建了一个新帐户。然后在谷歌云控制台上:

总而言之,我现在有一个具有以下角色的服务帐户:

我已将存储桶的访问控制设置为统一,并确保我的服务访问权限位于具有以下角色的成员中:

在 firebase 控制台中,我放置了以下原始规则:

rules_version = '2';

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

我像这样使用 Node 包:

var admin = require("firebase-admin");

var serviceAccount = require('./my-sa-config.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  storageBucket: "xxx.appspot.com"
});

const storage = admin.storage();
const bucket = storage.bucket('users');

bucket.getFiles()
.then((data) => {
    console.log(data);
})
.catch((err) => console.error(err));

如果有人对它可能来自哪里有任何暗示,我将非常感谢您的帮助。

谢谢

标签: firebasegoogle-cloud-platformgoogle-cloud-storagefirebase-admin

解决方案


好的,如果有人犯了与我相同的错误,我将发布答案。

我使用这一行是因为我想从我的默认存储桶中访问文件夹“用户”。

const bucket = storage.bucket('users');

该参数用于指定不同的存储桶,而不是文件夹。好吧,我没有一个名为“用户”的存储桶,所以它触发了 403 禁止访问错误,这误导我认为这是一个角色问题。


推荐阅读