Firebase在GCP中自动生成的API密钥安全吗?

24

在Firebase中创建项目后,会自动生成多个Google Cloud Platform API密钥:

  • 服务器密钥(由Firebase自动创建)
  • Android密钥(由Firebase自动创建)
  • 浏览器密钥(由Firebase自动创建)

所有密钥都带有“!”符号,表示:

此API密钥未受限制。为防止未经授权的使用和配额失窃,请限制密钥以限制其使用方式。

我的理解是Firebase处理GCP配置,并知道如何以安全的方式进行操作。 “Android密钥”嵌入在应用程序中,因此可以从apk文件中轻松获取。

是否需要进行额外的配置?

密钥授予了哪些权限?


3
你有找到任何额外的信息来回答吗? - ahong
5
到目前为止回答的人都忽略了一个需要解决的关键问题:当在Firebase中启用这些身份验证提供程序时,Google会自动创建和配置密钥。因此,问题不是关于一般的API密钥,而是那些自动生成的密钥。Google如何证明生成的东西是不安全的?更重要的是:如何以确保身份验证不会中断的方式精确限制密钥? - Martin Braun
1
马丁,我对未经通知创建一个不受控制的密钥的想法感到同样的担忧,但在第一次震惊之后,我意识到只要我不使用实际生成的密钥并且不公开它,我就会保持安全(顺便说一下,我的主要关注点是计费)。 - jpp
@jpp 正确,但是当您在应用程序中通过OTP或Google登录实现身份验证时,必须将API密钥与其一起发布。然后,您必须限制密钥以防止它们被任何人使用。经过进一步调查,我可以说,只要您在使用安装了原始软件的真实设备上使用它,在Android上它使用SafetyNet,限制密钥不会破坏身份验证。不幸的是,自定义ROM或模拟器的验证码回退方法将无法使用受限密钥,并且我向Google提出了解决此问题的建议 - Martin Braun
@MartinBraun,也许我没有理解所有的含义或实现细节,但我并不打算让任何关键信息不受限制。我采取的立场是创建自己可控的密钥,并施加我认为必要的所有限制,忽略“自行创建”的密钥;并且绝不泄露它。 - jpp
显示剩余2条评论
2个回答

2
什么是安全的定义?该密钥是否允许访问特权或有价值的数据?任何拥有API密钥的人都可以执行密钥允许的任何操作。问题不在于密钥是否安全,而在于如何管理、使用和保护密钥。您信任拥有密钥的人/软件/服务吗?如果否,则该密钥不安全。
我的理解是Firebase处理GCP配置并知道如何以安全的方式进行配置。
那是一个错误的假设。Google/Firebase不会为您配置密钥以确保安全。这取决于您的实现来提供和保护密钥。
总之,答案是API密钥只有在使用该密钥的环境也是安全的情况下才是安全的。

API密钥应该是公开分发的,因此不能被视为安全。我添加了问题“密钥授予了什么权限?”以更清楚地说明问题:文档没有列举可以使用密钥做什么。我能找到的最好的是在按照这些说明操作时在其UI中可见的Google API列表:https://cloud.google.com/docs/authentication/api-keys#api_key_restrictions - silviot
1
@silviot Google并没有将权限定义为API密钥不使用权限进行授权。 API密钥是授权机制。任何接受API密钥的API都将得到支持/允许。 API密钥是遗留问题,Google正在放弃它们在许多服务中的使用。 API密钥不适用于“公共”分发。它们旨在进行“受控”分发,并且即使在受控分发中也存在重大风险。您不应使用API密钥,而应改用OAuth授权。您将被迫在未来越来越多的服务中切换到OAuth。 - John Hanley
1
我不明白如何按照您的要求在我的情况下不使用API密钥,而是使用OAuth授权。我正在使用Firebase和Firestore。您能否详细说明并指向一些文档来源,说明如何实现这一点? - silviot

2

虽然Firebase服务的API密钥是安全的,可以包含在代码中,但有几种特定情况下,您应该为API密钥强制执行限制。

文档中得知:

Firebase自动创建的API密钥默认情况下没有限制。 但是,在几种特定情况下,您应该为API密钥强制执行限制。

有关更多详细信息,请查阅文档。


我相信文档的这一部分应用API限制的指南很好地展示了如果有人收集了你的密钥并使用它,可能会发生什么:以你的名义使用那些Google API。 - silviot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接