繁体   English   中英

无法分配 iam.serviceAccounts.signBlob 权限

[英]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 配置文件正确初始化您的应用程序。

一个简单的解决方法是:

  1. 转到https://console.cloud.google.com/iam-admin/iam?project=PROJECT_NAME
  2. 编辑您的默认服务帐户。
  3. 添加角色 Service Account Token Creator

几分钟后,您的项目将能够创建签名令牌。

服务帐户的sign功能需要iam.serviceAccounts.signBlob权限。 此权限包含在服务帐户令牌角色roles/iam.serviceAccountTokenCreator

您可以在“项目”级别或“服务帐户”级别分配此角色。 这就是为什么你会看到不同的结果。 在项目级别分配角色会影响所有服务帐号的权限。 在服务帐户上分配角色只会影响该服务帐户。

您的问题的关键是调用者在服务帐户dashboard@appspot.gserviceaccount.com上没有这个角色。 您已授予服务帐户权限,而不是调用方。 查看用于设置 Firebase SDK 的服务帐户的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM