Chiffrement des secrets

Configuration du chiffrement des secrets

RKE2 prend en charge le chiffrement des secrets au repos, et effectuera automatiquement les actions suivantes :

  • Générer une clé AES-CBC.

  • Générer un fichier de configuration de chiffrement avec la clé générée.

  • Passer la configuration au serveur APIServer Kubernetes en tant que configuration du fournisseur de chiffrement.

Choix du fournisseur de chiffrement

Version Gate

Disponible à partir des versions d’avril 2025 : v1.30.12+rke2r1, v1.31.8+rke2r1, v1.32.4+rke2r1, v1.33.0+rke2r1.

Conformité FIPS

La conformité FIPS 140-3 n’est disponible qu’avec le fournisseur aescbc.

En utilisant le drapeau --secrets-encryption-provider, vous pouvez choisir quel fournisseur de chiffrement utiliser. La valeur par défaut est aescbc.

RKE2 prend en charge les fournisseurs de chiffrement suivants :

  • aescbc : AES-CBC avec un remplissage PKCS#7

  • secretbox : XSalsa20 et Poly1305

Migration des fournisseurs

Vous pouvez migrer du fournisseur de chiffrement aescbc au fournisseur de chiffrement secretbox en suivant ces étapes :

  1. Assurez-vous que le fournisseur secretbox est pris en charge par votre version de RKE2.

  2. Mettez à jour/ajoutez le drapeau secrets-encryption-provider dans votre fichier de configuration RKE2 à secretbox.

  3. Faire tourner les clés de chiffrement, en suivant la section [Encryption Key Rotation] ci-dessous.

Fichier de configuration de chiffrement généré

Voici un exemple du fichier de configuration de chiffrement que RKE2 génère avec le fournisseur par défaut aescbc :

#/var/lib/rancher/rke2/server/cred/encryption-config.json
{
  "kind": "EncryptionConfiguration",
  "apiVersion": "apiserver.config.k8s.io/v1",
  "resources": [
    {
      "resources": [
        "secrets"
      ],
      "providers": [
        {
          "aescbc": {
            "keys": [
              {
                "name": "aescbckey",
                "secret": "xxxxxxxxxxxxxxxxxxx"
              }
            ]
          }
        },
        {
          "identity": {}
        }
      ]
    }
  ]
}

Outil de chiffrement des secrets

RKE2 contient une sous-commande secrets-encrypt, qui permet aux administrateurs d’effectuer les tâches suivantes :

  • Ajout de nouvelles clés de chiffrement

  • Rotation et suppression des clés de chiffrement

  • Réchiffrement des secrets

Le non-respect de la procédure appropriée lors de la rotation des clés de chiffrement des secrets peut entraîner une perte de données permanente. Il est recommandé de créer un instantané avant de faire tourner. Procédez avec prudence.

Rotation des Clés de Chiffrement

Version Gate

Disponible à partir des versions de septembre 2024 : v1.29.9+rke2r1, v1.30.5+rke2r1, v1.31.1+rke2r1.

Pour les versions plus anciennes, voir [Encryption Key Rotation Classic].

  • Serveur unique

  • Haute disponibilité

Pour faire tourner les clés de chiffrement des secrets sur un cluster à serveur unique :

  1. Faire tourner les clés de chiffrement des secrets.

    rke2 secrets-encrypt rotate-keys
  2. Attendre la fin du rechiffrement. Surveiller les journaux du serveur, ou attendre :

    $ rke2 secrets-encrypt status
    Encryption Status: Enabled
    Current Rotation Stage: reencrypt_finished

Pour faire tourner les clés de chiffrement des secrets sur des configurations à haute disponibilité :

Dans cet exemple, 3 serveurs sont utilisés pour un cluster à haute disponibilité, appelés S1, S2, S3. Il est recommandé de choisir un nœud serveur à partir duquel exécuter les commandes secrets-encrypt.

  1. Faire tourner les clés de chiffrement des secrets sur S1.

    rke2 secrets-encrypt rotate-keys
  2. Attendre la fin du rechiffrement. Surveiller les journaux du serveur, ou attendre :

    $ rke2 secrets-encrypt status
    Encryption Status: Enabled
    Current Rotation Stage: reencrypt_finished
  3. Redémarrez séquentiellement RKE2 sur S1, S2, S3.

    systemctl restart rke2-server.service

    Attendez que la commande systemctl ait terminé avant de redémarrer le serveur suivant.

