簡體   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