我有一个使用firebase auth SDK的Web应用程序。我一直在努力减少访问权限。默认情况下,关联的IAM服务帐户具有项目编辑者角色,这似乎有些危险。但这有效。
我使用IAM管理控制台创建了一个新的服务帐户。然后,我根据应用程序所需的权限(基于updateUser)创建了一个新角色,然后按照通常的来回操作以最小化权限。
但是,无论添加了什么权限,使用此服务帐户通过SDK修改用户均失败。调用firebase-auth create或{{3}}函数会导致类似于以下错误:
FirebaseAuthError:通过“ credential”属性提供给initializeApp()的凭据实现没有足够的权限来访问请求的资源权限
在阳光下尝试完所有选项后,我遇到了一个名为“ Firebase Admin SDK管理员服务代理”的(奇怪的未记录)角色(一个google链接建议此角色的后端ID为roles/firebase.sdkAdminServiceAgent
)。添加此角色可使更新和创建功能正常工作。
谁能解释“ Firebase Admin SDK管理员服务代理”角色的作用?还是有办法确定它添加了哪些权限(因此我可以将其添加到我的自定义IAM角色中)。
答案 0 :(得分:1)
尝试一下 去火力场 设定 用户和权限 将您的帐户设为所有者
这应该使您可以访问所有内容,而不会给您带来任何其他问题。
答案 1 :(得分:1)
截至 2021 年 3 月 7 日,Firebase Admin SDK Administrator Service Agent
角色是授予新项目默认 Firebase Admin 服务帐户的三个角色之一。另外两个角色是 Firebase Authentication Admin
和 Service Account Token Creator
.
虽然有关它的文档很少,但似乎该角色作为一个统一角色存在,用于提供对所有 Firebase 相关产品的完全访问权限,以便在 Firebase Admin SDK 中不受限制地使用。
Firebase Admin SDK Administrator Service Agent
授予的角色
appengine.applications.get
cloudconfig.configs.get
cloudconfig.configs.update
cloudmessaging.messages.create
datastore.databases.get
datastore.databases.list
datastore.entities.allocateIds
datastore.entities.create
datastore.entities.delete
datastore.entities.get
datastore.entities.list
datastore.entities.update
datastore.indexes.get
datastore.indexes.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list
firebase.clients.create
firebase.clients.delete
firebase.clients.get
firebase.clients.list
firebase.clients.update
firebase.projects.get
firebase.projects.update
firebaseauth.configs.create
firebaseauth.configs.get
firebaseauth.configs.update
firebaseauth.users.create
firebaseauth.users.createSession
firebaseauth.users.delete
firebaseauth.users.get
firebaseauth.users.sendEmail
firebaseauth.users.update
firebasedatabase.instances.create
firebasedatabase.instances.get
firebasedatabase.instances.list
firebasedatabase.instances.update
firebasehosting.sites.create
firebasehosting.sites.delete
firebasehosting.sites.get
firebasehosting.sites.list
firebasehosting.sites.update
firebaseml.compressionjobs.create
firebaseml.compressionjobs.delete
firebaseml.compressionjobs.get
firebaseml.compressionjobs.list
firebaseml.compressionjobs.start
firebaseml.compressionjobs.update
firebaseml.models.create
firebaseml.models.delete
firebaseml.models.get
firebaseml.models.list
firebaseml.modelversions.create
firebaseml.modelversions.get
firebaseml.modelversions.list
firebaseml.modelversions.update
firebasenotifications.messages.create
firebasenotifications.messages.delete
firebasenotifications.messages.get
firebasenotifications.messages.list
firebasenotifications.messages.update
firebaserules.releases.get
firebaserules.releases.list
firebaserules.releases.update
firebaserules.rulesets.create
firebaserules.rulesets.delete
firebaserules.rulesets.get
firebaserules.rulesets.list
resourcemanager.projects.get
resourcemanager.projects.list
resourcemanager.projects.update
storage.buckets.create
storage.buckets.delete
storage.buckets.get
storage.buckets.list
storage.buckets.update
storage.objects.create
storage.objects.delete
storage.objects.get
storage.objects.getIamPolicy
storage.objects.list
storage.objects.setIamPolicy
storage.objects.update
Firebase Authentication Admin
授予的角色
firebase.clients.get
firebase.clients.list
firebase.projects.get
firebaseauth.configs.create
firebaseauth.configs.get
firebaseauth.configs.getHashConfig
firebaseauth.configs.update
firebaseauth.users.create
firebaseauth.users.createSession
firebaseauth.users.delete
firebaseauth.users.get
firebaseauth.users.sendEmail
firebaseauth.users.update
resourcemanager.projects.get
resourcemanager.projects.list
Service Account Token Creator
授予的角色
iam.serviceAccounts.get
iam.serviceAccounts.getAccessToken
iam.serviceAccounts.getOpenIdToken
iam.serviceAccounts.implicitDelegation
iam.serviceAccounts.list
iam.serviceAccounts.signBlob
iam.serviceAccounts.signJwt
resourcemanager.projects.get
resourcemanager.projects.list
我能够在我的新 GCP 项目中的 IAM 控制台中确定这一点。