☸️ Шифрование секретов Kubernetes | Используем secrets — Information Security Squad
☸️ Шифрование секретов Kubernetes | Используем secrets

Kubernetes имеет встроенный объект «secrets», который позволяет вам хранить конфиденциальную информацию вашего приложения.

Эта сущность позволяет вам отделить учетные данные вашей базы данных, например, от спецификации вашего пода.

Секреты Kubernetes хранятся в базе данных etcd кластера.

Хотя это обеспечивает доступ ко всему кластеру, база данных не зашифрована.

В этом занятии мы рассмотрим создание новых секретов для вашего приложения, а затем узнаем, как ваши поды могут получить эти секреты.

Затем мы посмотрим на повышение безопасности ваших секретов, гарантируя, что они зашифрованы!

Настройте провайдер шифрования

Сгенерируйте 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: {}
Замените секретное значение для key1 ключом в кодировке base64, который мы создали ранее.

Добавить конфигурацию провайдера шифрования к контроллеру API Kubernetes

Откройте файл конфигурации для сервера API Kubernetes.

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.

Нет необходимости перезапускать сервисы.

Ротация ключей

Общее правило — регулярно менять ключи, чтобы обеспечить защиту своих секретов.

Мы делаем это, добавляя второй, недавно сгенерированный ключ в наш файл конфигурации провайдера шифрования, завершая процесс удалением исходного ключа.

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.

Снова откройте файл поставщика шифрования, а затем замените первый ключ вторым и удалите вторую запись.
kind: EncryptionConfiguration
apiVersion: apiserver.config.k8s.io/v1
resources:
   - resources:
     - secrets
     providers:
     - aescbc:
         keys:
         - name: key1
           secret: MRP2QNqGum6UowzL/aqmOG+luwn+/kQdxVuJxDjvlJI=
     - identity: {}
Еще раз сохраните изменения и перезапустите контроллер API.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40