【问题标题】:Best way to store and share cryptographic keys on GCP accross functions在 GCP 上跨功能存储和共享加密密钥的最佳方式
【发布时间】:2021-03-03 19:04:08
【问题描述】:

我正在编写的一些函数需要在某处存储和共享一组加密密钥 (

  • 它在函数之间和同一函数的实例内共享
  • 在功能部署后维护

根据密钥是否已过期或是否需要创建新密钥,每 4 小时左右修改(和写入)密钥。

现在,我将密钥作为加密二进制文件存储在云存储桶中,访问权限仅限于该功能。它可以工作,只是速度很慢(更新密钥时所需的读/写约为 500 毫秒)。

我已经考虑了一些其他的解决方案:

  • Redis:速度快,但考虑到存储单个值所需的价格(每月 40 美元),这太过分了
  • Cloud SQL:函数已连接到云实例,因此不会产生更多成本
  • 删除所有内容并使用 KMS。不幸的是,它不符合我的要求。

我在函数中使用的库是可用的here

有没有更好的方法来为云功能(以及可能的其他工具,如 GKE)存储一小块数据?


编辑

我最终使用的解决方案是在应用程序已连接到的数据库中使用单个表。它也比使用存储桶(

故事的寓意是使用已配置的任何东西来存储密钥。如果存储密钥是一个问题,那么使用组合 KMS + 云功能进行如下所述的旋转似乎是一个不错的选择。

所有代码+更多详细信息都可以在here.

【问题讨论】:

  • 如果云存储性能有问题,几乎任何其他解决方案都会变慢。 KMS、Secrets Manager、Firestore 等服务将其秘密存储在持久存储中,并且在大多数情况下使用更复杂的存储方案。

标签: google-cloud-platform google-cloud-functions


【解决方案1】:

更好的方法是使用 Cloud KMS 管理您的密钥。但是,正如您之前提到的,Cloud KMS 不会自动删除旧的密钥版本材料,您需要手动删除旧版本,我怀疑这是您不想做的事情。

另一种可能性是将密钥保留在 Firestore 中。由于为此您无需配置任何特定的基础架构,例如 Redis Memorystore 和 Postgres Cloud SQL,因此从长远来看,它会更容易管理和扩展。

一般的想法是让 Cloud Scheduler 每 4 小时触发一次 Cloud Function,此函数将轮换 Cloud Firestore 上的密钥。

你觉得这听起来如何?

【讨论】:

  • 这是个好主意。我既没有考虑过 Cloud Firestore 也没有考虑将执行与密钥轮换分开。最后一个的主要困难是确保执行始终准确地知道何时发生了轮换,以便它可以适当地缓存键。我想一个可能更好的混合方式是让 Cloud KMS 进行加密,并让一组云功能进行轮换。这样就不需要检查密钥是否是最新的,甚至不需要缓存它们。我现在就试试。
猜你喜欢
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
相关资源
最近更新 更多