Cloud Firestore 忽略规则

Posted

技术标签:

【中文标题】Cloud Firestore 忽略规则【英文标题】:Cloud Firestore ignores rules 【发布时间】:2020-10-27 13:35:24 【问题描述】:

我在我的项目中使用 Google Cloud Platform Cloud Firestore 数据库。我在开发者模式下启动它来为我的数据建模并用记录填充它。

现在我已准备好投入生产,因此我正在使用 Firebase 控制台而不是 GCP 控制台来制定规则。 但它似乎忽略了我插入的每一条规则。例如,如果我写这样的东西

rules_version = '2';
service cloud.firestore 
  match /databases/database/documents 
    match /document=** 
      allow read, write: if false
    
  

我尝试提交的每次读取或创建都使用规则操场失败,并显示消息:“模拟读取被拒绝”(例如)

但如果我从我的 node.js 应用程序调用查询,我可以读取、创建、编辑和删除所有内容,就像忽略规则一样。

规则监视器没有显示任何错误。

这与 GCP Firestore 有关吗?我假设他们使用相同的平台,实际上他们经常指向 Firebase 控制台而不是 GCP 控制台进行操作

【问题讨论】:

您可能在您的 nodejs 应用程序中使用了 Admin SDK。 adminSDK 可以做任何事情,因为它只能在受信任的环境中运行,例如服务器。 是的,我确实在使用 Admin SDK。是的,它位于受信任的服务器中。我不知道它绕过了安全规则 【参考方案1】:

在 NodeJS 上运行的 Admin SDK 可以绕过任何安全规则,并且几乎可以对所有 Firebase 产品执行任何操作。

这样,它只能在管理您的应用的服务器上的受信任环境中运行。它允许更多功能,并允许服务器执行您不​​希望客户端执行的操作(例如更改排行榜)。您可以阅读有关 SDK 及其权限的更多信息here

【讨论】:

以上是关于Cloud Firestore 忽略规则的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Cloud Storage 规则能否针对 Firestore 数据进行验证?

Cloud Firestore 安全规则 -(读取、写入)

Cloud Firestore 安全规则只允许从 Firebase 函数写入

Firebase Cloud Firestore 数据库规则数据访问被拒绝

使用 exists() 的 Cloud Firestore 规则是不是算作读取?

在 Cloud Firestore 规则中 - 如何检查密钥是不是为空