GoogleStorage 403:xxx-iam.gserviceaccount.com无权访问Google Cloud Storage存储桶的storage.objects.list

时间:2020-07-27 16:30:36

标签: firebase google-cloud-platform google-cloud-storage firebase-admin

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

无论我尝试什么,都会收到403错误消息: [MY_SERVICE_ACCOUNT] .iam.gserviceaccount.com无法访问Google Cloud Storage存储桶的storage.objects.list 。 .get方法也是如此。

在另一篇文章中,我看到某人的解决方法是删除其服务帐户并重新创建一个,因此我尝试了此操作:

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

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

  • 在“ IAM”部分中,我向服务帐户添加了“存储管理员”角色
  • 我已将我的服务帐户作为成员添加到我的存储桶中,其角色设置为“存储管理员”(以下为Flexible File Writer

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

  • Firebase Admin SDK管理员服务代理
  • 存储管理员

我已将我的存储桶的访问控制设置为“统一”,并确保我的服务访问位于角色为的成员中。

  • 存储管理员
  • Firebase Admin SDK管理员服务代理

在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));

如果有人对它的来源有任何暗示,我将非常感谢您的帮助。

谢谢

1 个答案:

答案 0 :(得分:2)

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

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

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

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