TLDR;我在为服务帐号分配 IAM 权限时遇到问题。
我正在构建一个测试,涉及使用 firebase Auth 生成自定义令牌。当我打:
const token = await admin.auth().createCustomToken('test', {
isAdmin: true,
})
Run Code Online (Sandbox Code Playgroud)
抛出以下错误
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
Run Code Online (Sandbox Code Playgroud)
在引用的文档中,它说将服务帐户令牌创建者角色添加到服务帐户。我已经添加了该角色(以及尝试服务帐户管理员无济于事。

我可以验证我的权限似乎设置正确,当我运行时,
gcloud projects get-iam-policy project我可以看到我的服务帐户附加到所需的角色
- members:
- serviceAccount:dashboard@appspot.gserviceaccount.com
role: roles/iam.serviceAccountTokenCreator
Run Code Online (Sandbox Code Playgroud)
但是,如果我查看该特定服务帐户,它似乎显示为空,这与我的错误一致:
gcloud iam service-accounts get-iam-policy dashboard@appspot.gserviceaccount.com
etag: ACAB
Run Code Online (Sandbox Code Playgroud)
我认为导致我的服务帐户权限显示为空白的原因是罪魁祸首,但我不确定在哪里进一步调试。在我看来,唯一的区别是一个命令被调用,其中包含一个项目,但我使用项目 ID 初始化了我的 firebase 应用程序,并已对其进行了验证,(firebase-admin).apps[0].options因此这似乎是一个死胡同。
google-cloud-platform firebase-authentication google-iam google-cloud-iam