代码之家  ›  专栏  ›  技术社区  ›  Matthew P

在Google云函数中安全地缓存未加密的API密钥?

  •  0
  • Matthew P  · 技术社区  · 6 年前

    我们的googlecloud函数可以访问一个加密的API密钥,它可以通过使用外部服务来解除加密。一旦API密钥被取消加密,那么将API密钥缓存为全局变量是否安全,以便在重用Google云函数的情况下,可以使用未加密的变量而不是联系取消加密服务?

    编辑:

    我们的想法是,该函数在运行时将使用未加密版本的API密钥(即,将其存储在内存中以供使用),并且它的缓存,我相信,在内存中,每个函数,就我所知,在每个函数中缓存未加密的API密钥的安全性不亚于在每次函数调用中获取并解密它?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Matthew P    6 年前

    从统计学上讲,你在内存中保存敏感信息的时间越长,一个坏演员就越容易得到它。但你永远无法真正消除这种可能性。问题是这个坏演员是如何进入云功能的。一旦有可能,你就有麻烦了。这可以通过将第三方代码信任到您的部署中,或者有人获得您项目的管理凭据,或者Google的安全漏洞来实现。

    但是,如果你假设不可能有一个坏的参与者进入系统,那么你在内存中保留某个东西多久其实并不重要,因为你信任可以访问它的每一个代码位(当然还有谷歌提供的内存)。

    内存不是严格按“每个函数”保存的。它将保持“每个函数每个实例”。根据负载的不同,可以有许多服务器实例都在解密和保存敏感信息。但是实例上运行的代码只会从一个函数触发,而不会从其他函数触发。

    以这种方式在内存中缓存API密钥确实会使更改API密钥变得更加复杂,如果您必须快速更改它们,即由于泄漏-一种解决方法可能是还将时间戳存储在全局变量中,并在经过x个时间量后使密钥无效,或者重新启动所有函数,以便清除内存缓存并使其保持新鲜获取API密钥的版本,如果将新版本的函数推送到Google云函数,就会发生这种情况