![](/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.