保护Kubernetes秘密文件以进行源代码管理?

时间:2016-02-28 20:05:19

标签: security encryption deployment base64 kubernetes

根据Kubernetes secrets docs,创建一个秘密就像对数据进行base64编码并将其放在一个文件中一样简单。

那么,如果base64可以像编码一样轻松解码,我们可以保护/加密文件中的秘密值吗?能够将秘密文件提交到源代码控制中会很好,但是简单地使用base64编码的数据提交文件绝不是安全的。

例如,以下是文档中给出的示例:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: dmFsdWUtMg0K
  username: dmFsdWUtMQ0K

如果您转到base64decode.org,您会看到这些密码/用户名值仅为" value-2"。此文件不适合源代码管理。我们如何保护文件中的数据,以便对源代码控制安全?或者这被认为是不好的做法,我们应该将文件添加到.gitignore?

3 个答案:

答案 0 :(得分:6)

它不是base64编码的安全性,它是允许二进制内容存储在秘密中。您可能不应该将秘密定义提交给源代码控制。

答案 1 :(得分:0)

对于机密密钥,您可以将它们存储在etcd中并使用confd检索它们吗?

否则,如果你真的想要它们在scm中,那么你可以使用git-crypt吗? https://github.com/AGWA/git-crypt

答案 2 :(得分:0)

我将使用ansible部署它们,并使用ansible-vault加密机密,因此它们可以在存储库中。此外,可以将它们存储为文本,并在模板上应用base64过滤器。

无论如何,正如之前所说,秘密并不安全。它们只是在base64中编码,并且可以通过以下方式解码:

kubectl get secret mysecret -o jsonpath="{.data.username}" | base64 -d
kubectl get secret mysecret -o jsonpath="{.data.password}" | base64 -d

(顺便说一下,这很有用)