仅允许服务帐户访问 Firetime 实时数据库的子集

Posted

技术标签:

【中文标题】仅允许服务帐户访问 Firetime 实时数据库的子集【英文标题】:Allow service account access only to a subset of a Firetime Realtime Database 【发布时间】:2022-01-21 19:10:04 【问题描述】:

我需要在远程服务器上运行一些代码,并且只能访问我的 Firebase 实时数据库的子集。

我想我将能够创建一个可以访问数据库的服务帐户,并使用安全规则管理它更详细的读/写权限。好像不是这样的。

我不希望此服务帐号拥有对我的 Firebase 项目的任何其他访问权限。

以下是我认为我的安全规则大致如下所示的示例:


  "rules": 
    "my_restricted_data": 
      "X": 
        ".read": "auth.my_service_account_id === 'X'",
        ".write": "auth.my_service_account_id === 'X'"
      
    
  

查看 Google Cloud Platform 角色和权限,我似乎无法将 Firebase 实时数据库访问权限与我不想授予此服务的其他重要权限分开。

我有什么办法可以完成这项工作吗?

我正在使用 ruby​​ firebase https://github.com/oscardelben/firebase-ruby

谢谢!

【问题讨论】:

【参考方案1】:

您使用的库封装了 Firebase REST API,该 API 本身可用于以管理超级用户和常规身份验证用户的身份访问数据库。不幸的是,库提供的两个ways to authenticate 都提供了对数据库的管理访问权限,而无法指定您自己的 UID。这意味着没有办法限制你的代码可以做什么。

我建议在 repo 上提交功能请求(或 PR)以添加 signing in a regular user through the REST API,然后将只允许您的规则为其设置的访问权限。

【讨论】:

非常感谢您的回答!如果这个 SDK 有适当的选项,那么传递额外的属性会起作用吗?像这里的这个例子:firebase.google.com/docs/database/admin/…我还不清楚这个选项是否允许我限制服务帐户以有限的读/写权限访问实时数据库,并被阻止在我的项目或谷歌云帐户中执行任何其他操作.还是最好的选择只是创建一个标准用户帐户(使用用户名和密码)? 我没有提到的另一件事是凭据被交给了正在构建远程代码的外部方,因此我不希望授予任何额外的权限。我只是希望他们能够访问 REST API,以便仅访问一个特定对象。 1) 您提供的链接允许 Admin SDK 作为特定 UID 访问实时数据库,然后您的安全规则可以限制他们可以执行的操作。 2)如果您不信任访问数据库的代码,您可能不应该以管理权限运行它。 再次感谢您的回复。不过,我还是有点不确定。进一步了解您的第 2 点 - 是否有可能拥有一个仅(有限)访问实时数据库而无法访问其他任何内容的服务帐户?或者我应该让这个远程代码作为普通用户授权。 服务帐户原则上提供对项目的完全管理访问权限。实时数据库有一个技巧,允许代码自我限制,但任何使用服务帐户的代码也可以选择不限制自己。因此:如果您不信任访问数据库的代码,则不应以管理权限运行它

以上是关于仅允许服务帐户访问 Firetime 实时数据库的子集的主要内容,如果未能解决你的问题,请参考以下文章

使用SAS保护Azure Storage的安全性

AWS IAM 策略:如何更改 AWSLambdaFullAccess 策略以仅允许访问一个 S3 存储桶?

IAM允许用户仅查看自己的实例

API 到 API - 使用服务帐户

仅允许 ECR 请求的安全组出口规则

允许通过 API v3 访问 Google 服务帐户 YouTube 上传访问权限