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 |
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 :
-
Assurez-vous que le fournisseur
secretboxest pris en charge par votre version de RKE2. -
Mettez à jour/ajoutez le drapeau
secrets-encryption-providerdans votre fichier de configuration RKE2 àsecretbox. -
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 :
-
Faire tourner les clés de chiffrement des secrets.
rke2 secrets-encrypt rotate-keys -
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 |
-
Faire tourner les clés de chiffrement des secrets sur S1.
rke2 secrets-encrypt rotate-keys -
Attendre la fin du rechiffrement. Surveiller les journaux du serveur, ou attendre :
$ rke2 secrets-encrypt status Encryption Status: Enabled Current Rotation Stage: reencrypt_finished -
Redémarrez séquentiellement RKE2 sur S1, S2, S3.
systemctl restart rke2-server.serviceAttendez 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 :
-
Préparer :
rke2 secrets-encrypt prepare -
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> -
Faire tourner :
rke2 secrets-encrypt rotate -
Redémarrez à nouveau le pod
kube-apiserver. -
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 |
-
Préparer sur S1.
rke2 secrets-encrypt prepare -
Redémarrez séquentiellement S1, S2, S3.
systemctl restart rke2-server.serviceAttendez que la commande systemctl ait terminé avant de redémarrer le serveur suivant.
-
Faire tourner sur S1.
rke2 secrets-encrypt rotate
-
Redémarrez séquentiellement S1, S2, S3.
-
Réencrypter sur S1.
rke2 secrets-encrypt reencryptAttendez que la réencryption soit terminée, soit via les journaux du serveur
journalctl -u rke2-server, soit viarke2 secrets-encrypt status. Le statut renverrareencrypt_finishedune fois terminé. -
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 |
Type de clé |
RKE2 ne prend en charge que le type de clé |
Nom |
Nom de la clé de chiffrement. La valeur par défaut est |