Rotation des clés de chiffrement classique

Nouvelle procédure

Si vous utilisez des versions RKE2 plus récentes que v1.30.1+rke2r1, nous vous recommandons d’utiliser le [Encryption Key Rotation] à la place.

  • Serveur unique

  • Haute disponibilité

Pour faire tourner les clés de chiffrement des secrets sur un cluster à nœud unique :

  1. Préparer :

    rke2 secrets-encrypt prepare
  2. Redémarrez le pod kube-apiserver :

    # Get the kube-apiserver container ID export CONTAINER_RUNTIME_ENDPOINT="unix:///var/run/k3s/containerd/containerd.sock" crictl ps --name kube-apiserver # Stop the pod crictl stop <CONTAINER_ID>
  3. Faire tourner :

    rke2 secrets-encrypt rotate
  4. Redémarrez à nouveau le pod kube-apiserver.

  5. Réencrypter :

    rke2 secrets-encrypt reencrypt

Pour faire tourner les clés de chiffrement des secrets sur des configurations à haute disponibilité :

Dans cet exemple, 3 serveurs sont utilisés pour un cluster à haute disponibilité, appelés S1, S2, S3. Bien que cela ne soit pas obligatoire, il est recommandé de choisir un nœud serveur à partir duquel exécuter les commandes secrets-encrypt.

  1. Préparer sur S1.

    rke2 secrets-encrypt prepare
  2. Redémarrez séquentiellement S1, S2, S3.

    systemctl restart rke2-server.service

    Attendez que la commande systemctl ait terminé avant de redémarrer le serveur suivant.

  3. Faire tourner sur S1.

    rke2 secrets-encrypt rotate
  4. Redémarrez séquentiellement S1, S2, S3.

  5. Réencrypter sur S1.

    rke2 secrets-encrypt reencrypt

    Attendez que la réencryption soit terminée, soit via les journaux du serveur journalctl -u rke2-server, soit via rke2 secrets-encrypt status. Le statut renverra reencrypt_finished une fois terminé.

  6. Redémarrez séquentiellement S1, S2, S3.

État du chiffrement des secrets

La sous-commande secrets-encrypt status affiche des informations sur l’état actuel du chiffrement des secrets sur le nœud.

Un exemple de la commande sur un nœud à serveur unique :

$ rke2 secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: start
Server Encryption Hashes: All hashes match

Active  Key Type  Name
------  --------  ----
 *      AES-CBC   aescbckey

Un autre exemple sur un cluster HA, après avoir fait tourner les clés, mais avant de redémarrer les serveurs :

$ rke2 secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: rotate
Server Encryption Hashes: hash does not match between node-1 and node-2

Active  Key Type  Name
------  --------  ----
 *      AES-CBC   aescbckey-2021-12-10T22:54:38Z
        AES-CBC   aescbckey

Les détails de chaque section sont les suivants :

  • État du chiffrement : Affiche si le chiffrement des secrets est désactivé ou activé sur le nœud

  • Étape de rotation actuelle : Indique l’étape de rotation actuelle sur le nœud. Les étapes sont : start, prepare, rotate, reencrypt_request, reencrypt_active, reencrypt_finished

  • Hachages de chiffrement des serveurs : Utile pour les clusters HA, cela indique si tous les serveurs sont au même stade avec leurs fichiers locaux. Cela peut être utilisé pour identifier si un redémarrage des serveurs est nécessaire avant de passer à l’étape suivante. Dans l’exemple HA ci-dessus, le nœud-1 et le nœud-2 ont des hachages différents, indiquant qu’ils n’ont actuellement pas la même configuration de chiffrement. Le redémarrage des serveurs synchronisera leur configuration.

Table des clés Description

Actives

Le * indique lesquelles, le cas échéant, des clés sont actuellement utilisées pour le chiffrement des secrets. La clé active est utilisée par Kubernetes pour chiffrer tous les nouveaux secrets.

Type de clé

RKE2 ne prend en charge que le type de clé AES-CBC. Trouvez plus d’informations ici.

Nom

Nom de la clé de chiffrement. La valeur par défaut est aescbckey-<DATE_AND_TIME>.