我们的谷歌云函数可以访问加密的API密钥,它可以使用外部服务解密。一旦 API 密钥未加密,那么将 API 密钥缓存为全局变量是否安全,以便在重复使用 Google Cloud 函数的情况下,可以使用未加密的变量而不是联系未加密服务?
编辑:
我们的想法是,该函数在运行时将使用未加密版本的 API 密钥(即将其存储在内存中以供使用(,并且我相信它的缓存在内存和每个函数中,据我所知,这将使每个函数缓存未加密的 API 密钥的安全性不亚于在每个函数调用时获取它并解密它?
"安全"是一个糟糕的词选择——没有安全这样的东西,在某种程度上,一切都是一种平衡行为。
从统计学上讲,您在内存中保存敏感信息的时间越长,不良行为者就越容易掌握它。 但是你永远无法真正消除这种情况发生的机会。 问题实际上是这个坏人如何进入云功能。 一旦这成为一种可能性,你就遇到了问题。 这可能是因为将第三方代码信任到您的部署中,或者有人掌握了您项目的管理员凭据或 Google 的安全漏洞。
但是,如果您假设不良行为者不可能进入系统,那么您在内存中保留某些内容多长时间并不重要,因为您信任可以访问它的每一位代码(当然还有Google提供该内存(。
内存不是严格"按函数"保存的。 它将"每个实例的每个函数"举行。 根据负载,您可能有许多服务器实例都解密和保存敏感信息。 但是,实例上运行的代码只会从一个函数触发,而不会从其他函数触发。
如果您必须快速更改 API 密钥,即由于泄漏,以这种方式在内存中缓存 API 密钥确实会使更改 API 密钥变得更加复杂 - 一种方法可能是将时间戳存储在全局变量中并在 x 时间过后使密钥失效或重新启动所有函数,以便清除内存缓存并且 API 密钥的新版本已提取,如果您将该函数的新版本推送到 Google Cloud Functions 会发生这种情况