firebase - 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 方法也是如此。
在另一篇文章中,我看到有人的解决方法是删除他的服务帐户并重新创建一个,所以我尝试了这个:
- 从旧服务帐户中删除所有权利
- 删除链接的访问密钥
- 删除服务帐户本身
在 Firebase 控制台上,我可以看到服务帐户已被删除,因此我从那里创建了一个新帐户。然后在谷歌云控制台上:
- 在 IAM 部分,我将角色“存储管理员”添加到我的服务帐户
- 我将我的服务帐户作为成员添加到我的存储桶中,角色设置为“存储管理员”(如下:https ://docs.cloudera.com/HDPDocuments/HDP2/HDP-2.6.5/bk_cloud-data-access/内容/编辑桶权限.html )
总而言之,我现在有一个具有以下角色的服务帐户:
- 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));
如果有人对它可能来自哪里有任何暗示,我将非常感谢您的帮助。
谢谢
解决方案
好的,如果有人犯了与我相同的错误,我将发布答案。
我使用这一行是因为我想从我的默认存储桶中访问文件夹“用户”。
const bucket = storage.bucket('users');
该参数用于指定不同的存储桶,而不是文件夹。好吧,我没有一个名为“用户”的存储桶,所以它触发了 403 禁止访问错误,这误导我认为这是一个角色问题。
推荐阅读
- c# - ASP.NET Core 3.1 中 RDLC 中的子报表
- linux - 如果所有新选项都被选为模块,我可以跳过更新 /boot
- google-cloud-platform - 在 terraform 中修改 gcp 项目是否会修改资源
- php - Laravel v8 设置会话语言环境不工作(代客)
- python - 如何使此代码不使用列表或大量条件语句?
- c# - 使用附加列扩展 UserRole 主键 ASP.NET Core EF
- bitwise-xor - 如何解决按位不等式?
- c++ - 在 C++ 中具有多个目标的 Makefile
- flutter - 使用颤振检查连接的客户端到个人热点
- prolog - Prolog:如何从递归谓词中的独立元素构建列表