如果我可以解码 Kubernetes 秘密,那么它们有什么意义呢?
What is the point of Kubernetes secrets if I can decode them?
Kubernetes
.
中存储的秘密我可以轻松获取
$ kubectl get secret my-app-secrets -o yaml
Select 来自我要解码的输出的秘密值。
示例ZXhwb3NlZC1wYXNzd29yZAo=
$ echo ZXhwb3NlZC1wYXNzd29yZAo= | base64 --decode
> exposed-password
我不确定我是否了解 Kubernetes
生态系统中秘密资源的有效性,因为它很容易获得。
base64是编码,不是加密,它可以让您以方便的方式对信息进行简单的编码。
您编码的数据可能包含很多无法识别的字符、换行等,因此编码起来很方便。
在 kubernetes 中,您可以使用此 instruction.
启用加密
但是 kubernetes 不应该是唯一的真相来源,相反,kubernetes 从您需要 select 的外部保险库加载这些秘密,例如 hashicorp's vault,如评论中所示。
除了 hashicorp 保险库之外,还有多种方法可以在 git 中存储秘密:
您可能还对kubesec项目感兴趣,可以用来分析kubernetes资源的安全风险。
重点是在 Kubernetes 中,秘密允许您通过 控制对secret,而不是加密它。
它有几种机制:
- 秘密只能由 their very same namespace.
的人访问
- 机密与任何其他文件一样具有 permissions,因此您可以选择谁可以访问它。
- 它们只发送到 pods whenever required,之前不会。
- 它们不是用 local disk storage 写的。
就是说,如果出现问题,Sealed Secrets created by Bitnami 或其他解决方案(请参阅 Mokrecov 的回答)已经出现,可以使问题更加稳健,以防不速之客获取您的秘密.
kubernetes 中的秘密是单独的清单,不是为了保护您的秘密数据,而是为了将您的秘密数据与您的 deployment/pod 配置分开。
然后由您决定如何保护您的秘密,有很多选择各有利弊(请参阅 Mokrecov 的回答)。与其他类型相比,秘密也有一些优势。像命名空间限制,单独的访问管理,在需要之前在pod中不可用,它们不写在本地磁盘存储中。
让我们反过来想,假设在 kubernetes 中没有任何秘密。现在,您的秘密数据将在您的 deployment/pod/configmap 中。你有几个问题。例如:
- 您想向所有用户授予对部署清单的访问权限,但仅将对机密的访问权限限制为 A 和 B。你是怎么做到的?
- 如果要加密机密,则必须将所有数据连同部署数据一起加密,这将使维护变得不可能。或者你可以加密每个秘密值,但你必须为它们中的每一个提出一些解密机制,并且解密密钥无论如何在那个阶段都是不可用的。
- 您可以使用 ConfigMap 将机密数据与配置分开。但是当你想添加加密机制,或者对它进行一些访问限制时,你就会受到ConfigMap特性的限制,因为它的本意只是存储非机密数据。使用 Secrets,您可以轻松选择添加 encryption/restrictions.
Kubernetes
.
$ kubectl get secret my-app-secrets -o yaml
Select 来自我要解码的输出的秘密值。
示例ZXhwb3NlZC1wYXNzd29yZAo=
$ echo ZXhwb3NlZC1wYXNzd29yZAo= | base64 --decode
> exposed-password
我不确定我是否了解 Kubernetes
生态系统中秘密资源的有效性,因为它很容易获得。
base64是编码,不是加密,它可以让您以方便的方式对信息进行简单的编码。
您编码的数据可能包含很多无法识别的字符、换行等,因此编码起来很方便。
在 kubernetes 中,您可以使用此 instruction.
启用加密但是 kubernetes 不应该是唯一的真相来源,相反,kubernetes 从您需要 select 的外部保险库加载这些秘密,例如 hashicorp's vault,如评论中所示。
除了 hashicorp 保险库之外,还有多种方法可以在 git 中存储秘密:
您可能还对kubesec项目感兴趣,可以用来分析kubernetes资源的安全风险。
重点是在 Kubernetes 中,秘密允许您通过 控制对secret,而不是加密它。
它有几种机制:
- 秘密只能由 their very same namespace. 的人访问
- 机密与任何其他文件一样具有 permissions,因此您可以选择谁可以访问它。
- 它们只发送到 pods whenever required,之前不会。
- 它们不是用 local disk storage 写的。
就是说,如果出现问题,Sealed Secrets created by Bitnami 或其他解决方案(请参阅 Mokrecov 的回答)已经出现,可以使问题更加稳健,以防不速之客获取您的秘密.
kubernetes 中的秘密是单独的清单,不是为了保护您的秘密数据,而是为了将您的秘密数据与您的 deployment/pod 配置分开。
然后由您决定如何保护您的秘密,有很多选择各有利弊(请参阅 Mokrecov 的回答)。与其他类型相比,秘密也有一些优势。像命名空间限制,单独的访问管理,在需要之前在pod中不可用,它们不写在本地磁盘存储中。
让我们反过来想,假设在 kubernetes 中没有任何秘密。现在,您的秘密数据将在您的 deployment/pod/configmap 中。你有几个问题。例如:
- 您想向所有用户授予对部署清单的访问权限,但仅将对机密的访问权限限制为 A 和 B。你是怎么做到的?
- 如果要加密机密,则必须将所有数据连同部署数据一起加密,这将使维护变得不可能。或者你可以加密每个秘密值,但你必须为它们中的每一个提出一些解密机制,并且解密密钥无论如何在那个阶段都是不可用的。
- 您可以使用 ConfigMap 将机密数据与配置分开。但是当你想添加加密机制,或者对它进行一些访问限制时,你就会受到ConfigMap特性的限制,因为它的本意只是存储非机密数据。使用 Secrets,您可以轻松选择添加 encryption/restrictions.