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禁止访问错误,使我误以为这是一个角色问题。