简述:我在为服务帐户分配IAM权限时遇到了问题。
我正在构建一个测试,涉及使用Firebase Auth创建自定义令牌。当我执行以下操作时:
const token = await admin.auth().createCustomToken('test', {
isAdmin: true,
})
出现以下错误
Permission iam.serviceAccounts.signBlob is required to perform
this operation on service account
projects/-/serviceAccounts/dashboard@appspot.gserviceaccount.com.;
Please refer to
https://firebase.google.com/docs/auth/admin/create-custom-tokens
for more details on how to use and troubleshoot this feature
在参考文档中提到要将Service Account Token Creator角色添加到服务帐号中。我已经添加了该角色(以及尝试过添加Service Account Admin,但无济于事)。当我运行
gcloud projects get-iam-policy project
时,可以看到我的权限似乎设置正确,我的服务帐号已附加到所需的角色上。- members:
- serviceAccount:dashboard@appspot.gserviceaccount.com
role: roles/iam.serviceAccountTokenCreator
然而,如果我查看特定的服务帐户,它似乎是空的,这与我的错误相符:
gcloud iam service-accounts get-iam-policy dashboard@appspot.gserviceaccount.com
etag: ACAB
- 为什么这两个命令和云控制台显示的信息不同?
我猜测导致我的服务帐户权限显示为空白的原因是罪魁祸首,但我不确定在哪里进一步调试。在我看来,唯一的区别是一个命令带有一个项目,但我使用项目ID初始化我的Firebase应用程序,并通过(firebase-admin).apps [0].options
进行了验证,所以它似乎是一条死路。
initializeApp
提供的服务帐号难道不是代码使用的服务帐号吗?我正在使用同一个服务帐号,并在查看初始化应用程序选项时看到它被列出。admin.initializeApp({ projectId:project, serviceAccountId: dashboard@appspot.gserviceaccount.com', });
- tristansokolgcloud auth application default
和我的用户帐户,因此这个初始化看起来与我初始化存储、pubsub等的方式类似。Firebase管理员是否有不同于其他SDK的限制? - tristansokol