Kubernetes EncryptionConfiguration中的"身份"提供程序提供了什么样



参考:https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#providers

根据文件

按原样编写的资源没有加密。当设置为第一个提供程序时,资源将在写入新值时解密。

When set as the first provider, the resource will be decrypted as new values are written.听起来令人困惑。如果资源在没有加密的情况下按原样写入etcd,为什么decrypted as new values are written意味着?

在之后

默认情况下,身份提供程序用于保护etcd中的机密,etcd不提供加密。

如果不进行加密,identity提供程序会提供什么样的安全性?如果进行加密,它是什么样的加密?

etcd中关于安全所述

etcd是否加密存储在磁盘驱动器上的数据?

否。etcd不加密存储在磁盘驱动器上的密钥/值数据。如果用户需要加密存储在etcd上的数据,有一些选项:

  • 让客户端应用程序加密和解密数据
  • 使用底层存储系统的功能来加密存储的数据,如dm crypt

问题的第一部分:

默认情况下,identity provider用于保护etcd中的机密,而etcd不提供加密。这意味着默认情况下,k8s api在etcd中存储机密时使用identity provider,并且它不提供任何加密

只使用一个提供程序使用EncryptionConfiguration:identity会得到与根本不使用EncryptionConfiguration相同的结果(假设您以前根本没有任何加密机密(。所有机密数据将以明文形式存储在etcd中。

示例:

providers:
- identity: {}

问题的第二部分:

按原样编写的资源没有加密。问题的第一部分对此进行了描述和解释

当设置为第一个提供程序时,资源将在写入新值时解密。

看看这个例子:

providers:
- aescbc:
keys:
- name: key1
secret: <BASE 64 ENCODED SECRET>
- identity: {}

此配置对您意味着什么:

  • EncryptionConfiguration中引入的新提供程序不会影响现有数据
  • etcd中所有现有的secrets(在应用此配置之前(仍为纯文本
  • 从该配置开始,所有新的secrets都将使用aescbc加密进行保存。etcd中的所有新secrets将具有前缀k8s:enc:aescbc:v1:key1
  • 在这种情况下,etcd中会有加密数据和未加密数据的混合

所以问题是我们为什么要使用这两个提供商?

  • 提供程序:aescbc用于在写入操作期间写入新的secrets作为加密数据,并在读取操作期间解密现有的secrets
  • provider:identity仍然需要读取所有未加密的秘密

现在我们正在切换EncryptionConfiguration:中的提供商

providers:
- identity: {}
- aescbc:
keys:
- name: key1
secret: <BASE 64 ENCODED SECRET>
  • 在这种情况下,etcd中混合了加密和未加密的数据
  • 从该配置开始,所有新的secrets都将以纯文本形式保存
  • 对于etcd中前缀为k8s:enc:aescbc:v1:key1的所有现有机密,provider:aescbc配置将用于解密存储在etcd中的现有机密

当设置为第一个提供程序时,资源将在写入新值时解密

为了从CCD_ 27切换到我们只有";未加密";数据,您应该对所有机密执行读/写操作:

$ kubectl get secrets --all-namespaces -o json | kubectl replace -f -

如果它不提供加密,但文档似乎在谈论解密以及它如何保护,为什么会出现它。

如果混合了加密和未加密的数据,则必须具有identity的提供程序类型或者,如果您想解密由另一个提供商加密的所有现有secrets(存储在etcd中(。

以下命令读取所有机密,然后更新它们以应用服务器端加密。更多细节可在本段中找到

$ kubectl get secrets --all-namespaces -o json | kubectl replace -f -

根据您的EncryptionConfiguration,如果第一个提供程序是:identity,则所有secrets都将被保存为未加密;如果第一个提供方是不同类型,则将被加密。

附加

默认设置为禁用EncryptionConfig。要使用它,您必须在kube-apiserver配置中添加--encryption-provider-configIdentity没有加密任何数据,根据加密提供商文档,它有3个N/A

最新更新