首页 > 解决方案 > Firebase 实时数据库对未经授权的请求进行计费,尤其是管理费用

问题描述

我是 Flutter-fire 开发者,已经 4 岁了。最近我正在深入研究 Firebase 的安全理念。使用 Firebase Auth 实施安全规则并不难,因为我们有很多 SO 问题和官方文档。

我今天的问题是关于 Firebase 安全规则,但更多的是关于 Firebase 计费。假设我们使用 auth-context 安全规则防御了一堆包含错误访问令牌的恶意 RESTful 攻击。实际上发生了零读取或写入。

在这种情况下,我如何计算我的 rtdb 的计费?我有一个来自社区成员的计算器,但我无法弄清楚如何准确计算未经授权的请求的成本,因为该计算器没有提供有关开销 ATM 的更多详细信息。我知道有很多事情需要rtdb billing。但是对于未经授权的reqs的计费政策或计算原则,似乎没有官方具体说明。

我们应该始终了解 rtdb 下载成本的原因是成本包括许多额外的大量数据,用于安全目的等等。由于这些额外的数据成本很高(这就是我们更喜欢使用流来极大降低此类开销的成本的原因),我认为这些攻击可能会花费大量现金,即使它们无法读取或写入我们的 json 树.

所以,通过这个问题,我希望弄清楚以下两点:

  1. 与授权请求相比,未经授权的请求是否会花费相同的额外费用,例如开销等?
  2. 如果 1. 为真,那么我们如何准确计算费用?我很难理解为什么没有官方指南来单独计算下载费本身和间接费用,即使 OH 实际上花费了开发人员一大笔钱。

我想这个问题的某些部分可能不够清楚,因此非常感谢您的评论。希望这个问题能传达给社区中的 Firebase 专家!先感谢您 [:

标签: firebasefirebase-realtime-databasegoogle-cloud-platform

解决方案


文档中有一条特定的行说

“出站流量包括来自所有数据库操作的连接和加密开销,以及通过数据库读取下载的数据。数据库读取和写入都可能导致账单上的连接成本。 进出数据库的所有流量,包括安全规则拒绝的操作,都会导致可计费的成本。”

从这个文档中,

您还需要为评估已添加到数据库的 Cloud Firestore 安全规则所需的任何读取付费”。如果这些不需要读取,那么这不应该需要任何连接到数据库的开销。

从这个文档中,

对于移动和 Web 客户端库,如果您的 Cloud Firestore 安全规则使用 exists()、get() 或 getAfter() 从您的数据库中读取一个或多个文档,您需要支付额外读取费用,如下所示:

  • 您需要为评估 Cloud Firestore 安全规则所需的读取付费。例如,如果您的规则引用了三个文档,但 Cloud Firestore 只需要读取其中两个文档来评估您的规则,那么您将需要为依赖文档的两次额外读取付费。

  • 即使您的规则多次引用该文档,您也只需为每个相关文档支付一次阅读费用。

  • 您只需为每个请求支付一次规则评估费用。

  • 因此,读取多个文档的成本可能比一次读取一个文档的成本低,因为读取多个文档需要的请求更少。

  • 当您收听查询结果时,在以下所有情况下,您都需要为规则评估付费:

    1. 当您发出查询时。

    2. 每次更新查询结果。

    3. 任何时候用户的设备离线,然后重新在线。

    4. 任何时候你更新你的规则。

    5. 任何时候更新规则中的依赖文档。”</p>

注意:您还需要为 Cloud Firestore 请求使用的网络带宽付费。传入网络带宽(网络入口)是免费的。Cloud Firestore 请求的网络带宽成本取决于请求的响应大小、Cloud Firestore 数据库的位置和响应的目标,但 Cloud Firestore 安全规则拒绝的请求不计入网络带宽使用量


推荐阅读