问题描述
正在寻找一种在Google Cloud Run上为运行的容器提供secrets的方法,并满足以下条件:
– 安全
– 集中式和基于拉取的
– 免费
– 简单
– 适用于团队,具有不同的信任范围
– 与主机无关:在AWS、GCP、Azure上更改1个配置将是相同的
在使用容器启动新项目时,用户经常遇到需要管理secrets的问题,并且通常发现这很困难。用户目前的解决方案是将secrets加密存储在公共git存储库中,并在容器内部的入口点脚本中解密它们。但是用户不太喜欢在Django及其依赖项中安装gpg。现在,用户正在考虑在同一网络上运行另一个容器,其唯一责任是为第一个容器提供配置。
用户想知道这种方法是否安全,是否有更好的方法。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
如果你正在使用Google Cloud Run,可能有更好的方法。我没有尝试过,但我看到他们有一个名为”Secret Manager”的工具,可以用来存储secrets。他们还提到了一个名为Berglas的项目,可以用来将secrets存储在GCS云存储中。
根据我的个人经验,最好利用广泛采用的解决方案,避免为安全性创建独特的解决方案。正确地实现安全性并非易事,而且这样做可以减少你需要支持的代码量。
以下是我提到的解决方案的文档链接:https://github.com/ahmetb/cloud-run-faq#how-to-configure-secrets-for-cloud-run-applications
方案2
使用secrets-provider-container的方法可能会增加复杂性,并且需要确保容器之间的通信是安全的。
另一种方法是使用secrets-provider-container来为容器提供secrets。这个容器的唯一责任是提供secrets给其他容器。你可以在同一网络中运行这个容器,并确保它与其他容器之间的通信是安全的。
以下是使用secrets-provider-container的一般步骤:
1. 创建一个Docker镜像,其中包含你的secrets。
2. 在同一网络中运行这个Docker镜像,作为secrets-provider-container。
3. 在其他容器中,通过网络连接到secrets-provider-container,并获取所需的secrets。
请注意,使用secrets-provider-container的方法可能会增加复杂性,并且需要确保容器之间的通信是安全的。
以上是两种可能的解决方案,你可以根据你的需求选择其中之一。
总结
在Google Cloud Run上使用secrets-provider-container可能是一个好主意。你可以使用Google Cloud Run的”Secret Manager”工具或Berglas项目来存储secrets。另一种方法是使用secrets-provider-container来为容器提供secrets。无论你选择哪种方法,都需要确保secrets的安全性和容器之间的通信安全。
请注意,这些解决方案可能会因版本差异而有所不同,所以在进行任何更改之前,请确保备份你的数据和配置。
希望这些解决方案对你有帮助!如果你有任何其他问题,请随时提问。