保护 Kubernetes 秘密文件以进行源代码控制?
Securing Kubernetes secret files for source control?
根据 Kubernetes secrets docs,创建秘密就像对数据进行 base64 编码并将其放入文件中一样简单。
那么,如果 base64 可以像编码一样轻松解码,我们可以 secure/encrypt 文件中的秘密值吗?能够将秘密文件提交到源代码管理中会很好,但是简单地提交带有 base64 编码数据的文件是不安全的。
例如,这是文档中给出的示例:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: dmFsdWUtMg0K
username: dmFsdWUtMQ0K
如果您转到 base64decode.org,您会看到那些 password/username 值只是 "value-2"。此文件不适合源代码管理。我们如何保护文件中的数据,使其对源代码管理是安全的?或者这被认为是不好的做法,我们应该只将文件添加到 .gitignore?
它不是为了安全而进行 base64 编码,而是允许二进制内容存储在秘密中。您可能不应该将秘密定义提交给源代码管理。
对于机密密钥,您可以将它们存储在 etcd 中并使用 confd 检索它们吗?
否则,如果你真的想在 scm 中使用它们,那么你可以使用 git-crypt 吗?
https://github.com/AGWA/git-crypt
我会用 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
(什么东西很有用,顺便提一下)
根据 Kubernetes secrets docs,创建秘密就像对数据进行 base64 编码并将其放入文件中一样简单。
那么,如果 base64 可以像编码一样轻松解码,我们可以 secure/encrypt 文件中的秘密值吗?能够将秘密文件提交到源代码管理中会很好,但是简单地提交带有 base64 编码数据的文件是不安全的。
例如,这是文档中给出的示例:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: dmFsdWUtMg0K
username: dmFsdWUtMQ0K
如果您转到 base64decode.org,您会看到那些 password/username 值只是 "value-2"。此文件不适合源代码管理。我们如何保护文件中的数据,使其对源代码管理是安全的?或者这被认为是不好的做法,我们应该只将文件添加到 .gitignore?
它不是为了安全而进行 base64 编码,而是允许二进制内容存储在秘密中。您可能不应该将秘密定义提交给源代码管理。
对于机密密钥,您可以将它们存储在 etcd 中并使用 confd 检索它们吗?
否则,如果你真的想在 scm 中使用它们,那么你可以使用 git-crypt 吗? https://github.com/AGWA/git-crypt
我会用 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
(什么东西很有用,顺便提一下)