![](/img/trans.png)
[英]Terraform throws Error setting IAM policy for service account ... Permission iam.serviceAccounts.setIamPolicy is required
[英]Unable to assign iam.serviceAccounts.signBlob permission
TLDR; 我在为服务帐号分配 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
在引用的文档中,它说将服务帐户令牌创建者角色添加到服务帐户。 我已经添加了该角色(以及尝试服务帐户管理员无济于事。
我可以验证我的权限似乎设置正确,当我运行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
对其进行了验证,因此看起来像死胡同。
Firebase 在其文档中提到了这个错误:
https://firebase.google.com/docs/auth/admin/create-custom-tokens#failed_to_determine_service_account
您必须通过 JSON 配置文件正确初始化您的应用程序。
一个简单的解决方法是:
几分钟后,您的项目将能够创建签名令牌。
服务帐户的sign
功能需要iam.serviceAccounts.signBlob
权限。 此权限包含在服务帐户令牌角色roles/iam.serviceAccountTokenCreator
您可以在“项目”级别或“服务帐户”级别分配此角色。 这就是为什么你会看到不同的结果。 在项目级别分配角色会影响所有服务帐号的权限。 在服务帐户上分配角色只会影响该服务帐户。
您的问题的关键是调用者在服务帐户dashboard@appspot.gserviceaccount.com
上没有这个角色。 您已授予服务帐户权限,而不是调用方。 查看用于设置 Firebase SDK 的服务帐户的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.