kubernetes秘密的管理

时间:2018-08-01 01:40:00

标签: kubernetes kubernetes-secrets

我们从Kubernetes开始,想知道其他项目如何管理Kubernetes机密:

  • 由于Kubernetes秘密值仅是base64编码的,因此不建议将秘密提交到源代码控制中
  • 如果不致力于源代码控制,则应将其保存在其他地方的中央位置,否则就没有单一的真理来源。如果将其存储在其他地方(例如Hashicorp Vault),则如何与CI集成? CI是否从Vault获取值,是否按需在Kubernetes中创建秘密资源?
  • 另一种方法可能是拥有一支专门的团队来处理基础架构,并且只有该团队才知道并管理秘密。但是如果项目数量很大,如果这个团队有可能成为瓶颈

4 个答案:

答案 0 :(得分:2)

  

其他项目如何管理Kubernetes机密

由于它们不是(至少现在不是)适当的机密(以base64编码),因此我们将它们分离为受限制的访问git存储库。

我们的大多数项目都有代码存储库(具有与秘密无关的清单,例如CI / CD管道中的部署和服务)和单独的清单存储库(包含名称空间,共享数据库init,机密以及或多或少的任何内容)与CI / CD分开进行的一次初始化,需要额外的许可才能实施,或者应以其他任何方式(例如机密)加以限制)。

话虽如此,尽管常规开发人员无法访问受限制的存储库,但必须特别注意CI / CD管道,因为即使您保护了机密,在CI期间它们也是已知的(并且可以显示/滥用)。 / CD阶段,因此那里的安全性较弱。通过让我们的DevOps之一监督和批准(受保护的分支机构)对CI / CD管道的任何更改,就可以减轻这种情况,这与高级负责人监督要部署到生产环境的代码更改的方式几乎相同。

请注意,这在很大程度上取决于项目的数量和人员,以及在安全性/开发压力/基础架构集成方面的实际项目需求。

答案 1 :(得分:1)

我将k8机密用作保存机密的商店。就像在定义秘密时一样,我在k8中定义它,而不是在其他地方定义它然后将其注入k8中。我有一个方便的客户端来创建查找和修改我的秘密。我不必担心我的秘密离开防火墙。它们很容易注入我的服务中

如果您想要额外的保护层,则可以使用KMS或类似的方法自己加密k8中的秘密

答案 2 :(得分:1)

我在github上遇到了这个叫做SealedSecrets的东西。 https://github.com/bitnami-labs/sealed-secrets。我自己没有用过。虽然这似乎是一个不错的选择。 但是请注意此github问题(https://github.com/bitnami-labs/sealed-secrets/issues/92)。这可能会导致您丢失标签和注释。

在坚果壳中,SealedSecrets允许您创建自定义资源定义以加密您的秘密。反过来,当您部署资源时,它将解密CRD并将其转换为kubernetes Secret。这样,您可以在源代码存储库中提交SealedSecret资源。

答案 3 :(得分:1)

我们最近发布了一个名为Kamus的项目。这个想法是让开发人员可以为特定应用程序(用Kubernetes service account标识)加密机密,而只有此应用程序可以解密它。 Kamus旨在支持GitOps流,因为可以将加密的机密提交给源代码控制。请查看此blog post,了解更多详细信息。