Firebase Admin SDK管理员服务代理角色



我有一个使用firebase auth SDK的web应用程序。我一直在努力减少访问权限。默认情况下,关联的IAM服务帐户具有项目编辑器角色,这似乎有点危险。但它是有效的。

我使用IAM管理控制台创建了一个新的服务帐户。然后,我根据我知道的应用程序需要的权限(基于文档(创建了一个新角色,然后是通常的来回操作,以最大限度地减少权限。

但是,无论添加了什么权限,使用该服务帐户通过SDK修改用户都是失败的。调用firebase auth-updateUser或create函数会导致类似以下的错误:

FirebaseAuthError:通过";凭证";属性没有足够的权限访问请求的资源权限

在尝试了所有选项后,我遇到了一个名为";Firebase Admin SDK管理员服务代理";(一个谷歌链接表明该角色的后端id为roles/firebase.sdkAdminServiceAgent(。添加此角色可使更新和创建功能正常工作。

谁能解释一下";Firebase Admin SDK管理员服务代理";角色或者有没有一种方法可以确定它添加了什么权限(这样我就可以将这些权限添加到我的自定义IAM角色中(。

Firebase Admin SDK Administrator Service Agent角色是截至2021年3月7日授予新项目默认Firebase Admin服务帐户的三个角色之一。另外两个角色是Firebase Authentication AdminService 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控制台中确定这一点。

试试这个进入防火区设置用户和权限使您的帐户成为所有者

这应该可以让你访问所有内容,而不会给你带来任何其他问题。

对于使用Firebase Admin SDK变异Firebase Auth用户的后端工作负载,我给服务帐户"Firebase Authentication Admin";角色,该角色具有创建和更新用户的足够权限。

最新更新