Verschlüsselung von Geheimnissen
Secrets-Verschlüsselungskonfiguration
RKE2 unterstützt die Verschlüsselung von Geheimnissen im Ruhezustand und wird Folgendes automatisch durchführen:
-
Einen AES-CBC-Schlüssel generieren.
-
Erzeugen Sie eine Konfigurationsdatei für die Verschlüsselung mit dem generierten Schlüssel.
-
Die Konfiguration als encryption-provider-config an den Kubernetes APIServer übergeben.
Wahl des Verschlüsselungsanbieters
|
Versionssperre
Verfügbar ab den Versionen vom April 2025: v1.30.12+rke2r1, v1.31.8+rke2r1, v1.32.4+rke2r1, v1.33.0+rke2r1. |
|
FIPS-Kompatibilität
Die FIPS 140-3-Kompatibilität ist nur mit dem |
Mit dem --secrets-encryption-provider Flag können Sie auswählen, welchen Verschlüsselungsanbieter Sie verwenden möchten. Der Standardwert ist aescbc.
RKE2 unterstützt die folgenden Verschlüsselungsanbieter:
-
aescbc: AES-CBC mit PKCS#7-Padding -
secretbox: XSalsa20 und Poly1305
Anbieter migrieren
Sie können vom aescbc Anbieter zum secretbox Anbieter migrieren, indem Sie die folgenden Schritte befolgen:
-
Stellen Sie sicher, dass der
secretboxAnbieter von Ihrer RKE2-Version unterstützt wird. -
Aktualisieren oder fügen Sie das
secrets-encryption-provider-Flag in Ihrer RKE2-Konfigurationsdatei aufsecretboxhinzu. -
Rotieren Sie die Verschlüsselungsschlüssel gemäß dem Abschnitt [Encryption Key Rotation] weiter unten.
Generierte Verschlüsselungskonfigurationsdatei
Nachfolgend finden Sie ein Beispiel für die Verschlüsselungskonfigurationsdatei, die RKE2 mit dem aescbc Standardanbieter generiert:
#/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": {}
}
]
}
]
}
Geheimnisverschlüsselungs-Tool
RKE2 enthält einen Unterbefehl secrets-encrypt, der es Administratoren ermöglicht, die folgenden Aufgaben auszuführen:
-
Hinzufügen neuer Verschlüsselungsschlüssel
-
Rotation und Löschen von Verschlüsselungsschlüsseln
-
Geheimnisse erneut verschlüsseln
|
Das Nichteinhalten der richtigen Verfahren beim Rotieren der Verschlüsselungsschlüssel für Geheimnisse kann zu permanentem Datenverlust führen. Es wird empfohlen, vor der Rotation einen Snapshot zu erstellen. Vorsicht geboten. |
Drehung der Verschlüsselungsschlüssel
|
Versionssperre
Verfügbar ab den Versionen vom September 2024: v1.29.9+rke2r1, v1.30.5+rke2r1, v1.31.1+rke2r1. |
Für ältere Versionen siehe [Encryption Key Rotation Classic].
-
Einzelserver
-
Hochverfügbarkeit
Um die Verschlüsselungsschlüssel für Geheimnisse in einem Einzelserver-Cluster zur Rotation zu bringen:
-
Rotieren Sie die Verschlüsselungsschlüssel für Geheimnisse.
rke2 secrets-encrypt rotate-keys -
Warten Sie, bis die Neuverschlüsselung abgeschlossen ist. Überwachen Sie die Serverprotokolle oder warten Sie auf:
$ rke2 secrets-encrypt status Encryption Status: Enabled Current Rotation Stage: reencrypt_finished
Um die Verschlüsselungsschlüssel für Geheimnisse in HA-setups zu drehen:
|
In diesem Beispiel werden 3 Server für ein HA-Cluster verwendet, die als S1, S2, S3 bezeichnet werden. Es wird empfohlen, einen Serverknoten auszuwählen, von dem aus die |
-
Rotieren Sie die Verschlüsselungsschlüssel für Geheimnisse auf S1.
rke2 secrets-encrypt rotate-keys -
Warten Sie, bis die Neuverschlüsselung abgeschlossen ist. Überwachen Sie die Serverprotokolle oder warten Sie auf:
$ rke2 secrets-encrypt status Encryption Status: Enabled Current Rotation Stage: reencrypt_finished -
Starten Sie RKE2 nacheinander auf S1, S2, S3 neu.
systemctl restart rke2-server.serviceWarten Sie, bis der systemctl-Befehl zurückkehrt, bevor Sie den nächsten Server neu starten.
Klassische Verschlüsselungsschlüsselrotation
|
Neue Vorgehensweise
Wenn Sie RKE2-Versionen verwenden, die neuer sind als v1.30.1+rke2r1, empfehlen wir die Verwendung von [Encryption Key Rotation] stattdessen. |
-
Einzelserver
-
Hochverfügbarkeit
Um die Verschlüsselungsschlüssel für Geheimnisse in einem Einzelknoten-Cluster zu rotieren:
-
Vorbereiten:
rke2 secrets-encrypt prepare -
Starten Sie den
kube-apiserverPod neu:# 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> -
Rotieren:
rke2 secrets-encrypt rotate -
Starten Sie den
kube-apiserverPod erneut. -
Neuverschlüsseln:
rke2 secrets-encrypt reencrypt
Um die Verschlüsselungsschlüssel für Geheimnisse in HA-setups zu drehen:
|
In diesem Beispiel werden 3 Server für ein HA-Cluster verwendet, die als S1, S2, S3 bezeichnet werden. Obwohl es nicht erforderlich ist, wird empfohlen, einen Serverknoten auszuwählen, von dem aus die |
-
Bereiten Sie auf S1 vor.
rke2 secrets-encrypt prepare -
Starten Sie S1, S2, S3 nacheinander neu.
systemctl restart rke2-server.serviceWarten Sie, bis der systemctl-Befehl zurückkehrt, bevor Sie den nächsten Server neu starten.
-
Rotieren Sie auf S1.
rke2 secrets-encrypt rotieren
-
Starten Sie S1, S2, S3 nacheinander neu.
-
Reverschlüsseln Sie auf S1.
rke2 secrets-encrypt reencryptWarten Sie, bis die Reverschlüsselung abgeschlossen ist, entweder über die Serverprotokolle
journalctl -u rke2-serveroder überrke2 secrets-encrypt status. Der Status gibtreencrypt_finishedzurück, wenn alles abgeschlossen ist. -
Starten Sie S1, S2, S3 nacheinander neu.
Verschlüsselungsstatus der Geheimnisse
Der secrets-encrypt status Unterbefehl zeigt Informationen über den aktuellen Status der Verschlüsselung von Geheimnissen auf dem Knoten an.
Ein Beispiel für den Befehl auf einem Einzelserver-Knoten:
$ rke2 secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: start
Server Encryption Hashes: All hashes match
Active Key Type Name
------ -------- ----
* AES-CBC aescbckey
Ein weiteres Beispiel in einem HA-Cluster, nach der Rotation der Schlüssel, aber bevor die Server neu gestartet werden:
$ 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
Die Details zu jedem Abschnitt sind wie folgt:
-
Verschlüsselungsstatus: Zeigt an, ob die Geheimnisverschlüsselung auf dem Knoten deaktiviert oder aktiviert ist.
-
Aktueller Rotationsstatus: Gibt den aktuellen Rotationsstatus auf dem Knoten an. Die Stufen sind:
start,prepare,rotate,reencrypt_request,reencrypt_active,reencrypt_finished -
Server-Verschlüsselungshashes: Nützlich für HA-Cluster, zeigt dies an, ob alle Server sich im gleichen Status mit ihren lokalen Dateien befinden. Dies kann verwendet werden, um zu identifizieren, ob ein Neustart der Server erforderlich ist, bevor mit der nächsten Stufe fortgefahren wird. Im obigen HA-Beispiel haben Knoten-1 und Knoten-2 unterschiedliche Hashes, was darauf hinweist, dass sie derzeit nicht die gleiche Verschlüsselungskonfiguration haben. Ein Neustart der Server wird ihre Konfiguration synchronisieren.
| Schlüsseltabelle | Beschreibung |
|---|---|
Aktiv |
Das |
Schlüsseltyp |
RKE2 unterstützt nur den |
Name |
Name des Verschlüsselungsschlüssels. Der Standardwert ist |