披露 firebase apiKey

Ema*_*ini 8 firebase firebase-security

firebase https://firebase.google.com/docs/web/setup 的文档告诉我们我们可以安全地公开 firebase apiKey:

注意: Firebase 配置对象包含 Firebase 项目的唯一但非秘密的标识符。

本教程解释了如何获取 apiKey 并将其插入到我们的 Web 应用程序的 HTML 代码中。每个人都可以读取该密钥。我会理解这只是一个识别密钥。

但最近我收到了来自谷歌的这条消息:

我们检测到与以下 Google Cloud Platform 项目相关联的可公开访问的 Google API 密钥:

[...]

密钥是在以下 URL 中找到的:

[...]

我们认为您或您的组织可能无意中在公共来源或公共网站上发布了受影响的 API 密钥(例如,凭据错误地上传到 GitHub 等服务。)

请注意,作为项目/帐户所有者,您有责任保护您的密钥。因此,我们建议您采取以下步骤来纠正这种情况:

  1. 如果此密钥是公开的(或者无法阻止可公开访问的密钥):登录 Google Cloud Console 并查看您帐户上的 API 和结算活动,确保使用情况符合您的预期。向您的 API 密钥添加 API 密钥限制(如果适用)。
  2. 如果此密钥不打算公开:重新生成已泄露的 API 密钥:在云控制台平台中搜索凭据,编辑泄露的密钥,然后使用重新生成密钥按钮轮换密钥。有关更多详细信息,请查看有关处理受损 GCP 凭据的说明。立即采取措施确保您的 API 密钥未嵌入公共源代码系统、存储在下载目录中或以其他方式无意共享。向您的 API 密钥添加 API 密钥限制(如果适用)。

总的来说,我会说这两种信息来源相互对比。apiKey 是“非秘密的”是真的吗?另请阅读相关问题是否安全地将 Firebase apiKey 公开给公众?我不太确定。我知道如果规则允许,apiKey 足以访问整个数据库。

第一个问题:我想知道我是否可以确信 apiKey 只提供对数据库的访问(可以受规则限制),或者它是否还可以访问有关项目的其他信息。存储呢?用户可以读取文件吗?能写出来吗?该密钥称为“Web API 密钥”,因此我理解它是项目的唯一标识符。在收到来自 google 的消息之前,我更多地将其视为标识符而不是密钥。由于对项目 API 的每次访问对于作为项目所有者的我来说都是潜在的成本,因此我理解为了计费需要一个密钥。

第二个问题。因为我想完全控制用户可以在数据库中访问的内容,所以我的应用程序将 REST api 作为数据库的接口(使用函数)。所以用户不应该直接访问数据库。我有以下规则

service cloud.firestore {
  match /databases/{database}/documents {
    match /global/public {
      allow read;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

目的是用户只能读取以 /global/public 为前缀的文档(当前为空)。所以我认为数据库是安全的。现在我想知道我是否真的需要公开apiKey......用户身份验证是否需要apiKey?如果是这样,我可以忽略来自 google 的消息并将 apiKey 公开吗??