Skip to content

Шифрование секретов

Хранение секретов в etcd в зашифрованном виде

Краткая инструкция о том, как подтвердить, что шифрование включено:

  • Убедиться, что ключ шифрования для метода secretbox присутствует в machineconfig.
console
$ talosctl -n 10.4.4.50 get machineconfig v1alpha1 -o yaml | yq -r .spec | yq .cluster | grep secretboxEncryptionSecret
secretboxEncryptionSecret: Z9pEjj/yu13rlEsXwVSEo7GbuFFt45XHzeBqS19oCNw= # A key used for the [encryption of secret data at rest](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/).
  • Убедиться, что конфиг шифрования передан в аргументы kube-apiserver:
console
$ talosctl -n 10.4.4.50 get staticpod kube-apiserver -o yaml | grep encryption-provider
                - --encryption-provider-config=/system/secrets/kubernetes/kube-apiserver/encryptionconfig.yaml
  • Убедиться, что в конфиге шифрования указан метод secretbox выше приоритетом чем identity (отсутствие шифрования):
console
talosctl -n 10.4.4.50 read /system/secrets/kubernetes/kube-apiserver/encryptionconfig.yaml
apiVersion: v1
kind: EncryptionConfig
resources:
- resources:
  - secrets
  providers:

  - secretbox:
      keys:
      - name: key2
        secret: Z9pEjj/yu13rlEsXwVSEo7GbuFFt45XHzeBqS19oCNw=

  - identity: {}
  • Попробовать прочитать секрет из базы данных etcd:
console
$ kubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret
$ talosctl -n 10.4.4.50 read /system/secrets/etcd/ca.crt > ca.crt
$ talosctl -n 10.4.4.50 read /system/secrets/etcd/server.crt > server.crt
$ talosctl -n 10.4.4.50 read /system/secrets/etcd/server.key > server.key
$ ETCDCTL_API=3 etcdctl --endpoints=https://10.4.4.50:2379 --cacert=./ca.crt --cert=./server.crt --key=./server.key get /registry/secrets/default/my-secret
/registry/secrets/default/my-secret
k8s:enc:secretbox:v1:key2:���ٸ�����o���x�҄K*�;�.�^6b�{�Y�η��&��+��H�!.y�����s�a��!S�zZ;La��..

Пример вывода без шифрования (ванильный kubernetes кластер):

console
$ ETCDCTL_API=3 etcdctl --endpoints=https://10.4.4.153:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key get /registry/secrets/default/my-secret
/registry/secrets/default/my-secret
k8s
v1Secret�

        my-secretdefault"*$d7334cb3-d3e7-4a7b-a492-fca88b8539182�����m
kubectl-createUpdatev����FieldsV1:9
7{"f:data":{".":{},"f:key1":{},"f:key2":{}},"f:type":{}}B
key1
    supersecret
key2    topsecretOpaque"

Хранение секретов во внешнем хранилище

При необходимости хранение секротов может быть настроено во внешнем хранилище, например Openbao.

Полезное

Документация kubernetes по шифрованию

Опубликовано под лицензией GPL-3.0+. Содержание доступно по лицензии CC BY-SA 4.0, если не указано иное. Разработано участниками ALT Orchestra.