1

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

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

4 回答 4

3

其他项目如何管理 Kubernetes 机密

由于它们不是(至少还不是)正确的秘密(base64 编码),我们将它们视为单独的受限访问 git 存储库。

我们的大多数项目都有代码存储库(与非机密相关的清单,例如部署和服务作为 CI/CD 管道的一部分)和单独的清单存储库(保存命名空间、共享数据库初始化、机密和或多或少的任何东西) time init 与 CI/CD 分开,需要额外的权限才能实现,或者应该以任何其他方式(例如机密)进行限制)。

话虽如此,尽管普通开发人员无法访问受限存储库,但必须特别注意 CI/CD 管道,因为即使您保护机密,它们在 CI/CD 阶段也是已知的(并且可以显示/滥用) ,所以那里可能是弱安全点。我们通过让我们的 DevOps 之一监督和批准(受保护的分支)对 CI/CD 管道的任何更改来缓解这种情况,其方式与高级主管监督要部署到生产环境的代码更改的方式大致相同。

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

于 2018-08-01T07:38:04.093 回答
2

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

简而言之,SealedSecrets 允许您创建自定义资源定义来加密您的秘密。反过来,当您部署资源时,它将解密 CRD 并将其转换为 kubernetes Secret。这样你就可以在你的源代码仓库中提交你的 SealedSecret 资源。

于 2018-08-01T13:38:42.783 回答
1

我们最近发布了一个名为Kamus的项目。这个想法是允许开发人员加密特定应用程序的秘密(使用 Kubernetes服务帐户标识),而只有这个应用程序可以解密它。Kamus 旨在支持 GitOps 流,因为加密的秘密可以提交给源代码控制。请查看此博客文章了解更多详细信息。

于 2019-03-04T20:15:27.877 回答
1

我使用 k8 secrets 作为保存秘密的存储。当我定义一个秘密时,我在 k8 中定义它,而不是在其他地方,然后弄清楚如何将它注入到 k8 中。我有一个方便的客户端来创建查找和修改我的秘密。我不需要担心我的秘密会离开防火墙。它们很容易注入到我的服务中

如果你想要一个额外的保护层,你可以使用 KMS 或类似的东西自己加密 k8 中的秘密

于 2018-08-01T02:49:41.123 回答