我可以轻松获取存储在Kubernetes
.
$ kubectl get secret my-app-secrets -o yaml
从我要解码的输出中选择秘密值。
例子ZXhwb3NlZC1wYXNzd29yZAo=
$ echo ZXhwb3NlZC1wYXNzd29yZAo= | base64 --decode
> exposed-password
我不确定我是否了解Kubernetes
生态系统中秘密资源的有效性,因为它很容易获得。
我可以轻松获取存储在Kubernetes
.
$ kubectl get secret my-app-secrets -o yaml
从我要解码的输出中选择秘密值。
例子ZXhwb3NlZC1wYXNzd29yZAo=
$ echo ZXhwb3NlZC1wYXNzd29yZAo= | base64 --decode
> exposed-password
我不确定我是否了解Kubernetes
生态系统中秘密资源的有效性,因为它很容易获得。
base64是编码,而不是加密,它允许您以方便的方式简单地对信息进行编码。
您编码的数据可能包含许多无法识别的字符、换行符等,因此对它们进行编码很方便。
但是 kubernetes 不应该是唯一的事实来源,而是 kubernetes 从您需要选择的外部 vault 加载这些秘密,例如hashcorp 的 vault,如评论中所示。
除了 hashcorp vault 之外,还有多种方法可以在 git 中存储秘密:
您可能还对kubesec项目感兴趣,该项目可用于分析 kubernetes 资源的安全风险。
关键是在 Kubernetes 中,secret 允许您通过控制对 secret 的访问来保护您的密码(您想要通过加密来做的事情),而不是通过对其进行加密。
它有几种机制:
也就是说,如果出现问题,Bitnami或其他解决方案(请参阅 Mokrecov 的答案)创建的 Sealed Secrets 解决方案已经出现,以使问题更加稳健,以防万一不受欢迎的人获得了您的秘密。
Kubernetes 中的秘密是单独的清单,不是为了保护您的秘密数据,而是将您的秘密数据与您的部署/pod 配置分开。
然后由您决定如何保护您的秘密,它的优缺点有很多选择(请参阅 Mokrecov 的回答)。与其他类型相比,秘密也有一些优势。像命名空间限制,单独的访问管理,在需要之前在 pod 中不可用,并且它们没有写入本地磁盘存储。
让我们换个角度想,让我们想象一下 kubernetes 中没有任何 Secret。现在,您的秘密数据将在您的部署/pod/configmap 中。你有几个问题。例如: