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

GoogleStorage 403 : xxx-iam.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket

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

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

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

  • 删除旧服务帐户中的所有权利
  • 卸下链接的访问密钥
  • 删除服务帐户本身
  • 在Firebase控制台上,我可以看到该服务帐户已删除,因此我从那里创建了一个新帐户。
    然后在google-cloud控制台上:

    • 在IAM部分中,我将角色" Storage Admin "添加到我的服务帐户中
    • 我已将我的服务帐户作为成员添加到我的存储桶中,其角色设置为" Storage Admin "(以下操作:https://docs.cloudera.com/HDPDocuments/HDP2/HDP-2.6.5/bk_cloud-data-访问/内容/edit-bucket-permissions.html)

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

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

    我已将我的存储桶的访问控制设置为Uniform,并确保我的服务访问权限在其角色为

    的成员中

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

    在firebase控制台中,我输入了:

    的原始规则

    1
    2
    3
    4
    5
    6
    7
    8
    9
    rules_version = '2';

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

    我像这样使用Node包:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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
    const bucket = storage.bucket('users');

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