Kubernetes静态加密密码

时间:2020-01-09 10:34:20  来源:igfitidea点击:

说明

Kubernetes有一个内置的"secrets"对象,它使我们可以存储应用程序的敏感信息。例如,这使我们可以将后端数据库凭据与Pod规范分开。

Kubernetes机密存储在集群的etcd数据库中。虽然这为整个群集提供了访问权限,但数据库未加密。

在本教程中,我们将研究为应用程序创建新的机密,然后Pod如何获取这些机密。

然后,我们将通过确保静态密码被加密来改善密码的安全性。

配置加密提供程序

  • 生成一个32字节的随机密钥,并对其进行base64编码。
head -c 32 /dev/urandom | base64

输出将类似于以下示例。记下输出,因为我们将在配置文件中使用它。

WxaW1k22mu3M/WYMIWYVOkAOrOTJ17+Q5+McAIqK3bM=
  • 创建一个名为/etc/kubernetes/pki/secrets.yml的新文件
  • 在其内容中添加以下内容。
kind: EncryptionConfiguration
apiVersion: apiserver.config.k8s.io/v1
resources:
   - resources:
     - secrets
     providers:
     - aescbc:
         keys:
         - name: key1
           secret: MnBTeg6QwRCS2/ZGynIAKtU48n+zgQHLldDIZibIuW0=
     - identity: {}

用我们之前创建的base64编码密钥替换key1的秘密值。

将加密提供程序配置添加到Kubernetes的API控制器

  • 打开Kubernetes API服务器的配置文件。
vi /etc/kubernetes/manifests/kube-apiserver.yaml
  • 查找以下部分
spec:
   containers:
   - command:
     - kube-apiserver
     - --authorization-mode=Node,RBAC
     [...]

并在-kube-apiserver下添加以下行。

- --encryption-provider-config=/etc/kubernetes/pki/secrets.yaml
  • 保存到清单的更改将由API控制器自动加载。无需重新启动服务。

旋转钥匙

一般的经验法则是定期旋转密钥,以确保秘密得到保护。为此,我们向加密提供程序配置文件中添加了第二个新生成的密钥,并通过删除原始密钥来完成该过程。

  • 生成一个新的base64编码密钥。
head -c 32 /dev/urandom | base64
  • 打开加密提供程序文件。
sudo vi /etc/kubernetes/pki/sercrets.yaml
  • 将第二个密钥添加到提供程序。
kind: EncryptionConfiguration
apiVersion: apiserver.config.k8s.io/v1
resources:
   - resources:
     - secrets
     providers:
     - aescbc:
         keys:
         - name: key1
           secret: MnBTeg6QwRCS2/ZGynIAKtU48n+zgQHLldDIZibIuW0=
         - name: key2
           secret: MRP2QNqGum6UowzL/aqmOG+luwn+/kQdxVuJxDjvlJI=
     - identity: {}
  • 保存更改,然后重新启动API Controller。
  • 再次打开加密提供程序文件,然后用第二个密钥替换第一个密钥并删除第二个条目。
kind: EncryptionConfiguration
apiVersion: apiserver.config.k8s.io/v1
resources:
   - resources:
     - secrets
     providers:
     - aescbc:
         keys:
         - name: key1
           secret: MRP2QNqGum6UowzL/aqmOG+luwn+/kQdxVuJxDjvlJI=
     - identity: {}
  • 再次保存更改,然后重新启动API Controller。