CIS 1.11 Selbstbewertungsanleitung

Übersicht

Dieses Dokument ist ein Begleitdokument zum RKE2-Härtungsleitfaden. Der Härtungsleitfaden bietet konkrete Anleitungen zur Härtung einer Produktionsinstallation von RKE2, und dieser Benchmark-Leitfaden soll Ihnen helfen, das Sicherheitsniveau des gehärteten Clusters im Vergleich zu jeder Kontrolle im CIS Kubernetes Benchmark zu bewerten. Er ist für RKE2-Betreiber, Sicherheitsteams, Prüfer und Entscheidungsträger gedacht.

Dieser Leitfaden ist spezifisch für die v1.29-1.34 Release-Linie von RKE2 und die v1.11 Version des CIS Kubernetes Benchmark.

Für weitere Informationen zu jeder Kontrolle, einschließlich detaillierter Begründungen und Prüfungsbeschreibungen, finden Sie diese im entsprechenden Abschnitt des CIS Kubernetes Benchmark v1.8. Sie können den Benchmark herunterladen, nachdem Sie ein kostenloses Konto erstellt haben, im Center for Internet Security (CIS).

Testmethodik für Kontrollen

Jede Kontrolle im CIS Kubernetes Benchmark wurde gegen ein RKE2-Cluster bewertet, das gemäß dem begleitenden Härtungsleitfaden konfiguriert wurde.

Dies sind die möglichen Ergebnisse für jede Kontrolle:

  • BESTANDEN - Die Kontrolle ist automatisiert (bewertet: wahr). Das getestete RKE2-Cluster hat die im Benchmark skizzierte Prüfung bestanden.

  • Nicht anwendbar - Die Kontrolle ist nicht anwendbar (Typ: überspringen) für RKE2, aufgrund der Art und Weise, wie es konzipiert ist, zu arbeiten. Der Abschnitt zur Begründung wird erklären, warum dies so ist.

  • WARNUNG - Die Kontrolle ist manuell (bewertet: falsch) im CIS-Benchmark und hängt von der manuellen Intervention des Betreibers ab. Der Abschnitt zur Behebung wird Anleitungen geben, wie man ein BESTANDEN-Ergebnis erzielt.

1 Sicherheitskonfiguration der Steuerungsebene

1.1 Konfigurationsdateien für Control-Plane-Knoten

1.1.1 Stellen Sie sicher, dass die Berechtigungen der API-Server-Pod-Spezifikationsdatei auf 600 oder restriktiver gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml

Erwartetes Ergebnis: Die Berechtigungen sind auf 600 gesetzt, erwartet 600 oder restriktiver

Zurückgegebener Wert:
permissions=600
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Knoten der Steuerungsebene aus. Zum Beispiel, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml

1.1.2 Stellen Sie sicher, dass der Eigentümer der API-Server-Pod-Spezifikationsdatei auf root:root gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml; fi'

Erwartetes Ergebnis: 'root:root' ist gleich 'root:root'

Zurückgegebener Wert:
root:root
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-apiserver.yaml

1.1.3 Stellen Sie sicher, dass die Berechtigungen der Controller-Manager-Pod-Spezifikationsdatei auf 600 oder restriktiver gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; then stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; fi'

Erwartetes Ergebnis: Die Berechtigungen sind auf 600 gesetzt, erwartet 600 oder restriktiver

Zurückgegebener Wert:
permissions=600
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml

1.1.4 Stellen Sie sicher, dass der Eigentümer der Controller-Manager-Pod-Spezifikationsdatei auf root:root gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml; fi'

Erwartetes Ergebnis: 'root:root' ist gleich 'root:root'

Zurückgegebener Wert:
root:root
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-controller-manager.yaml

1.1.5 Stellen Sie sicher, dass die Berechtigungen der Scheduler-Pod-Spezifikationsdatei auf 600 oder restriktiver gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; then stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; fi'

Erwartetes Ergebnis: Die Berechtigungen sind auf 600 gesetzt, erwartet 600 oder restriktiver

Zurückgegebener Wert:
permissions=600
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml

1.1.6 Stellen Sie sicher, dass der Eigentümer der Scheduler-Pod-Spezifikationsdatei auf root:root gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml; fi'

Erwartetes Ergebnis: 'root:root' ist vorhanden

Zurückgegebener Wert:
root:root
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/kube-scheduler.yaml

1.1.7 Stellen Sie sicher, dass die Berechtigungen der etcd-Pod-Spezifikationsdatei auf 600 oder restriktiver gesetzt sind (Manuell)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; then stat -c permissions=%a /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; fi'

Erwartetes Ergebnis: Die Berechtigungen sind auf 600 gesetzt, erwartet 600 oder restriktiver

Zurückgegebener Wert:
permissions=600
Behebung:

Wenn nur der Master ohne etcd-Rolle ausgeführt wird, ist diese Überprüfung nicht anwendbar. Wenn die Rollen Steuerung und etcd auf denselben Knoten vorhanden sind, aber diese Überprüfung eine Warnung ist, dann führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chmod 600 /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml

1.1.8 Stellen Sie sicher, dass der Eigentümer der etcd-Pod-Spezifikationsdatei auf root:root gesetzt ist (Manuell)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; then stat -c %U:%G /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml; fi'

Erwartetes Ergebnis: 'root:root' ist gleich 'root:root'

Zurückgegebener Wert:
root:root
Behebung:

Wenn nur der Master ohne etcd-Rolle ausgeführt wird, ist diese Überprüfung nicht anwendbar. Wenn die Rollen Steuerung und etcd auf denselben Knoten vorhanden sind, aber diese Überprüfung eine Warnung ist, dann führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chown root:root /var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml

1.1.9 Stellen Sie sicher, dass die Berechtigungen der Container-Netzwerkschnittstellendatei auf 600 oder restriktiver gesetzt sind (Manuell)

Ergebnis: WARN

Behebung: Beachten Sie, dass für viele CNIs eine Sperrdatei mit Berechtigungen 750 erstellt wird. Dies ist zu erwarten und kann ignoriert werden. Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chmod 600 /var/lib/cni/networks/<filename> and chmod 600 /etc/cni/net.d/<filename>

1.1.10 Stellen Sie sicher, dass der Eigentümer der Datei der Container-Netzwerkschnittstelle auf root:root gesetzt ist (Manuell)

Ergebnis: PASS

Revision:

ps -fC ${kubeletbin:-kubelet} | grep -- --cni-conf-dir || echo "/etc/cni/net.d" | sed 's%.*cni-conf-dir[= ]\([^ ]*\).*%\1%' | xargs -I{} find {} -mindepth 1 | xargs --no-run-if-empty stat -c %U:%G
find /var/lib/cni/networks -type f 2> /dev/null | xargs --no-run-if-empty stat -c %U:%G

Erwartetes Ergebnis: 'root:root' ist vorhanden

Zurückgegebener Wert:
root:root
root:root
root:root
root:root
root:root
root:root
root:root
root:root
root:root
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chown root:root <path/to/cni/files>

1.1.11 Stellen Sie sicher, dass die Berechtigungen des etcd-Verzeichnisses auf 700 oder restriktiver gesetzt sind (Manuell)

Ergebnis: PASS

Revision:

stat -c permissions=%a /var/lib/rancher/rke2/server/db/etcd

Erwartetes Ergebnis: Die Berechtigungen sind auf 700 gesetzt; es werden 700 oder restriktivere Berechtigungen erwartet.

Zurückgegebener Wert:
permissions=700
Behebung:

Wenn nur der Master ohne etcd-Rolle ausgeführt wird, ist diese Überprüfung nicht anwendbar. Wenn die Rollen Controlplane und etcd auf denselben Knoten vorhanden sind, jedoch diese Überprüfung nur als Warnhinweis gilt, dann ermitteln Sie auf dem etcd-Serverknoten das etcd-Datenverzeichnis, das als Argument --data-dir im Befehl 'ps -ef | grep etcd' übergeben wird. Führen Sie den folgenden Befehl aus (basierend auf dem oben gefundenen etcd-Datenverzeichnis). Zum Beispiel, chmod 700 /var/lib/rancher/rke2/server/db/etcd

1.1.12 Stellen Sie sicher, dass der Eigentümer des etcd-Datenverzeichnisses (Verzeichnis) auf etcd:etcd gesetzt ist (Manuell)

Ergebnis: PASS

Revision:

stat -c %U:%G /var/lib/rancher/rke2/server/db/etcd

Erwartetes Ergebnis: 'etcd:etcd' ist vorhanden

Zurückgegebener Wert:
etcd:etcd
Behebung:

Wenn nur der Master ohne etcd-Rolle ausgeführt wird, ist diese Überprüfung nicht anwendbar. Wenn die Rollen Controlplane und etcd auf denselben Knoten vorhanden sind, jedoch diese Überprüfung nur als Warnhinweis gilt, dann ermitteln Sie auf dem etcd-Serverknoten das etcd-Datenverzeichnis, das als Argument --data-dir im Befehl 'ps -ef | grep etcd' übergeben wird. Führen Sie den folgenden Befehl aus (basierend auf dem oben gefundenen etcd-Datenverzeichnis). Zum Beispiel, chown etcd:etcd /var/lib/rancher/rke2/server/db/etcd

1.1.13 Stellen Sie sicher, dass die Berechtigungen der admin.conf-Datei auf 600 oder restriktiver gesetzt sind (automatisiert)

Ergebnis: PASS

Revision:

stat -c permissions=%a /var/lib/rancher/rke2/server/cred/admin.kubeconfig

Erwartetes Ergebnis: Die Berechtigungen sind auf 600 gesetzt, erwartet 600 oder restriktiver

Zurückgegebener Wert:
permissions=600
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chmod 600 /var/lib/rancher/rke2/server/cred/admin.kubeconfig

1.1.14 Stellen Sie sicher, dass der Besitz der admin.conf-Datei auf root:root gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

stat -c %U:%G /var/lib/rancher/rke2/server/cred/admin.kubeconfig

Erwartetes Ergebnis: 'root:root' ist gleich 'root:root'

Zurückgegebener Wert:
root:root
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chown root:root /var/lib/rancher/rke2/server/cred/admin.kubeconfig

1.1.15 Stellen Sie sicher, dass die Berechtigungen der scheduler.conf-Datei auf 600 oder restriktiver gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig; fi'

Erwartetes Ergebnis: Die Berechtigungen sind auf 600 gesetzt, erwartet 600 oder restriktiver

Zurückgegebener Wert:
permissions=600
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chmod 600 /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig

1.1.16 Stellen Sie sicher, dass der Besitz der scheduler.conf-Datei auf root:root gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

stat -c %U:%G /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig

Erwartetes Ergebnis: 'root:root' ist gleich 'root:root'

Zurückgegebener Wert:
root:root
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chown root:root /var/lib/rancher/rke2/server/cred/scheduler.kubeconfig

1.1.17 Stellen Sie sicher, dass die Berechtigungen der controller-manager.conf-Datei auf 600 oder restriktiver gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/server/cred/controller.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/server/cred/controller.kubeconfig; fi'

Erwartetes Ergebnis: Die Berechtigungen sind auf 600 gesetzt, erwartet 600 oder restriktiver

Zurückgegebener Wert:
permissions=600
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chmod 600 /var/lib/rancher/rke2/server/cred/controller.kubeconfig

1.1.18 Stellen Sie sicher, dass der Besitz der controller-manager.conf-Datei auf root:root gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

stat -c %U:%G /var/lib/rancher/rke2/server/cred/controller.kubeconfig

Erwartetes Ergebnis: 'root:root' ist gleich 'root:root'

Zurückgegebener Wert:
root:root
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chown root:root /var/lib/rancher/rke2/server/cred/controller.kubeconfig

1.1.19 Stellen Sie sicher, dass das Kubernetes PKI-Verzeichnis und der Dateibesitz auf root:root gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

stat -c %U:%G /var/lib/rancher/rke2/server/tls

Erwartetes Ergebnis: 'root:root' ist gleich 'root:root'

Zurückgegebener Wert:
root:root
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chown -R root:root /var/lib/rancher/rke2/server/tls

1.1.20 Stellen Sie sicher, dass die Berechtigungen der Kubernetes PKI-Zertifikatdatei auf 644 oder restriktiver eingestellt sind (Automatisiert)

Ergebnis: PASS

Revision:

stat -c permissions=%a /var/lib/rancher/rke2/server/tls/*.crt

Erwartetes Ergebnis: Die Berechtigungen betragen 644; es werden 644 oder restriktivere Berechtigungen erwartet.

Zurückgegebener Wert:
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
permissions=644
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel, chmod -R 644 /var/lib/rancher/rke2/server/tls/*.crt
Standardmäßig setzt RKE2 die Berechtigungen der PKI-Zertifikatdateien auf 644, restriktivere Berechtigungen wie 600 werden unterstützt.

1.1.21 Stellen Sie sicher, dass die Berechtigungen der Kubernetes PKI-Schlüsseldatei auf 600 eingestellt sind (Automatisiert)

Ergebnis: PASS

Revision:

stat -c permissions=%a /var/lib/rancher/rke2/server/tls/*.key

Erwartetes Ergebnis: Die Berechtigungen sind auf 600 gesetzt, erwartet 600 oder restriktiver

Zurückgegebener Wert:
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
permissions=600
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System) auf dem Steuerungsknoten aus. Zum Beispiel chmod -R 600 /var/lib/rancher/rke2/server/tls/*.key

1.2 API-Server

1.2.1 Stellen Sie sicher, dass das --anonymous-auth-Argument auf false gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--anonymous-auth' ist gleich 'false'

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 das --anonymous-auth-Argument auf false. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alles, was dem Folgenden ähnelt.

kube-apiserver-arg:
  - "anonymous-auth=true"

1.2.2 Stellen Sie sicher, dass der --token-auth-file Parameter nicht gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--token-auth-file' ist nicht vorhanden

Rückgabewert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Befolgen Sie die Dokumentation und konfigurieren Sie alternative Mechanismen zur Authentifizierung. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alles, was dem Folgenden ähnelt.

kube-apiserver-arg:
  - "token-auth-file=<path>"

1.2.3 Stellen Sie sicher, dass --DenyServiceExternalIPs gesetzt ist (Manuell)

Ergebnis: WARN

Behebung: Standardmäßig setzt RKE2 DenyServiceExternalIPs nicht. Um dieses Flag zu aktivieren, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml wie unten gezeigt.

kube-apiserver-arg:
  - "enable-admission-plugins=DenyServiceExternalIPs"

1.2.4 Stellen Sie sicher, dass die --kubelet-client-certificate und --kubelet-client-key Argumente entsprechend gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--kubelet-client-certificate' ist vorhanden UND '--kubelet-client-key' ist vorhanden

Rückgabewert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig stellt RKE2 automatisch das kubelet-Client-Zertifikat und den Schlüssel zur Verfügung. Sie werden generiert und befinden sich unter /var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt und /var/lib/rancher/rke2/server/tls/client-kube-apiserver.key. Wenn Sie aus irgendeinem Grund Ihr eigenes Zertifikat und Ihren eigenen Schlüssel bereitstellen müssen, können Sie die untenstehenden Parameter in der RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml setzen.

kube-apiserver-arg:
  - "kubelet-client-certificate=<path/to/client-cert-file>"
  - "kubelet-client-key=<path/to/client-key-file>"

1.2.5 Stellen Sie sicher, dass das --kubelet-certificate-authority Argument entsprechend gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--kubelet-certificate-authority' ist vorhanden

Rückgabewert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig stellt RKE2 automatisch die kubelet CA-Zertifikatdatei unter /var/lib/rancher/rke2/server/tls/server-ca.crt zur Verfügung. Wenn Sie aus irgendeinem Grund Ihr eigenes CA-Zertifikat bereitstellen müssen, sollten Sie das rke2-Zertifikat-Kommandozeilenwerkzeug verwenden. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen, die dem Folgenden ähneln.

kube-apiserver-arg:
  - "kubelet-certificate-authority=<path/to/ca-cert-file>"

1.2.6 Stellen Sie sicher, dass das --authorization-mode Argument nicht auf AlwaysAllow gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--authorization-mode' hat nicht 'AlwaysAllow'

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 das --authorization-mode nicht auf AlwaysAllow. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen wie unten.

kube-apiserver-arg:
  - "authorization-mode=AlwaysAllow"

1.2.7 Stellen Sie sicher, dass das --authorization-mode Argument Node enthält (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--authorization-mode' hat 'Node'

Rückgabewert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 --authorization-mode auf Node und RBAC. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und stellen Sie sicher, dass Sie authorization-mode nicht überschreiben.

1.2.8 Stellen Sie sicher, dass das --authorization-mode-Argument RBAC (automatisiert) enthält.

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--authorization-mode' hat 'RBAC'

Rückgabewert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 --authorization-mode auf Node und RBAC. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und stellen Sie sicher, dass Sie authorization-mode nicht überschreiben.

1.2.9 Stellen Sie sicher, dass das Admission-Control-Plugin EventRateLimit gesetzt ist (manuell).

Ergebnis: WARN

Behebung: Befolgen Sie die Kubernetes-Dokumentation und setzen Sie die gewünschten Limits in einer Konfigurationsdatei. Bearbeiten Sie dann die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und setzen Sie die folgenden Parameter.

kube-apiserver-arg:
  - "enable-admission-plugins=...,EventRateLimit,..."
  - "admission-control-config-file=<path/to/configuration/file>"

1.2.10 Stellen Sie sicher, dass das Admission-Control-Plugin AlwaysAdmit nicht gesetzt ist (automatisiert).

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--enable-admission-plugins' hat nicht 'AlwaysAdmit' ODER '--enable-admission-plugins' ist nicht vorhanden.

Rückgabewert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 das --enable-admission-plugins nicht auf AlwaysAdmit. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen wie unten.

kube-apiserver-arg:
  - "enable-admission-plugins=AlwaysAdmit"

1.2.11 Stellen Sie sicher, dass das Admission-Control-Plugin AlwaysPullImages gesetzt ist (manuell).

Ergebnis: WARN

Behebung: Nach den CIS-Richtlinien ist dies permissiv: "Diese Einstellung könnte Offline- oder isolierte Cluster betreffen, die Bilder vorab geladen haben und keinen Zugriff auf ein Registry haben, um verwendete Bilder zu ziehen." Diese Einstellung ist nicht geeignet für Cluster, die diese Konfiguration verwenden. Bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml auf dem Steuerungsknoten und setzen Sie den Parameter --enable-admission-plugins auf AlwaysPullImages. --enable-admission-plugins=…​,AlwaysPullImages,…​

1.2.12 Stellen Sie sicher, dass das Admission-Control-Plugin ServiceAccount gesetzt ist (automatisiert).

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--disable-admission-plugins' ist vorhanden ODER '--disable-admission-plugins' ist nicht vorhanden.

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 --disable-admission-plugins nicht. Befolgen Sie die Dokumentation und erstellen Sie ServiceAccount-Objekte gemäß Ihrer Umgebung. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen, die dem Folgenden ähneln.

kube-apiserver-arg:
  - "disable-admission-plugins=ServiceAccount"

1.2.13 Stellen Sie sicher, dass das Admission-Control-Plugin NamespaceLifecycle gesetzt ist (automatisiert).

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--disable-admission-plugins' ist vorhanden ODER '--disable-admission-plugins' ist nicht vorhanden.

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 --disable-admission-plugins nicht. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen, die dem Folgenden ähneln.

kube-apiserver-arg:
  - "disable-admission-plugins=...,NamespaceLifecycle,..."

1.2.14 Stellen Sie sicher, dass das Admission-Control-Plugin NodeRestriction gesetzt ist (automatisiert).

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--enable-admission-plugins' hat 'NodeRestriction'

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 das --enable-admission-plugins auf NodeRestriction. Überprüfen Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und stellen Sie sicher, dass Sie die admission plugins nicht überschreiben. Wenn Sie dies tun, fügen Sie NodeRestriction in die Liste ein.

kube-apiserver-arg:
  - "enable-admission-plugins=...,NodeRestriction,..."

1.2.15 Stellen Sie sicher, dass das --profiling-Argument auf false gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--profiling' ist gleich 'false'

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 das --profiling-Argument auf false. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen, die dem Folgenden ähneln.

kube-apiserver-arg:
  - "profiling=true"

1.2.16 Stellen Sie sicher, dass das --audit-log-path-Argument gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--audit-log-path' ist vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 das --audit-log-path-Argument auf /var/lib/rancher/rke2/server/logs/audit.log. Wenn Sie dies ändern möchten, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml auf dem Steuerungsknoten und setzen Sie den Parameter --audit-log-path auf einen geeigneten Pfad und eine Datei, in die die Audit-Logs geschrieben werden sollen, zum Beispiel:

kube-apiserver-arg:
  - "audit-log-path=/var/log/rke2/audit.log"

1.2.17 Stellen Sie sicher, dass das --audit-log-maxage-Argument auf 30 oder entsprechend gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--audit-log-maxage' ist größer oder gleich 30

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 das --audit-log-maxage-Argument auf 30 Tage. Wenn Sie dies ändern möchten, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml
auf dem Steuerungsknoten und setzen Sie den Parameter --audit-log-maxage auf eine angemessene Anzahl von Tagen, zum Beispiel:

kube-apiserver-arg:
  - "audit-log-maxage=40"

1.2.18 Stellen Sie sicher, dass das --audit-log-maxbackup-Argument auf 10 oder entsprechend gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--audit-log-maxbackup' ist größer oder gleich 10

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 das --audit-log-maxbackup-Argument auf 10. Wenn Sie dies ändern möchten, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml
auf dem Steuerungsknoten und setzen Sie den Parameter --audit-log-maxbackup auf einen geeigneten Wert. Beispiel:

kube-apiserver-arg:
  - "audit-log-maxbackup=15"

1.2.19 Stellen Sie sicher, dass das --audit-log-maxsize-Argument auf 100 oder entsprechend gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--audit-log-maxsize' ist größer oder gleich 100

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 das --audit-log-maxsize-Argument auf 100 MB. Wenn Sie dies ändern möchten, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml
auf dem Steuerungsknoten und setzen Sie den Parameter --audit-log-maxsize auf eine angemessene Größe in MB. Beispiel:

kube-apiserver-arg:
  - "audit-log-maxsize=150"

1.2.20 Stellen Sie sicher, dass das --request-timeout-Argument entsprechend gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--request-timeout' ist nicht vorhanden ODER '--request-timeout' ist vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Nach den CIS-Richtlinien wird empfohlen, dieses Limit entsprechend festzulegen und das Standardlimit von 60 Sekunden nur bei Bedarf zu ändern. Bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml
und setzen Sie den untenstehenden Parameter, falls erforderlich. Beispiel:

kube-apiserver-arg:
  - "request-timeout=300s"

1.2.21 Stellen Sie sicher, dass das --service-account-lookup-Argument auf true gesetzt ist (automatisiert).

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--service-account-lookup' ist nicht vorhanden ODER '--service-account-lookup' ist vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig setzt RKE2 das --service-account-lookup-Argument nicht. Bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und setzen Sie das service-account-lookup. Beispiel:

kube-apiserver-arg:
  - "service-account-lookup=true"

Alternativ können Sie den Parameter service-account-lookup aus dieser Datei löschen, damit das Standardverhalten wirksam wird.

1.2.22 Stellen Sie sicher, dass das --service-account-key-file-Argument entsprechend festgelegt ist (automatisiert).

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--service-account-key-file' ist vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

RKE2 generiert und setzt automatisch die ServiceAccount-Schlüsseldatei. Sie befindet sich unter /var/lib/rancher/rke2/server/tls/service.key. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml
und entfernen Sie alle Zeilen wie unten.

kube-apiserver-arg:
  - "service-account-key-file=<path>"

1.2.23 Stellen Sie sicher, dass die Argumente --etcd-certfile und --etcd-keyfile entsprechend festgelegt sind (automatisiert).

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--etcd-certfile' ist vorhanden UND '--etcd-keyfile' ist vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

RKE2 generiert und setzt automatisch die etcd-Zertifikats- und Schlüsseldateien. Sie befinden sich unter /var/lib/rancher/rke2/server/tls/etcd/client.crt und /var/lib/rancher/rke2/server/tls/etcd/client.key. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml
und entfernen Sie alle Zeilen, die dem Folgenden ähneln.

kube-apiserver-arg:
  - "etcd-certfile=<path>"
  - "etcd-keyfile=<path>"

1.2.24 Stellen Sie sicher, dass die Argumente --tls-cert-file und --tls-private-key-file entsprechend festgelegt sind (automatisiert).

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--tls-cert-file' ist vorhanden UND '--tls-private-key-file' ist vorhanden.

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig generiert RKE2 automatisch das TLS-Zertifikat und den privaten Schlüssel für den apiserver. Sie werden generiert und befinden sich unter /var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt und /var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen wie unten.

kube-apiserver-arg:
  - "tls-cert-file=<path>"
  - "tls-private-key-file=<path>"

1.2.25 Stellen Sie sicher, dass das --client-ca-file-Argument entsprechend gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--client-ca-file' ist vorhanden.

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig stellt RKE2 die Datei der Client-Zertifizierungsstelle zur Verfügung. Sie wird generiert und befindet sich unter /var/lib/rancher/rke2/server/tls/client-ca.crt. Wenn Sie aus irgendeinem Grund Ihr eigenes CA-Zertifikat bereitstellen müssen, sollten Sie das rke2-Zertifikat-Kommandozeilenwerkzeug verwenden. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen, die dem Folgenden ähneln.

kube-apiserver-arg:
  - "client-ca-file=<path>"

1.2.26 Stellen Sie sicher, dass das --etcd-cafile-Argument entsprechend gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--etcd-cafile' ist vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig stellt RKE2 die Datei der etcd-Zertifizierungsstelle zur Verfügung. Sie wird generiert und befindet sich unter /var/lib/rancher/rke2/server/tls/client-ca.crt. Wenn Sie aus irgendeinem Grund Ihr eigenes CA-Zertifikat bereitstellen müssen, sollten Sie das rke2-Zertifikat-Kommandozeilenwerkzeug verwenden. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen, die dem Folgenden ähneln.

kube-apiserver-arg:
  - "etcd-cafile=<path>"

1.2.27 Stellen Sie sicher, dass das --encryption-provider-config-Argument entsprechend gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--encryption-provider-config' ist vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

RKE2 ist immer so konfiguriert, dass Geheimnisse verschlüsselt werden. Die Verschlüsselung von Geheimnissen wird mit dem rke2 secrets-encrypt-Kommandozeilenwerkzeug verwaltet. Falls erforderlich, finden Sie die generierte Verschlüsselungskonfiguration unter /var/lib/rancher/rke2/server/cred/encryption-config.json.

1.2.28 Stellen Sie sicher, dass die Verschlüsselungsanbieter angemessen konfiguriert sind (Automatisiert)

Ergebnis: PASS

Revision:

ENCRYPTION_PROVIDER_CONFIG=$(ps -ef | grep kube-apiserver | grep -- --encryption-provider-config | sed 's%.*encryption-provider-config[= ]\([^ ]*\).*%\1%')
if test -e $ENCRYPTION_PROVIDER_CONFIG; then grep -o 'providers\"\:\[.*\]' $ENCRYPTION_PROVIDER_CONFIG | grep -o "[A-Za-z]*" | head -2 | tail -1  | sed 's/^/provider=/'; fi

Erwartetes Ergebnis: 'provider' enthält gültige Elemente aus 'aescbc,kms,secretbox'

Zurückgegebener Wert:
provider=aescbc
Behebung:

RKE2 ist immer so konfiguriert, dass der aescbc-Verschlüsselungsanbieter zur Verschlüsselung von Geheimnissen verwendet wird. Die Verschlüsselung von Geheimnissen wird mit dem rke2 secrets-encrypt-Kommandozeilenwerkzeug verwaltet. Falls erforderlich, finden Sie die generierte Verschlüsselungskonfiguration unter /var/lib/rancher/rke2/server/cred/encryption-config.json.

1.2.29 Stellen Sie sicher, dass der API-Server nur starke kryptografische Chiffren verwendet (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--tls-cipher-suites' enthält gültige Elemente aus 'TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384'

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Standardmäßig erfüllt der RKE2 kube-apiserver diesen Test. Änderungen an diesen Werten können Regressionen verursachen, stellen Sie daher sicher, dass alle apiserver-Clients die neue TLS-Konfiguration unterstützen, bevor Sie sie in Produktionsbereitstellungen anwenden. Wenn eine benutzerdefinierte TLS-Konfiguration erforderlich ist, ziehen Sie in Betracht, auch eine benutzerdefinierte Version dieser Regel zu erstellen, die Ihren Anforderungen entspricht. Wenn diese Überprüfung fehlschlägt, entfernen Sie alle benutzerdefinierten Konfigurationen rund um tls-cipher-suites oder aktualisieren Sie die Datei /etc/rancher/rke2/config.yaml, um den Standardeinstellungen zu entsprechen, indem Sie Folgendes hinzufügen: kube-apiserver-arg:

  • "tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305"

1.2.30 Stellen Sie sicher, dass der Parameter --service-account-extend-token-expiration auf false gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-apiserver

Erwartetes Ergebnis: '--service-account-extend-token-expiration' ist gleich 'false'

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
Behebung:

Bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und setzen Sie den --service-account-extend-token-expiration Parameter auf false, bevor Sie rke2 neu laden, wie folgt: kube-apiserver-arg:

  • "service-account-extend-token-expiration=false" Standardmäßig ist dieser Parameter auf true gesetzt.

1.3 Controller-Manager

1.3.1 Stellen Sie sicher, dass das Argument --terminated-pod-gc-threshold angemessen gesetzt ist (manuell)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-controller-manager

Erwartetes Ergebnis: '--terminated-pod-gc-threshold' ist vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18380    2666  1 16:15 ?        00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Behebung:

Standardmäßig setzt RKE2 einen "terminated-pod-gc-threshold" von 1000. Wenn Sie diesen Wert ändern müssen, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml auf dem Steuerungsknoten und setzen Sie den --terminated-pod-gc-threshold auf einen angemessenen Schwellenwert.

kube-controller-manager-arg:
  - "terminated-pod-gc-threshold=10"

1.3.2 Stellen Sie sicher, dass das Argument --profiling auf false gesetzt ist (automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-controller-manager

Erwartetes Ergebnis: '--profiling' ist gleich 'false'

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18380    2666  1 16:15 ?        00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Behebung:

Standardmäßig setzt RKE2 das --profiling-Argument auf false. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen wie unten.

kube-controller-manager-arg:
  - "profiling=true"

1.3.3 Stellen Sie sicher, dass das Argument --use-service-account-credentials auf true gesetzt ist (automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-controller-manager

Erwartetes Ergebnis: '--use-service-account-credentials' ist nicht gleich 'false'

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18380    2666  1 16:15 ?        00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Behebung:

Standardmäßig setzt RKE2 das Argument --use-service-account-credentials auf true. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen wie unten.

kube-controller-manager-arg:
  - "use-service-account-credentials=false"

1.3.4 Stellen Sie sicher, dass das Argument --service-account-private-key-file angemessen gesetzt ist (automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-controller-manager

Erwartetes Ergebnis: '--service-account-private-key-file' ist vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18380    2666  1 16:15 ?        00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Behebung:

Standardmäßig stellt RKE2 automatisch die private Schlüsseldatei des Dienstkontos zur Verfügung. Sie wird generiert und befindet sich unter /var/lib/rancher/rke2/server/tls/service.current.key. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen wie unten.

kube-controller-manager-arg:
  - "service-account-private-key-file=<path>"

1.3.5 Stellen Sie sicher, dass das --root-ca-file Argument entsprechend gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-controller-manager

Erwartetes Ergebnis: '--root-ca-file' ist vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18380    2666  1 16:15 ?        00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Behebung:

Standardmäßig stellt RKE2 automatisch die Root-CA-Datei bereit. Sie wird generiert und befindet sich unter /var/lib/rancher/rke2/server/tls/server-ca.crt. Wenn Sie aus irgendeinem Grund Ihr eigenes CA-Zertifikat bereitstellen müssen, sollten Sie das rke2-Zertifikat-Kommandozeilenwerkzeug verwenden. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen wie unten.

kube-controller-manager-arg:
  - "root-ca-file=<path>"

1.3.6 Stellen Sie sicher, dass das RotateKubeletServerCertificate Argument auf true gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-controller-manager

Erwartetes Ergebnis: '--feature-gates' ist vorhanden ODER '--feature-gates' ist nicht vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18380    2666  1 16:15 ?        00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Behebung:

Standardmäßig setzt RKE2 das RotateKubeletServerCertificate Feature-Gate nicht. Wenn Sie dieses Feature-Gate aktiviert haben, sollten Sie es entfernen. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen wie unten.

kube-controller-manager-arg:
  - "feature-gate=RotateKubeletServerCertificate"

1.3.7 Stellen Sie sicher, dass das --bind-address Argument auf 127.0.0.1 gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-controller-manager

Erwartetes Ergebnis: '--bind-address' ist gleich '127.0.0.1' ODER '--bind-address' ist nicht vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18380    2666  1 16:15 ?        00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Behebung:

Standardmäßig setzt RKE2 das Argument --bind-address auf 127.0.0.1. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen wie unten.

kube-controller-manager-arg:
  - "bind-address=<IP>"

1.4 Scheduler

1.4.1 Stellen Sie sicher, dass das --profiling Argument auf false gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-scheduler

Erwartetes Ergebnis: '--profiling' ist gleich 'false'

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18054    2705  0 16:15 ?        00:00:01 kube-scheduler --permit-port-sharing=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-scheduler/kube-scheduler.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-scheduler/kube-scheduler.key
Behebung:

Standardmäßig setzt RKE2 das --profiling-Argument auf false. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen wie unten.

kube-scheduler-arg:
  - "profiling=true"

1.4.2 Stellen Sie sicher, dass das --bind-address Argument auf 127.0.0.1 gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -fC kube-scheduler

Erwartetes Ergebnis: '--bind-address' ist gleich '127.0.0.1' ODER '--bind-address' ist nicht vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       18054    2705  0 16:15 ?        00:00:01 kube-scheduler --permit-port-sharing=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --bind-address=127.0.0.1 --kubeconfig=/var/lib/rancher/rke2/server/cred/scheduler.kubeconfig --profiling=false --secure-port=10259 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-scheduler/kube-scheduler.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-scheduler/kube-scheduler.key
Behebung:

Standardmäßig setzt RKE2 das Argument --bind-address auf 127.0.0.1. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen wie unten.

kube-scheduler-arg:
  - "bind-address=<IP>"

2 Etcd Knotenkonfiguration

2 Etcd Knotenkonfiguration

2.1 Stellen Sie sicher, dass die Argumente --cert-file und --key-file entsprechend gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

cat /var/lib/rancher/rke2/server/db/etcd/config

Erwartetes Ergebnis: '.client-transport-security.cert-file' ist gleich '/var/lib/rancher/rke2/server/tls/etcd/server-client.crt' UND '.client-transport-security.key-file' ist gleich '/var/lib/rancher/rke2/server/tls/etcd/server-client.key'

Zurückgegebener Wert:
advertise-client-urls: https://10.10.10.100:2379
client-transport-security:
  cert-file: /var/lib/rancher/rke2/server/tls/etcd/server-client.crt
  client-cert-auth: true
  key-file: /var/lib/rancher/rke2/server/tls/etcd/server-client.key
  trusted-ca-file: /var/lib/rancher/rke2/server/tls/etcd/server-ca.crt
data-dir: /var/lib/rancher/rke2/server/db/etcd
election-timeout: 5000
experimental-initial-corrupt-check: true
experimental-watch-progress-notify-interval: 5000000000
heartbeat-interval: 500
initial-advertise-peer-urls: https://10.10.10.100:2380
initial-cluster: server-0-d66375b4=https://10.10.10.100:2380
initial-cluster-state: new
listen-client-http-urls: https://127.0.0.1:2382
listen-client-urls: https://127.0.0.1:2379,https://10.10.10.100:2379
listen-metrics-urls: http://127.0.0.1:2381
listen-peer-urls: https://127.0.0.1:2380,https://10.10.10.100:2380
log-outputs:
- stderr
logger: zap
name: server-0-d66375b4
peer-transport-security:
  cert-file: /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.crt
  client-cert-auth: true
  key-file: /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.key
  trusted-ca-file: /var/lib/rancher/rke2/server/tls/etcd/peer-ca.crt
snapshot-count: 10000
socket-options:
  reuse-address: true
  reuse-port: true
Behebung:

Standardmäßig generiert RKE2 Zertifikats- und Schlüsseldateien für etcd. Diese befinden sich in /var/lib/rancher/rke2/server/tls/etcd/. Wenn diese Überprüfung fehlschlägt, stellen Sie sicher, dass die Konfigurationsdatei /var/lib/rancher/rke2/server/db/etcd/config nicht geändert wurde, um benutzerdefinierte Zertifikats- und Schlüsseldateien zu verwenden.

2.2 Stellen Sie sicher, dass das Argument --client-cert-auth auf true gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

cat /var/lib/rancher/rke2/server/db/etcd/config

Erwartetes Ergebnis: 'ETCD_CLIENT_CERT_AUTH' ist vorhanden ODER '.client-transport-security.client-cert-auth' ist gleich 'true'

Zurückgegebener Wert:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=server-0
ETCD_UNSUPPORTED_ARCH=
FILE_HASH=e37e99a1db555b43d54d98f8bd294bd808aed0b4791c9d1d94b05bcc783e66d6
NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16
HOME=/
Behebung:

Standardmäßig setzt RKE2 den Parameter --client-cert-auth auf true. Wenn diese Überprüfung fehlschlägt, stellen Sie sicher, dass die Konfigurationsdatei /var/lib/rancher/rke2/server/db/etcd/config nicht geändert wurde, um die Authentifizierung mit Client-Zertifikaten zu deaktivieren.

2.3 Stellen Sie sicher, dass das Argument --auto-tls nicht auf true gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

cat /var/lib/rancher/rke2/server/db/etcd/config

Erwartetes Ergebnis: 'ETCD_AUTO_TLS' ist nicht vorhanden ODER 'ETCD_AUTO_TLS' ist vorhanden ODER '.client-transport-security.auto-tls' ist vorhanden

Zurückgegebener Wert:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=server-0
ETCD_UNSUPPORTED_ARCH=
FILE_HASH=e37e99a1db555b43d54d98f8bd294bd808aed0b4791c9d1d94b05bcc783e66d6
NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16
HOME=/
Behebung:

Standardmäßig setzt RKE2 den --auto-tls-Parameter nicht. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die Spezifikationsdatei des etcd-Pods /var/lib/rancher/rke2/server/db/etcd/config auf dem Master-Knoten und entfernen Sie entweder den --auto-tls-Parameter oder setzen Sie ihn auf false. client-transport-security: auto-tls: false

2.4 Stellen Sie sicher, dass die Argumente --peer-cert-file und --peer-key-file entsprechend gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

cat /var/lib/rancher/rke2/server/db/etcd/config

Erwartetes Ergebnis: '.peer-transport-security.cert-file' ist gleich '/var/lib/rancher/rke2/server/tls/etcd/peer-server-client.crt' UND '.peer-transport-security.key-file' ist gleich '/var/lib/rancher/rke2/server/tls/etcd/peer-server-client.key'

Zurückgegebener Wert:
advertise-client-urls: https://10.10.10.100:2379
client-transport-security:
  cert-file: /var/lib/rancher/rke2/server/tls/etcd/server-client.crt
  client-cert-auth: true
  key-file: /var/lib/rancher/rke2/server/tls/etcd/server-client.key
  trusted-ca-file: /var/lib/rancher/rke2/server/tls/etcd/server-ca.crt
data-dir: /var/lib/rancher/rke2/server/db/etcd
election-timeout: 5000
experimental-initial-corrupt-check: true
experimental-watch-progress-notify-interval: 5000000000
heartbeat-interval: 500
initial-advertise-peer-urls: https://10.10.10.100:2380
initial-cluster: server-0-d66375b4=https://10.10.10.100:2380
initial-cluster-state: new
listen-client-http-urls: https://127.0.0.1:2382
listen-client-urls: https://127.0.0.1:2379,https://10.10.10.100:2379
listen-metrics-urls: http://127.0.0.1:2381
listen-peer-urls: https://127.0.0.1:2380,https://10.10.10.100:2380
log-outputs:
- stderr
logger: zap
name: server-0-d66375b4
peer-transport-security:
  cert-file: /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.crt
  client-cert-auth: true
  key-file: /var/lib/rancher/rke2/server/tls/etcd/peer-server-client.key
  trusted-ca-file: /var/lib/rancher/rke2/server/tls/etcd/peer-ca.crt
snapshot-count: 10000
socket-options:
  reuse-address: true
  reuse-port: true
Behebung:

Standardmäßig generiert RKE2 Peer-Zertifikate und Schlüsseldateien für etcd. Diese befinden sich in /var/lib/rancher/rke2/server/tls/etcd/. Wenn diese Überprüfung fehlschlägt, stellen Sie sicher, dass die Konfigurationsdatei /var/lib/rancher/rke2/server/db/etcd/config nicht geändert wurde, um benutzerdefinierte Peer-Zertifikate und Schlüsseldateien zu verwenden.

2.5 Stellen Sie sicher, dass das --peer-client-cert-auth-Argument auf true gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

cat /var/lib/rancher/rke2/server/db/etcd/config

Erwartetes Ergebnis: 'ETCD_PEER_CLIENT_CERT_AUTH' ist vorhanden ODER '.peer-transport-security.client-cert-auth' ist gleich 'true'

Zurückgegebener Wert:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=server-0
ETCD_UNSUPPORTED_ARCH=
FILE_HASH=e37e99a1db555b43d54d98f8bd294bd808aed0b4791c9d1d94b05bcc783e66d6
NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16
HOME=/
Behebung:

Standardmäßig setzt RKE2 den --peer-cert-auth-Parameter auf true. Wenn diese Überprüfung fehlschlägt, stellen Sie sicher, dass die Konfigurationsdatei /var/lib/rancher/rke2/server/db/etcd/config nicht geändert wurde, um die Authentifizierung mit Peer-Client-Zertifikaten zu deaktivieren.

2.6 Stellen Sie sicher, dass das --peer-auto-tls-Argument nicht auf true gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

cat /var/lib/rancher/rke2/server/db/etcd/config

Erwartetes Ergebnis: 'ETCD_PEER_AUTO_TLS' ist nicht vorhanden ODER 'ETCD_PEER_AUTO_TLS' ist vorhanden ODER '.peer-transport-security.auto-tls' ist vorhanden

Zurückgegebener Wert:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=server-0
ETCD_UNSUPPORTED_ARCH=
FILE_HASH=e37e99a1db555b43d54d98f8bd294bd808aed0b4791c9d1d94b05bcc783e66d6
NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16
HOME=/
Behebung:

Standardmäßig setzt RKE2 den --peer-auto-tls-Parameter nicht. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die Spezifikationsdatei des etcd-Pods /var/lib/rancher/rke2/server/db/etcd/config auf dem Master-Knoten und entfernen Sie entweder den --peer-auto-tls-Parameter oder setzen Sie ihn auf false. peer-transport-security: auto-tls: false

2.7 Stellen Sie sicher, dass eine eindeutige Zertifizierungsstelle für etcd verwendet wird (Automatisiert)

Ergebnis: PASS

Revision:

cat /var/lib/rancher/rke2/server/db/etcd/config

Erwartetes Ergebnis: 'ETCD_TRUSTED_CA_FILE' ist vorhanden ODER '.peer-transport-security.trusted-ca-file' ist gleich '/var/lib/rancher/rke2/server/tls/etcd/peer-ca.crt'

Zurückgegebener Wert:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=server-0
ETCD_UNSUPPORTED_ARCH=
FILE_HASH=e37e99a1db555b43d54d98f8bd294bd808aed0b4791c9d1d94b05bcc783e66d6
NO_PROXY=.svc,.cluster.local,10.42.0.0/16,10.43.0.0/16
HOME=/
Behebung:

Standardmäßig generiert RKE2 eine einzigartige Zertifizierungsstelle für etcd. Diese befindet sich unter /var/lib/rancher/rke2/server/tls/etcd/peer-ca.crt. Wenn diese Überprüfung fehlschlägt, stellen Sie sicher, dass die Konfigurationsdatei /var/lib/rancher/rke2/server/db/etcd/config nicht geändert wurde, um eine gemeinsame Zertifizierungsstelle zu verwenden.

3 Steuerungsebenenkonfiguration

3.1 Authentifizierung und Autorisierung

3.1.1 Die Authentifizierung mit Client-Zertifikaten sollte nicht für Benutzer verwendet werden (Manuell)

Ergebnis: WARN

Behebung: Alternative Mechanismen, die von Kubernetes bereitgestellt werden, wie die Verwendung von OIDC, sollten anstelle von Client-Zertifikaten implementiert werden.

3.1.2 Die Authentifizierung mit Service-Account-Token sollte nicht für Benutzer verwendet werden (Manuell)

Ergebnis: WARN

Behebung: Alternative Mechanismen, die von Kubernetes bereitgestellt werden, wie die Verwendung von OIDC, sollten anstelle von Service-Account-Token implementiert werden.

3.1.3 Die Authentifizierung mit Bootstrap-Token sollte nicht für Benutzer verwendet werden (Manuell)

Ergebnis: WARN

Behebung: Alternative Mechanismen, die von Kubernetes bereitgestellt werden, wie die Verwendung von OIDC, sollten anstelle von Bootstrap-Token implementiert werden.

3.2 Protokollierung

3.2.1 Stellen Sie sicher, dass eine minimale Audit-Richtlinie erstellt wird (Automatisiert)

Ergebnis: PASS

Revision:

/bin/ps -ef | grep kube-apiserver | grep -v grep

Erwartetes Ergebnis: '--audit-policy-file' ist vorhanden

Zurückgegebener Wert:
root       18280   17706  5 16:15 ?        00:00:16 kube-apiserver --admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml --audit-policy-file=/etc/rancher/rke2/audit-policy.yaml --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log --advertise-address=10.10.10.100 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,rke2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt --egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=true --enable-bootstrap-token-auth=true --encryption-provider-config=/var/lib/rancher/rke2/server/cred/encryption-config.json --encryption-provider-config-automatic-reload=true --etcd-cafile=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/rke2/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/rke2/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --kubelet-certificate-authority=/var/lib/rancher/rke2/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/rke2/server/tls/client-kube-apiserver.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --profiling=false --proxy-client-cert-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/rke2/server/tls/client-auth-proxy.key --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/rke2/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-extend-token-expiration=false --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/rke2/server/tls/service.key --service-account-signing-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.crt --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --tls-private-key-file=/var/lib/rancher/rke2/server/tls/serving-kube-apiserver.key
root       18380    2666  1 16:15 ?        00:00:04 kube-controller-manager --permit-port-sharing=true --flex-volume-plugin-dir=/var/lib/kubelet/volumeplugins --terminated-pod-gc-threshold=1000 --allocate-node-cidrs=true --authentication-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --authorization-kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --bind-address=127.0.0.1 --cluster-cidr=10.42.0.0/16 --cluster-signing-kube-apiserver-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kube-apiserver-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-client-cert-file=/var/lib/rancher/rke2/server/tls/client-ca.nochain.crt --cluster-signing-kubelet-client-key-file=/var/lib/rancher/rke2/server/tls/client-ca.key --cluster-signing-kubelet-serving-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-kubelet-serving-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --cluster-signing-legacy-unknown-cert-file=/var/lib/rancher/rke2/server/tls/server-ca.nochain.crt --cluster-signing-legacy-unknown-key-file=/var/lib/rancher/rke2/server/tls/server-ca.key --configure-cloud-routes=false --controllers=*,tokencleaner,-service,-route,-cloud-node-lifecycle --kubeconfig=/var/lib/rancher/rke2/server/cred/controller.kubeconfig --profiling=false --root-ca-file=/var/lib/rancher/rke2/server/tls/server-ca.crt --secure-port=10257 --service-account-private-key-file=/var/lib/rancher/rke2/server/tls/service.current.key --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.crt --tls-private-key-file=/var/lib/rancher/rke2/server/tls/kube-controller-manager/kube-controller-manager.key --use-service-account-credentials=true
Behebung:

Erstellen Sie eine Audit-Richtliniendatei für Ihren Cluster.

3.2.2 Stellen Sie sicher, dass die Audit-Richtlinie wichtige Sicherheitsbedenken abdeckt (Manuell)

Ergebnis: WARN

Behebung: Überprüfen Sie die für den Cluster bereitgestellte Audit-Richtlinie und stellen Sie sicher, dass sie mindestens die folgenden Bereiche abdeckt:

  • Zugriff auf Secrets, die vom Cluster verwaltet werden. Es sollte darauf geachtet werden, nur Metadaten für Anfragen an Secrets, ConfigMaps und TokenReviews zu protokollieren, um das Risiko der Protokollierung sensibler Daten zu vermeiden.

  • Änderung von Pod- und Deployment-Objekten.

  • Verwendung von pods/exec, pods/portforward, pods/proxy und services/proxy. Für die meisten Anfragen wird empfohlen, mindestens auf der Metadatenebene zu protokollieren (die grundlegendste Protokollierungsebene).

4 Sicherheitskonfiguration des Worker-Knotens

4.1 Konfigurationsdateien für Arbeitsknoten

4.1.1 Stellen Sie sicher, dass die Berechtigungen der kubelet-Dienstdatei auf 600 oder restriktiver gesetzt sind (Automatisiert)

Ergebnis: Nicht zutreffend

Erläuterung:

Das kubelet wird vom RKE2-Prozess verwaltet. Es gibt keine kubelet-Dienstdatei, alle Konfigurationen werden zur Laufzeit als Argumente übergeben.

4.1.2 Stellen Sie sicher, dass der Eigentümer der kubelet-Dienstdatei auf root:root gesetzt ist (Automatisiert)

Ergebnis: Nicht zutreffend

Erläuterung:

Das kubelet wird vom RKE2-Prozess verwaltet. Es gibt keine kubelet-Dienstdatei, alle Konfigurationen werden zur Laufzeit als Argumente übergeben.

4.1.3 Wenn die Proxy-Kubeconfig-Datei vorhanden ist, stellen Sie sicher, dass die Berechtigungen auf 600 oder restriktiver gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; fi'

Erwartetes Ergebnis: Die Berechtigungen sind auf 600 gesetzt, erwartet 600 oder restriktiver

Zurückgegebener Wert:
permissions=600
Behebung:

Führen Sie den untenstehenden Befehl (basierend auf dem Speicherort der Datei auf Ihrem System) auf jedem Arbeitsknoten aus. Zum Beispiel, chmod 600 /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig

4.1.4 Wenn die Proxy-Kubeconfig-Datei vorhanden ist, stellen Sie sicher, dass der Eigentümer auf root:root gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; then stat -c %U:%G /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig; fi'

Erwartetes Ergebnis: 'root:root' ist vorhanden

Zurückgegebener Wert:
root:root
Behebung:

Führen Sie den folgenden Befehl (basierend auf dem Speicherort der Datei auf Ihrem System) auf jedem Arbeitsknoten aus. Zum Beispiel, chown root:root /var/lib/rancher/rke2/agent/kubeproxy.kubeconfig

4.1.5 Stellen Sie sicher, dass die --kubeconfig kubelet.conf-Dateiberechtigungen auf 600 oder restriktiver gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c permissions=%a /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'

Erwartetes Ergebnis: Die Berechtigungen sind auf 600 gesetzt, erwartet 600 oder restriktiver

Zurückgegebener Wert:
permissions=600
Behebung:

Führen Sie den untenstehenden Befehl (basierend auf dem Speicherort der Datei auf Ihrem System) auf jedem Arbeitsknoten aus. Zum Beispiel, chmod 600 /var/lib/rancher/rke2/agent/kubelet.kubeconfig

4.1.6 Stellen Sie sicher, dass der Eigentümer der --kubeconfig kubelet.conf-Datei auf root:root gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/kubelet.kubeconfig; then stat -c %U:%G /var/lib/rancher/rke2/agent/kubelet.kubeconfig; fi'

Erwartetes Ergebnis: 'root:root' ist gleich 'root:root'

Zurückgegebener Wert:
root:root
Behebung:

Führen Sie den untenstehenden Befehl (basierend auf dem Speicherort der Datei auf Ihrem System) auf jedem Arbeitsknoten aus. Zum Beispiel chown root:root /var/lib/rancher/rke2/agent/kubelet.kubeconfig

4.1.7 Stellen Sie sicher, dass die Berechtigungen der Zertifizierungsstellen-Datei auf 600 oder restriktiver gesetzt sind (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/client-ca.crt; then stat -c permissions=%a /var/lib/rancher/rke2/agent/client-ca.crt; fi'

Erwartetes Ergebnis: Die Berechtigungen sind auf 600 gesetzt, erwartet 600 oder restriktiver

Zurückgegebener Wert:
permissions=600
Behebung:

Führen Sie den untenstehenden Befehl (basierend auf dem Speicherort der Datei auf Ihrem System) auf jedem Arbeitsknoten aus. Zum Beispiel, chmod 600 /var/lib/rancher/rke2/agent/client-ca.crt

4.1.8 Stellen Sie sicher, dass die Eigentümerschaft der Client-Zertifizierungsstellen-Datei auf root:root gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /var/lib/rancher/rke2/agent/client-ca.crt; then stat -c %U:%G /var/lib/rancher/rke2/agent/client-ca.crt; fi'

Erwartetes Ergebnis: 'root:root' ist gleich 'root:root'

Zurückgegebener Wert:
root:root
Behebung:

Führen Sie den folgenden Befehl aus, um den Besitzer der --client-ca-Datei zu ändern. chown root:root /var/lib/rancher/rke2/agent/client-ca.crt

4.1.9 Wenn die kubelet-Konfigurationsdatei config.yaml verwendet wird, überprüfen Sie, ob die Berechtigungen auf 600 oder restriktiver gesetzt sind (Automatisiert)

Ergebnis: Nicht zutreffend

Erläuterung:

Das Kubelet wird vom RKE2-Prozess verwaltet. Es gibt keine Kubelet-Konfigurationsdatei, alle Konfigurationen werden zur Laufzeit als Argumente übergeben.

4.1.10 Wenn die kubelet-Konfigurationsdatei config.yaml verwendet wird, überprüfen Sie, ob der Dateibesitzer auf root:root gesetzt ist (Automatisiert)

Ergebnis: Nicht zutreffend

Erläuterung:

Das Kubelet wird vom RKE2-Prozess verwaltet. Es gibt keine Kubelet-Konfigurationsdatei, alle Konfigurationen werden zur Laufzeit als Argumente übergeben.

4.2 Kubelet

4.2.1 Stellen Sie sicher, dass das --anonymous-auth-Argument auf false gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf

Erwartetes Ergebnis: '.authentication.anonymous.enabled' ist gleich 'false'

Zurückgegebener Wert:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 2m0s
    enabled: true
  x509:
    clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 5m0s
    cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
  imagefs.available: 5%
  nodefs.available: 5%
evictionMinimumReclaim:
  imagefs.available: 10%
  nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
  flushFrequency: 5s
  format: text
  options:
    json:
      infoBufferSize: "0"
    text:
      infoBufferSize: "0"
  verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Behebung:

Standardmäßig setzt RKE2 das --anonymous-auth auf false. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen, die ähnlich wie unten sind.

kubelet-arg:
  - "anonymous-auth=true"

Je nach System starten Sie den RKE2-Dienst neu. Zum Beispiel, systemctl restart rke2-server.service

4.2.2 Stellen Sie sicher, dass das --authorization-mode-Argument nicht auf AlwaysAllow (Automatisiert) gesetzt ist.

Ergebnis: PASS

Revision:

/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf

Erwartetes Ergebnis: '.authorization.mode' hat nicht 'AlwaysAllow'

Zurückgegebener Wert:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 2m0s
    enabled: true
  x509:
    clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 5m0s
    cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
  imagefs.available: 5%
  nodefs.available: 5%
evictionMinimumReclaim:
  imagefs.available: 10%
  nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
  flushFrequency: 5s
  format: text
  options:
    json:
      infoBufferSize: "0"
    text:
      infoBufferSize: "0"
  verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Behebung:

Standardmäßig setzt RKE2 das --authorization-mode nicht auf AlwaysAllow. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen, die ähnlich wie unten sind.

kubelet-arg:
  - "authorization-mode=AlwaysAllow"

Je nach System starten Sie den RKE2-Dienst neu. Zum Beispiel, systemctl restart rke2-server.service

4.2.3 Stellen Sie sicher, dass das --client-ca-file-Argument angemessen gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf

Erwartetes Ergebnis: '.authentication.x509.clientCAFile' ist vorhanden

Zurückgegebener Wert:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 2m0s
    enabled: true
  x509:
    clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 5m0s
    cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
  imagefs.available: 5%
  nodefs.available: 5%
evictionMinimumReclaim:
  imagefs.available: 10%
  nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
  flushFrequency: 5s
  format: text
  options:
    json:
      infoBufferSize: "0"
    text:
      infoBufferSize: "0"
  verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Behebung:

Standardmäßig stellt RKE2 automatisch das Client-CA-Zertifikat für das Kubelet zur Verfügung. Es wird generiert und befindet sich unter /var/lib/rancher/rke2/agent/client-ca.crt

4.2.4 Überprüfen Sie, ob das --read-only-port-Argument, falls definiert, auf 0 gesetzt ist (Automatisiert).

Ergebnis: PASS

Revision:

/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf

Erwartetes Ergebnis: '--read-only-port' ist gleich '0' ODER '--read-only-port' ist nicht vorhanden.

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       17649   17422  2 16:15 ?        00:00:08 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --cloud-provider=external --config-dir=/var/lib/rancher/rke2/agent/etc/kubelet.conf.d --containerd=/run/k3s/containerd/containerd.sock --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubelet.kubeconfig --node-ip=10.10.10.100 --node-labels= --read-only-port=0
Behebung:

Standardmäßig setzt RKE2 das --read-only-port auf 0. Wenn Sie dies auf einen anderen Wert gesetzt haben, sollten Sie es wieder auf 0 setzen. Bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen, die ähnlich wie unten sind.

kubelet-arg:
  - "read-only-port=XXXX"

Je nach System starten Sie den RKE2-Dienst neu. Zum Beispiel, systemctl restart rke2-server.service

4.2.5 Stellen Sie sicher, dass das --streaming-connection-idle-timeout-Argument nicht auf 0 gesetzt ist (Manuell).

Ergebnis: PASS

Revision:

/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf

Erwartetes Ergebnis: '.streamingConnectionIdleTimeout' ist nicht gleich '0' ODER '.streamingConnectionIdleTimeout' ist nicht vorhanden

Zurückgegebener Wert:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 2m0s
    enabled: true
  x509:
    clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 5m0s
    cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
  imagefs.available: 5%
  nodefs.available: 5%
evictionMinimumReclaim:
  imagefs.available: 10%
  nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
  flushFrequency: 5s
  format: text
  options:
    json:
      infoBufferSize: "0"
    text:
      infoBufferSize: "0"
  verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Behebung:

Bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und setzen Sie den folgenden Parameter auf einen geeigneten Wert.

kubelet-arg:
  - "streaming-connection-idle-timeout=5m"

Je nach System starten Sie den RKE2-Dienst neu. Zum Beispiel, systemctl restart rke2-server.service

4.2.6 Stellen Sie sicher, dass das Argument --make-iptables-util-chains auf true (automatisiert) gesetzt ist.

Ergebnis: PASS

Revision:

/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf

Erwartetes Ergebnis: '.makeIPTablesUtilChains' ist vorhanden ODER '.makeIPTablesUtilChains' ist nicht vorhanden

Zurückgegebener Wert:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 2m0s
    enabled: true
  x509:
    clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 5m0s
    cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
  imagefs.available: 5%
  nodefs.available: 5%
evictionMinimumReclaim:
  imagefs.available: 10%
  nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
  flushFrequency: 5s
  format: text
  options:
    json:
      infoBufferSize: "0"
    text:
      infoBufferSize: "0"
  verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Behebung:

Bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und setzen Sie den folgenden Parameter.

kubelet-arg:
  - "make-iptables-util-chains=true"

Oder entfernen Sie das --make-iptables-util-chains-Argument, damit RKE2 den Standardwert verwenden kann. Je nach System starten Sie den RKE2-Dienst neu. Zum Beispiel, systemctl restart rke2-server.service

4.2.7 Stellen Sie sicher, dass das Argument --hostname-override nicht gesetzt ist (automatisiert).

Ergebnis: Nicht zutreffend

Erläuterung:

Standardmäßig setzt RKE2 das Argument --hostname-override. Laut CIS-Richtlinien dient dies der Einhaltung von Cloud-Anbietern, die dieses Flag benötigen, um sicherzustellen, dass der Hostname mit den Knotennamen übereinstimmt.

4.2.8 Stellen Sie sicher, dass das Argument eventRecordQPS auf ein Niveau gesetzt ist, das eine angemessene Ereigniserfassung gewährleistet (manuell).

Ergebnis: PASS

Revision:

/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf

Erwartetes Ergebnis: '.eventRecordQPS' ist vorhanden ODER '.eventRecordQPS' ist nicht vorhanden

Zurückgegebener Wert:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 2m0s
    enabled: true
  x509:
    clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 5m0s
    cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
  imagefs.available: 5%
  nodefs.available: 5%
evictionMinimumReclaim:
  imagefs.available: 10%
  nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
  flushFrequency: 5s
  format: text
  options:
    json:
      infoBufferSize: "0"
    text:
      infoBufferSize: "0"
  verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Behebung:

Bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und setzen Sie den folgenden Parameter auf einen geeigneten Wert.

kubelet-arg:
  - "event-qps=<value>"

Je nach System starten Sie den RKE2-Dienst neu. Zum Beispiel, systemctl restart rke2-server.service

4.2.9 Stellen Sie sicher, dass die Argumente --tls-cert-file und --tls-private-key-file entsprechend gesetzt sind (automatisiert).

Ergebnis: PASS

Revision:

/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf

Erwartetes Ergebnis: '.tlsCertFile' ist vorhanden UND '.tlsPrivateKeyFile' ist vorhanden

Zurückgegebener Wert:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 2m0s
    enabled: true
  x509:
    clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 5m0s
    cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
  imagefs.available: 5%
  nodefs.available: 5%
evictionMinimumReclaim:
  imagefs.available: 10%
  nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
  flushFrequency: 5s
  format: text
  options:
    json:
      infoBufferSize: "0"
    text:
      infoBufferSize: "0"
  verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Behebung:

Standardmäßig stellt RKE2 automatisch das TLS-Zertifikat und den privaten Schlüssel für das Kubelet bereit. Sie werden generiert und befinden sich unter /var/lib/rancher/rke2/agent/serving-kubelet.crt und /var/lib/rancher/rke2/agent/serving-kubelet.key. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie alle Zeilen, die den folgenden Zeilen ähneln.

kubelet-arg:
  - "tls-cert-file=<path/to/tls-cert-file>"
  - "tls-private-key-file=<path/to/tls-private-key-file>"

4.2.10 Stellen Sie sicher, dass das Argument --rotate-certificates nicht auf false gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf

Erwartetes Ergebnis: '.rotateCertificates' ist vorhanden ODER '.rotateCertificates' ist nicht vorhanden.

Rückgabewert:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 2m0s
    enabled: true
  x509:
    clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 5m0s
    cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
  imagefs.available: 5%
  nodefs.available: 5%
evictionMinimumReclaim:
  imagefs.available: 10%
  nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
  flushFrequency: 5s
  format: text
  options:
    json:
      infoBufferSize: "0"
    text:
      infoBufferSize: "0"
  verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Behebung:

Standardmäßig setzt RKE2 das Argument --rotate-certificates nicht. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie jeden rotate-certificates-Parameter. Je nach System starten Sie den RKE2-Dienst neu. Zum Beispiel, systemctl restart rke2-server.service

4.2.11 Überprüfen Sie, ob das Argument RotateKubeletServerCertificate auf true gesetzt ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/cat /var/lib/rancher/rke2/agent/etc/kubelet.conf.d/00-rke2-defaults.conf

Erwartetes Ergebnis: '.featureGates.RotateKubeletServerCertificate' ist vorhanden ODER '.featureGates.RotateKubeletServerCertificate' ist nicht vorhanden.

Rückgabewert:
address: 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 2m0s
    enabled: true
  x509:
    clientCAFile: /var/lib/rancher/rke2/agent/client-ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 5m0s
    cacheUnauthorizedTTL: 30s
cgroupDriver: systemd
clusterDNS:
- 10.43.0.10
clusterDomain: cluster.local
containerRuntimeEndpoint: unix:///run/k3s/containerd/containerd.sock
cpuManagerReconcilePeriod: 10s
crashLoopBackOff: {}
evictionHard:
  imagefs.available: 5%
  nodefs.available: 5%
evictionMinimumReclaim:
  imagefs.available: 10%
  nodefs.available: 10%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: false
fileCheckFrequency: 20s
healthzBindAddress: 127.0.0.1
httpCheckFrequency: 20s
imageMaximumGCAge: 0s
imageMinimumGCAge: 2m0s
kind: KubeletConfiguration
logging:
  flushFrequency: 5s
  format: text
  options:
    json:
      infoBufferSize: "0"
    text:
      infoBufferSize: "0"
  verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 5m0s
nodeStatusUpdateFrequency: 10s
protectKernelDefaults: true
resolvConf: /run/systemd/resolve/resolv.conf
runtimeRequestTimeout: 2m0s
serializeImagePulls: false
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /var/lib/rancher/rke2/agent/pod-manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
tlsCertFile: /var/lib/rancher/rke2/agent/serving-kubelet.crt
tlsPrivateKeyFile: /var/lib/rancher/rke2/agent/serving-kubelet.key
volumeStatsAggPeriod: 1m0s
Behebung:

Standardmäßig setzt RKE2 das RotateKubeletServerCertificate Feature-Gate nicht. Wenn diese Überprüfung fehlschlägt, bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und entfernen Sie jeden RotateKubeletServerCertificate-Parameter. Je nach System starten Sie den RKE2-Dienst neu. Zum Beispiel, systemctl restart rke2-server.service

4.2.12 Stellen Sie sicher, dass der Kubelet nur starke kryptografische Chiffren verwendet (Manuell)

Ergebnis: WARN

Behebung: Bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml,

kubelet-arg:
  - "tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305"

oder auf eine Teilmenge dieser Werte. Je nach System starten Sie den RKE2-Dienst neu. Zum Beispiel systemctl restart rke2-server.service

4.2.13 Stellen Sie sicher, dass eine Begrenzung für Pod-PID festgelegt ist (Manuell).

Ergebnis: WARN

Behebung: Bearbeiten Sie die RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml und setzen Sie den folgenden Parameter auf einen geeigneten Wert.

kubelet-arg:
  - "pod-max-pids=<value>"

Je nach System starten Sie den RKE2-Dienst neu. Zum Beispiel systemctl restart rke2-server.service

4.2.14 Stellen Sie sicher, dass der --seccomp-default Parameter auf true gesetzt ist (Manuell)

Ergebnis: WARN

Behebung: Wenn aktiviert, verwendet das Kubelet standardmäßig das RuntimeDefault seccomp-Profil, das von der Container-Laufzeit definiert wird, anstatt den Unconfined (seccomp deaktiviert) Modus (Standard) zu verwenden. Wenn Sie eine RKE2-Konfigurationsdatei /etc/rancher/rke2/config.yaml verwenden, bearbeiten Sie die Datei, um seccomp-default auf kubelet-arg: zu setzen:

  • "seccomp-default=true"

4.3 kube-proxy

4.3.1 Stellen Sie sicher, dass der kube-proxy-Metrikdienst an localhost gebunden ist (Automatisiert)

Ergebnis: PASS

Revision:

/bin/sh -c 'if test -e /etc/kubernetes/addons/kube-proxy-daemonset.yaml; then cat /etc/kubernetes/addons/kube-proxy-daemonset.yaml; fi'

Erwartetes Ergebnis: '--metrics-bind-address' ist vorhanden ODER '--metrics-bind-address' ist nicht vorhanden

Zurückgegebener Wert:
UID          PID    PPID  C STIME TTY          TIME CMD
root       19921   19868  0 16:17 ?        00:00:00 kube-proxy --cluster-cidr=10.42.0.0/16 --conntrack-max-per-core=0 --conntrack-tcp-timeout-close-wait=0s --conntrack-tcp-timeout-established=0s --healthz-bind-address=127.0.0.1 --hostname-override=server-0 --kubeconfig=/var/lib/rancher/rke2/agent/kubeproxy.kubeconfig --proxy-mode=iptables
Behebung:

Ändern oder entfernen Sie alle Werte, die den Metrikdienst an eine Nicht-localhost-Adresse binden. Der Standardwert ist 127.0.0.1:10249.

5 Kubernetes-Richtlinien

5.1 RBAC und Dienstkonten

5.1.1 Stellen Sie sicher, dass die Rolle cluster-admin nur dort verwendet wird, wo es erforderlich ist (Manuell)

Ergebnis: PASS

Revision:

kubectl get clusterrolebindings -o=custom-columns=ROLE:.roleRef.name,NAME:.metadata.name,SUBJECT:.subjects[*].name --no-headers |  grep cluster-admin

Erwartetes Ergebnis: 'cluster-admin' wird durch den regulären Ausdruck 'cluster-admin' gefunden

helm-kube-system-rke2-.*'

Zurückgegebener Wert:
cluster-admin                                                   cluster-admin                                                   system:masters
cluster-admin                                                   helm-kube-system-rke2-canal                                     helm-rke2-canal
cluster-admin                                                   helm-kube-system-rke2-coredns                                   helm-rke2-coredns
cluster-admin                                                   helm-kube-system-rke2-ingress-nginx                             helm-rke2-ingress-nginx
cluster-admin                                                   helm-kube-system-rke2-metrics-server                            helm-rke2-metrics-server
cluster-admin                                                   helm-kube-system-rke2-runtimeclasses                            helm-rke2-runtimeclasses
cluster-admin                                                   helm-kube-system-rke2-snapshot-controller                       helm-rke2-snapshot-controller
cluster-admin                                                   helm-kube-system-rke2-snapshot-controller-crd                   helm-rke2-snapshot-controller-crd
Behebung:

Identifizieren Sie alle clusterrolebindings zur Rolle cluster-admin. Überprüfen Sie, ob sie verwendet werden und ob sie diese Rolle benötigen oder ob sie eine Rolle mit weniger Berechtigungen verwenden könnten. RKE2 gibt Ausnahmen für die helm-kube-system-rke2-* clusterrolebindings, die die Installation aller von RKE2 verwalteten Komponenten behandeln. Wo möglich, binden Sie zuerst Benutzer an eine weniger privilegierte Rolle und entfernen Sie dann das Clusterrolebinding zur Rolle des Cluster-Administrators:

kubectl delete clusterrolebinding [name]

5.1.2 Minimieren Sie den Zugriff auf Geheimnisse (Manuell)

Ergebnis: WARN

Behebung: Wo möglich, entfernen Sie den Zugriff auf get, list und watch von Secret-Objekten im Cluster.

5.1.3 Minimieren Sie die Verwendung von Wildcards in Rollen und ClusterRoles (Manuell)

Ergebnis: PASS

Revision:

# Check Roles
kubectl get roles --all-namespaces -o custom-columns=ROLE_NAMESPACE:.metadata.namespace,ROLE_NAME:.metadata.name --no-headers | while read -r role_namespace role_name
do
  role_rules=$(kubectl get role -n "${role_namespace}" "${role_name}" -o=json | jq -c '.rules')
  if echo "${role_rules}" | grep -q "\[\"\*\"\]"; then
    printf "**role_name: %-50s  role_namespace: %-25s role_rules: %s is_compliant: false\n" "${role_name}" "${role_namespace}" "${role_rules}"
  else
    printf "**role_name: %-50s role_namespace: %-25s is_compliant: true\n" "${role_name}" "${role_namespace}"
  fi;
done

cr_whitelist="cluster-admin rke2-cloud-controller-manager local-path-provisioner-role"
cr_whitelist="$cr_whitelist system:kube-controller-manager system:kubelet-api-admin system:controller:namespace-controller"
cr_whitelist="$cr_whitelist system:controller:disruption-controller system:controller:generic-garbage-collector"
cr_whitelist="$cr_whitelist system:controller:horizontal-pod-autoscaler system:controller:resourcequota-controller"
# Check ClusterRoles
kubectl get clusterroles -o custom-columns=CLUSTERROLE_NAME:.metadata.name --no-headers | while read -r clusterrole_name
do
  clusterrole_rules=$(kubectl get clusterrole "${clusterrole_name}" -o=json | jq -c '.rules')
  if echo "${cr_whitelist}" | grep -q "${clusterrole_name}"; then
    printf "**clusterrole_name: %-50s is_whitelist: true  is_compliant: true\n" "${clusterrole_name}"
  elif echo "${clusterrole_rules}" | grep -q "\[\"\*\"\]"; then
    echo "**clusterrole_name: ${clusterrole_name} clusterrole_rules: ${clusterrole_rules} is_compliant: false"
  else
    printf "**clusterrole_name: %-50s is_whitelist: false is_compliant: true\n" "${clusterrole_name}"
  fi;
done

Erwartetes Ergebnis: 'is_compliant' ist gleich 'true'

Rückgabewert:
**role_name: system:controller:bootstrap-signer                 role_namespace: kube-public               is_compliant: true
**role_name: extension-apiserver-authentication-reader          role_namespace: kube-system               is_compliant: true
**role_name: rke2-ingress-nginx                                 role_namespace: kube-system               is_compliant: true
**role_name: rke2-snapshot-controller                           role_namespace: kube-system               is_compliant: true
**role_name: system::leader-locking-kube-controller-manager     role_namespace: kube-system               is_compliant: true
**role_name: system::leader-locking-kube-scheduler              role_namespace: kube-system               is_compliant: true
**role_name: system:controller:bootstrap-signer                 role_namespace: kube-system               is_compliant: true
**role_name: system:controller:cloud-provider                   role_namespace: kube-system               is_compliant: true
**role_name: system:controller:token-cleaner                    role_namespace: kube-system               is_compliant: true
**clusterrole_name: admin                                              is_whitelist: true  is_compliant: true
**clusterrole_name: calico-node                                        is_whitelist: false is_compliant: true
**clusterrole_name: cluster-admin                                      is_whitelist: true  is_compliant: true
**clusterrole_name: edit                                               is_whitelist: false is_compliant: true
**clusterrole_name: flannel                                            is_whitelist: false is_compliant: true
**clusterrole_name: rke2-cloud-controller-manager                      is_whitelist: true  is_compliant: true
**clusterrole_name: rke2-coredns-rke2-coredns                          is_whitelist: false is_compliant: true
**clusterrole_name: rke2-coredns-rke2-coredns-autoscaler               is_whitelist: false is_compliant: true
**clusterrole_name: rke2-ingress-nginx                                 is_whitelist: false is_compliant: true
**clusterrole_name: rke2-snapshot-controller                           is_whitelist: false is_compliant: true
**clusterrole_name: system:aggregate-to-admin                          is_whitelist: false is_compliant: true
**clusterrole_name: system:aggregate-to-edit                           is_whitelist: false is_compliant: true
**clusterrole_name: system:aggregate-to-view                           is_whitelist: false is_compliant: true
**clusterrole_name: system:auth-delegator                              is_whitelist: false is_compliant: true
**clusterrole_name: system:basic-user                                  is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:certificatesigningrequests:nodeclient is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:certificatesigningrequests:selfnodeclient is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:kube-apiserver-client-approver is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:kube-apiserver-client-kubelet-approver is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:kubelet-serving-approver is_whitelist: false is_compliant: true
**clusterrole_name: system:certificates.k8s.io:legacy-unknown-approver is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:attachdetach-controller          is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:certificate-controller           is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:clusterrole-aggregation-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:cronjob-controller               is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:daemon-set-controller            is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:deployment-controller            is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:disruption-controller            is_whitelist: true  is_compliant: true
**clusterrole_name: system:controller:endpoint-controller              is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:endpointslice-controller         is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:endpointslicemirroring-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:ephemeral-volume-controller      is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:expand-controller                is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:generic-garbage-collector        is_whitelist: true  is_compliant: true
**clusterrole_name: system:controller:horizontal-pod-autoscaler        is_whitelist: true  is_compliant: true
**clusterrole_name: system:controller:job-controller                   is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:legacy-service-account-token-cleaner is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:namespace-controller             is_whitelist: true  is_compliant: true
**clusterrole_name: system:controller:node-controller                  is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:persistent-volume-binder         is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:pod-garbage-collector            is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:pv-protection-controller         is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:pvc-protection-controller        is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:replicaset-controller            is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:replication-controller           is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:resourcequota-controller         is_whitelist: true  is_compliant: true
**clusterrole_name: system:controller:root-ca-cert-publisher           is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:route-controller                 is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:service-account-controller       is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:service-controller               is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:statefulset-controller           is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:ttl-after-finished-controller    is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:ttl-controller                   is_whitelist: false is_compliant: true
**clusterrole_name: system:controller:validatingadmissionpolicy-status-controller is_whitelist: false is_compliant: true
**clusterrole_name: system:discovery                                   is_whitelist: false is_compliant: true
**clusterrole_name: system:heapster                                    is_whitelist: false is_compliant: true
**clusterrole_name: system:kube-aggregator                             is_whitelist: false is_compliant: true
**clusterrole_name: system:kube-controller-manager                     is_whitelist: true  is_compliant: true
**clusterrole_name: system:kube-dns                                    is_whitelist: false is_compliant: true
**clusterrole_name: system:kube-proxy                                  is_whitelist: false is_compliant: true
**clusterrole_name: system:kube-scheduler                              is_whitelist: false is_compliant: true
**clusterrole_name: system:kubelet-api-admin                           is_whitelist: true  is_compliant: true
**clusterrole_name: system:monitoring                                  is_whitelist: false is_compliant: true
**clusterrole_name: system:node                                        is_whitelist: false is_compliant: true
**clusterrole_name: system:node-bootstrapper                           is_whitelist: false is_compliant: true
**clusterrole_name: system:node-problem-detector                       is_whitelist: false is_compliant: true
**clusterrole_name: system:node-proxier                                is_whitelist: false is_compliant: true
**clusterrole_name: system:persistent-volume-provisioner               is_whitelist: false is_compliant: true
**clusterrole_name: system:public-info-viewer                          is_whitelist: false is_compliant: true
**clusterrole_name: system:rke2-controller                             is_whitelist: false is_compliant: true
**clusterrole_name: system:rke2-metrics-server                         is_whitelist: false is_compliant: true
**clusterrole_name: system:rke2-metrics-server-aggregated-reader       is_whitelist: false is_compliant: true
**clusterrole_name: system:service-account-issuer-discovery            is_whitelist: false is_compliant: true
**clusterrole_name: system:volume-scheduler                            is_whitelist: false is_compliant: true
**clusterrole_name: view                                               is_whitelist: false is_compliant: true
Behebung:

Wo möglich, ersetzen Sie jede Verwendung von Wildcards in ClusterRoles und Roles durch spezifische Objekte oder Aktionen. RKE2 gibt Ausnahmen für folgende Clusterrollen, die für den regulären Betrieb erforderlich sind:

  • rke2-cloud-controller-manager, local-path-provisioner-role, cluster-admin

  • system:kube-controller-manager, system:kubelet-api-admin, system:controller:namespace-controller,

  • system:controller:disruption-controller, system:controller:generic-garbage-collector,

  • system:controller:horizontal-pod-autoscaler, system:controller:resourcequota-controller

5.1.4 Minimieren Sie den Zugriff auf das Erstellen von Pods (Manuell)

Ergebnis: PASS

Revision:

echo "canCreatePodsAsSystemAuthenticated: $(kubectl auth can-i create pods --all-namespaces --as=system:authenticated)"

Erwartetes Ergebnis: 'canCreatePodsAsSystemAuthenticated' ist gleich 'nein'

Rückgabewert:
canCreatePodsAsSystemAuthenticated: no
Behebung:

Wo möglich, entfernen Sie den Zugriff auf das Erstellen von Pod-Objekten im Cluster.

5.1.5 Stellen Sie sicher, dass Standarddienstkonten nicht aktiv verwendet werden. (Manuell)

Ergebnis: PASS

Revision:

kubectl get serviceaccounts --all-namespaces --field-selector metadata.name=default \
-o custom-columns=N:.metadata.namespace,SA:.metadata.name,ASA:.automountServiceAccountToken --no-headers \
| while read -r namespace serviceaccount automountserviceaccounttoken
do
  if [ "${automountserviceaccounttoken}" = "<none>" ]; then
    automountserviceaccounttoken="notset"
  fi
  if [ "${namespace}" != "kube-system" ] && [ "${automountserviceaccounttoken}" != "false" ]; then
    printf "**namespace: %-20s service_account: %-10s automountServiceAccountToken: %-6s is_compliant: false\n" "${namespace}" "${serviceaccount}" "${automountserviceaccounttoken}"
  else
    printf "**namespace: %-20s service_account: %-10s automountServiceAccountToken: %-6s is_compliant: true\n" "${namespace}" "${serviceaccount}" "${automountserviceaccounttoken}"
  fi
done

Erwartetes Ergebnis: 'is_compliant' ist gleich 'true'

Rückgabewert:
**namespace: default              service_account: default    automountServiceAccountToken: false  is_compliant: true
**namespace: kube-node-lease      service_account: default    automountServiceAccountToken: false  is_compliant: true
**namespace: kube-public          service_account: default    automountServiceAccountToken: false  is_compliant: true
**namespace: kube-system          service_account: default    automountServiceAccountToken: false  is_compliant: true
Behebung:

Erstellen Sie explizite Dienstkonten, wo immer eine Kubernetes-Arbeitslast spezifischen Zugriff auf den Kubernetes-API-Server benötigt. Ändern Sie die Konfiguration jedes Standarddienstkontos, sodass der Wert automountServiceAccountToken: false enthalten ist. Alternativ verwenden Sie kubectl:

kubectl patch serviceaccount --namespace <NAMESPACE>lt;NAMESPACE<NAMESPACE>gt; default --patch '{"automountServiceAccountToken": false}'

5.1.6 Stellen Sie sicher, dass Dienstkonto-Token nur dort gemountet werden, wo es notwendig ist (Manuell)

Ergebnis: PASS

Revision:

kubectl get pods --all-namespaces -o custom-columns=POD_NAMESPACE:.metadata.namespace,POD_NAME:.metadata.name,POD_SERVICE_ACCOUNT:.spec.serviceAccount,POD_IS_AUTOMOUNTSERVICEACCOUNTTOKEN:.spec.automountServiceAccountToken --no-headers | while read -r pod_namespace pod_name pod_service_account pod_is_automountserviceaccounttoken
do
  # Skip pods with no service account
  if [ "${pod_service_account}" = "<none>" ]; then
    continue
  fi
  # Retrieve automountServiceAccountToken's value for ServiceAccount and Pod, set to notset if null or <none>.
  svacc_is_automountserviceaccounttoken=$(kubectl get serviceaccount -n "${pod_namespace}" "${pod_service_account}" -o json | jq -r '.automountServiceAccountToken' | sed -e 's/<none>/notset/g' -e 's/null/notset/g')
  pod_is_automountserviceaccounttoken=$(echo "${pod_is_automountserviceaccounttoken}" | sed -e 's/<none>/notset/g' -e 's/null/notset/g')
  if [ "${svacc_is_automountserviceaccounttoken}" = "false" ] && ( [ "${pod_is_automountserviceaccounttoken}" = "false" ] || [ "${pod_is_automountserviceaccounttoken}" = "notset" ] ); then
    is_compliant="true"
  elif [ "${svacc_is_automountserviceaccounttoken}" = "true" ] && [ "${pod_is_automountserviceaccounttoken}" = "false" ]; then
    is_compliant="true"
  else
    is_compliant="false"
  fi
  # Whitelist kube-system namespace as these pods are expected to contact the apiserver
  if [ "${pod_namespace}" = "kube-system" ]; then
    is_compliant="true"
  fi
  echo "**namespace: ${pod_namespace} pod_name: ${pod_name} service_account: ${pod_service_account} pod_is_automountserviceaccounttoken: ${pod_is_automountserviceaccounttoken} svacc_is_automountServiceAccountToken: ${svacc_is_automountserviceaccounttoken} is_compliant: ${is_compliant}"
done

Erwartetes Ergebnis: 'is_compliant' ist gleich 'true'

Rückgabewert:
**namespace: kube-system pod_name: helm-install-rke2-canal-789dp service_account: helm-rke2-canal pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-coredns-c8whl service_account: helm-rke2-coredns pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-ingress-nginx-gqtvn service_account: helm-rke2-ingress-nginx pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-metrics-server-7jckf service_account: helm-rke2-metrics-server pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-runtimeclasses-2zdbw service_account: helm-rke2-runtimeclasses pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-snapshot-controller-crd-9njtl service_account: helm-rke2-snapshot-controller-crd pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: helm-install-rke2-snapshot-controller-rm764 service_account: helm-rke2-snapshot-controller pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: rke2-canal-bqn2x service_account: canal pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true
**namespace: kube-system pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x service_account: coredns pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true
**namespace: kube-system pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 service_account: rke2-coredns-rke2-coredns-autoscaler pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true
**namespace: kube-system pod_name: rke2-ingress-nginx-controller-2pjn6 service_account: rke2-ingress-nginx pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: true is_compliant: true
**namespace: kube-system pod_name: rke2-metrics-server-75d485c65b-djgst service_account: rke2-metrics-server pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true
**namespace: kube-system pod_name: rke2-snapshot-controller-696989ffdd-ctddn service_account: rke2-snapshot-controller pod_is_automountserviceaccounttoken: notset svacc_is_automountServiceAccountToken: notset is_compliant: true
Behebung:

Ändern Sie die Definition von Dienstkonten und Pods, die keine Dienstkonto-Token mounten müssen, um dies mit automountServiceAccountToken: false zu deaktivieren. RKE2 gibt Ausnahmen für die ServiceAccounts im kube-system-Namespace, da diese erwartet werden, um den apiserver zu kontaktieren. Wenn im CIS-Modus deaktiviert RKE2 das automountServiceAccountToken für die Namespaces:

  • kube-public, default, kube-node-lease. Wenn sowohl das ServiceAccount als auch die .spec des Pods einen Wert für automountServiceAccountToken angeben, hat die Pod-Spezifikation Vorrang. Bedingung: Pod ist_compliant auf true, wenn

    • ServiceAccount ist automountServiceAccountToken: false und Pod ist automountServiceAccountToken: false oder nicht gesetzt

    • ServiceAccount ist automountServiceAccountToken: true/nicht gesetzt und Pod ist automountServiceAccountToken: false

5.1.7 Vermeiden Sie die Verwendung der Gruppe system:masters (Manuell)

Ergebnis: WARN

Behebung: Entfernen Sie die Gruppe system:masters von allen Benutzern im Cluster.

5.1.8 Begrenzen Sie die Verwendung der Berechtigungen Binden, Nachahmen und Eskalieren im Kubernetes-Cluster (Manuell)

Ergebnis: WARN

Behebung: Wo möglich, entfernen Sie die Rechte zum Nachahmen, Binden und Eskalieren von Subjekten.

5.1.9 Minimieren Sie den Zugriff auf das Erstellen von persistenten Volumes (Manuell)

Ergebnis: WARN

Behebung: Wo möglich, entfernen Sie den Zugriff auf das Erstellen von PersistentVolume-Objekten im Cluster.

5.1.10 Minimieren Sie den Zugriff auf die Proxy-Teilressource von Knoten (Manuell)

Ergebnis: WARN

Behebung: Wo möglich, entfernen Sie den Zugriff auf die Proxy-Teilressource von Knotenobjekten.

5.1.11 Minimieren Sie den Zugriff auf die Genehmigungs-Teilressource von Zertifikatsignierungsanforderungsobjekten (Manuell)

Ergebnis: WARN

Behebung: Wo möglich, entfernen Sie den Zugriff auf die Genehmigungs-Teilressource von Zertifikatsanfragenobjekten.

5.1.12 Den Zugriff auf Webhook-Konfigurationsobjekte minimieren (Manuell)

Ergebnis: WARN

Behebung: Wo möglich, entfernen Sie den Zugriff auf die validatingwebhookconfigurations- oder mutatingwebhookconfigurations-Objekte.

5.1.13 Minimieren Sie den Zugriff auf die Erstellung von Service-Account-Token (Manuell)

Ergebnis: WARN

Behebung: Wo möglich, entfernen Sie den Zugriff auf die Token-Teilressource von Service-Account-Objekten.

5.2 Pod-Sicherheitsstandards

5.2.1 Stellen Sie sicher, dass der Cluster mindestens einen aktiven Richtlinienkontrollmechanismus hat (Manuell)

Ergebnis: WARN

Behebung: Stellen Sie sicher, dass entweder Pod-Sicherheitszulassung oder ein externes Richtlinienkontrollsystem für jeden Namespace vorhanden ist, der Benutzerlasten enthält.

5.2.2 Minimieren Sie die Zulassung von privilegierten Containern (Manuell)

Ergebnis: PASS

Revision:

whitelist="kube-flannel calico-node kube-proxy"
kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
  # Retrieve container(s) for each Pod.
  kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o json | jq -c '.spec.containers[]' | while read -r container
  do
    # Retrieve container's name.
    container_name=$(echo ${container} | jq -r '.name')
    # Retrieve container's .securityContext.privileged value.
    container_privileged=$(echo ${container} | jq -r '.securityContext.privileged' | sed -e 's/null/notset/g')
    # Check if container name is in whitelist.
    if echo "${whitelist}" | grep -q "${container_name}"; then
      echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} is_container_privileged: ${container_privileged} is_whitelist: true is_compliant: true"
    elif [ "${container_privileged}" = "false" ] || [ "${container_privileged}" = "notset" ] ; then
      echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} is_container_privileged: ${container_privileged} is_compliant: true"
    else
      echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} is_container_privileged: ${container_privileged} is_compliant: false"
    fi
  done
done

Erwartetes Ergebnis: 'is_compliant' ist gleich 'true'

Rückgabewert:
***pod_name: cloud-controller-manager-server-0 container_name: cloud-controller-manager pod_namespace: kube-system is_container_privileged: false is_compliant: true
***pod_name: etcd-server-0 container_name: etcd pod_namespace: kube-system is_container_privileged: false is_compliant: true
***pod_name: helm-install-rke2-canal-789dp container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 container_name: helm pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: kube-apiserver-server-0 container_name: kube-apiserver pod_namespace: kube-system is_container_privileged: false is_compliant: true
***pod_name: kube-controller-manager-server-0 container_name: kube-controller-manager pod_namespace: kube-system is_container_privileged: false is_compliant: true
***pod_name: kube-proxy-server-0 container_name: kube-proxy pod_namespace: kube-system is_container_privileged: true is_whitelist: true is_compliant: true
***pod_name: kube-scheduler-server-0 container_name: kube-scheduler pod_namespace: kube-system is_container_privileged: false is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: calico-node pod_namespace: kube-system is_container_privileged: true is_whitelist: true is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: kube-flannel pod_namespace: kube-system is_container_privileged: true is_whitelist: true is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x container_name: coredns pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 container_name: autoscaler pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 container_name: rke2-ingress-nginx-controller pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst container_name: metrics-server pod_namespace: kube-system is_container_privileged: notset is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn container_name: rke2-snapshot-controller pod_namespace: kube-system is_container_privileged: notset is_compliant: true
Behebung:

Fügen Sie in jedem Namespace, der Benutzerlasten enthält, Richtlinien hinzu, um die Zulassung von privilegierten Containern einzuschränken. RKE2 gibt Ausnahmen für die folgenden Pods, die für den regulären Betrieb erforderlich sind:

  • kube-flannel, calico-node, kube-proxy. Audit: Das Audit listet alle Container der Pods auf, um deren .securityContext.privileged-Wert abzurufen. Bedingung: is_compliant ist falsch, wenn der .securityContext.privileged des Containers auf true gesetzt ist. Standard: Standardmäßig gibt es keine Einschränkungen bei der Erstellung von privilegierten Containern.

5.2.3 Die Zulassung von Containern, die den Host-Prozess-ID-Namespace teilen möchten, minimieren (Manuell)

Ergebnis: PASS

Revision:

kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
  # Retrieve spec.hostPID for each pod.
  pod_hostpid=$(kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o jsonpath='{.spec.hostPID}' 2>/dev/null)
  if [ -z "${pod_hostpid}" ]; then
    pod_hostpid="false"
    echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostpid: ${pod_hostpid} is_compliant: true"
  else
    echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostpid: ${pod_hostpid} is_compliant: false"
  fi
done

Erwartetes Ergebnis: 'is_compliant' ist gleich 'true'

Rückgabewert:
***pod_name: cloud-controller-manager-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: etcd-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-canal-789dp pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: kube-apiserver-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: kube-controller-manager-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: kube-proxy-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: kube-scheduler-server-0 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-canal-bqn2x pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn pod_namespace: kube-system is_pod_hostpid: false is_compliant: true
Behebung:

Fügen Sie in jedem Namespace, der Benutzerlasten enthält, Richtlinien hinzu, um die Zulassung von hostPID Containern einzuschränken. Audit: Das Audit ruft die spec.hostPID jedes Pods ab. Bedingung: is_compliant ist falsch, wenn die spec.hostPID des Pods auf true gesetzt ist. Standard: Standardmäßig gibt es keine Einschränkungen bei der Erstellung von hostPID-Containern.

5.2.4 Minimieren Sie die Zulassung von Containern, die den IPC-Namespace des Hosts teilen möchten (Manuell)

Ergebnis: PASS

Revision:

kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
  # Retrieve spec.hostIPC for each pod.
  pod_hostipc=$(kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o jsonpath='{.spec.hostIPC}' 2>/dev/null)
  if [ -z "${pod_hostipc}" ]; then
    pod_hostipc="false"
    echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostipc: ${pod_hostipc} is_compliant: true"
  else
    echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostipc: ${pod_hostipc} is_compliant: false"
  fi
done

Erwartetes Ergebnis: 'is_compliant' ist gleich 'true'

Rückgabewert:
***pod_name: cloud-controller-manager-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: etcd-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-canal-789dp pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: kube-apiserver-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: kube-controller-manager-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: kube-proxy-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: kube-scheduler-server-0 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-canal-bqn2x pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn pod_namespace: kube-system is_pod_hostipc: false is_compliant: true
Behebung:

Richtlinien zu jedem Namespace im Cluster hinzufügen, der Benutzerlasten hat, um die Zulassung von hostIPC Containern einzuschränken. Audit: Das Audit ruft die spec.IPC jedes Pods ab. Bedingung: is_compliant ist falsch, wenn die spec.hostIPC des Pods auf true gesetzt ist. Standard: Standardmäßig gibt es keine Einschränkungen für die Erstellung von hostIPC-Containern.

5.2.5 Minimieren Sie die Zulassung von Containern, die den Netzwerk-Namespace des Hosts teilen möchten (Manuell)

Ergebnis: PASS

Revision:

whitelist="cloud-controller-manager etcd rke2-canal rke2-coredns kube-apiserver kube-scheduler kube-proxy kube-controller-manager"
is_in_whitelist() {
  for entry in $whitelist; do
    case "${pod_name}" in
      *"${entry}"*)
        return 0
        ;;
    esac
  done
  return 1
}
kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
  # Retrieve spec.hostNetwork for each pod.
  pod_hostnetwork=$(kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o jsonpath='{.spec.hostNetwork}' 2>/dev/null)
  echo "${whitelist}" | grep -q "${pod_name}"
  if [ "${pod_namespace}" = 'kube-system' ] && is_in_whitelist; then
    echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostnetwork: ${pod_hostnetwork} is_whitelist: true is_compliant: true"
  elif [ -z "${pod_hostnetwork}" ]; then
    pod_hostnetwork="false"
    echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostnetwork: ${pod_hostnetwork} is_compliant: true"
  else
    echo "***pod_name: ${pod_name} pod_namespace: ${pod_namespace} is_pod_hostnetwork: ${pod_hostnetwork} is_compliant: false"
  fi
done

Erwartetes Ergebnis: 'is_compliant' ist gleich 'true'

Rückgabewert:
***pod_name: cloud-controller-manager-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: etcd-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: helm-install-rke2-canal-789dp pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: kube-apiserver-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: kube-controller-manager-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: kube-proxy-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: kube-scheduler-server-0 pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: rke2-canal-bqn2x pod_namespace: kube-system is_pod_hostnetwork: true is_whitelist: true is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x pod_namespace: kube-system is_pod_hostnetwork:  is_whitelist: true is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 pod_namespace: kube-system is_pod_hostnetwork:  is_whitelist: true is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn pod_namespace: kube-system is_pod_hostnetwork: false is_compliant: true
Behebung:

Fügen Sie in jedem Namespace, der Benutzerlasten enthält, Richtlinien hinzu, um die Zulassung von hostNetwork Containern einzuschränken. RKE2 gibt Ausnahmen für die folgenden Pods im kube-system-Namespace, die für den regulären Betrieb erforderlich sind:

  • cloud-controller-manager, etcd, rke2-canal, rke2-coredns, kube-apiserver,

  • kube-scheduler, kube-proxy, kube-controller-manager. Audit: Das Audit ruft das spec.hostNetwork jedes Pods ab. Bedingung: is_compliant ist falsch, wenn die spec.hostNetwork des Pods auf true gesetzt ist. Standard: Standardmäßig gibt es keine Einschränkungen für die Erstellung von hostNetwork-Containern.

5.2.6 Minimieren Sie die Zulassung von Containern mit allowPrivilegeEscalation (Manuell)

Ergebnis: PASS

Revision:

kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
  # Retrieve container(s) for each Pod.
  kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o json | jq -c '.spec.containers[]' | while read -r container
  do
    # Retrieve container's name
    container_name=$(echo ${container} | jq -r '.name')
    # Retrieve container's .securityContext.allowPrivilegeEscalation
    container_allowprivesc=$(echo ${container} | jq -r '.securityContext.allowPrivilegeEscalation' | sed -e 's/null/notset/g')
    if [ "${container_allowprivesc}" = "false" ] || [ "${container_allowprivesc}" = "notset" ]; then
      echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} is_container_allowprivesc: ${container_allowprivesc} is_compliant: true"
    else
      echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} is_container_allowprivesc: ${container_allowprivesc} is_compliant: false"
    fi
  done
done

Erwartetes Ergebnis: 'is_compliant' ist gleich 'true'

Rückgabewert:
***pod_name: cloud-controller-manager-server-0 container_name: cloud-controller-manager pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: etcd-server-0 container_name: etcd pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: helm-install-rke2-canal-789dp container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 container_name: helm pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: kube-apiserver-server-0 container_name: kube-apiserver pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: kube-controller-manager-server-0 container_name: kube-controller-manager pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: kube-proxy-server-0 container_name: kube-proxy pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: kube-scheduler-server-0 container_name: kube-scheduler pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: calico-node pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: kube-flannel pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x container_name: coredns pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 container_name: autoscaler pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 container_name: rke2-ingress-nginx-controller pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst container_name: metrics-server pod_namespace: kube-system is_container_allowprivesc: false is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn container_name: rke2-snapshot-controller pod_namespace: kube-system is_container_allowprivesc: notset is_compliant: true
Behebung:

Fügen Sie Richtlinien zu jedem Namespace im Cluster hinzu, der Benutzerlasten hat, um die Zulassung von Containern mit .securityContext.allowPrivilegeEscalation auf true zu beschränken. Audit: Das Audit ruft die Container jedes Pods .securityContext.allowPrivilegeEscalation ab. Bedingung: is_compliant ist falsch, wenn .securityContext.allowPrivilegeEscalation des Containers auf true gesetzt ist. Standardwert: Wenn nicht gesetzt, ist eine Privilegieneskalation erlaubt (Standard auf wahr). Wenn jedoch PSP/PSA mit einem restricted Profil verwendet wird, ist die Privilegieneskalation ausdrücklich nicht erlaubt, es sei denn, es ist anders konfiguriert.

5.2.7 Minimieren Sie die Zulassung von Root-Containern (Manuell)

Ergebnis: WARN

Behebung: Erstellen Sie eine Richtlinie für jeden Namespace im Cluster und stellen Sie sicher, dass entweder MustRunAsNonRoot oder MustRunAs mit dem Bereich der UIDs, der 0 nicht einschließt, gesetzt ist.

5.2.8 Minimieren Sie die Zulassung von Containern mit der NET_RAW-Fähigkeit (Manuell)

Ergebnis: WARN

Behebung: Fügen Sie Richtlinien zu jedem Namespace im Cluster hinzu, der Benutzerlasten hat, um die Zulassung von Containern mit der NET_RAW Fähigkeit zu beschränken.

5.2.9 Minimieren Sie die Zulassung von Containern mit hinzugefügten Fähigkeiten (Manuell)

Ergebnis: PASS

Revision:

whitelist="rke2-ingress-nginx-controller coredns"
kubectl get pods --all-namespaces -o custom-columns=POD_NAME:.metadata.name,POD_NAMESPACE:.metadata.namespace --no-headers | while read -r pod_name pod_namespace
do
  # Retrieve container(s) for each Pod.
  kubectl get pod "${pod_name}" --namespace "${pod_namespace}" -o json | jq -c '.spec.containers[]' | while read -r container
  do
    # Retrieve container's name
    container_name=$(echo ${container} | jq -r '.name')
    # Retrieve container's added capabilities
    container_caps_add=$(echo ${container} | jq -r '.securityContext.capabilities.add' | sed -e 's/null/notset/g')
    # Set is_compliant to true by default.
    is_compliant=true
    is_whitelist=false
    caps_list=""
    if [ "${container_caps_add}" != "notset" ]; then
      # Loop through all caps and append caps_list, then set is_compliant to false.
      for cap in $(echo "${container_caps_add}" | jq -r '.[]'); do
        caps_list="${caps_list}${cap},"
        is_compliant=false
      done
      # Remove trailing comma for the last list member.
      caps_list=${caps_list%,}
    fi
    # Remove newline from container_caps_add for final output.
    container_caps_add=$(echo "${container_caps_add}" | tr -d '\n')
    if [ "${pod_namespace}" = "kube-system" ] && echo "${whitelist}" | grep -q "${container_name}"; then
      echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} container_caps_add: ${container_caps_add} is_whitelist: true is_compliant: true"
    elif [ "${is_compliant}" = true ]; then
      echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} container_caps_add: ${container_caps_add} is_compliant: true"
    else
      echo "***pod_name: ${pod_name} container_name: ${container_name} pod_namespace: ${pod_namespace} container_caps_add: ${caps_list} is_compliant: false"
    fi
  done
done

Erwartetes Ergebnis: 'is_compliant' ist gleich 'true'

Rückgabewert:
***pod_name: cloud-controller-manager-server-0 container_name: cloud-controller-manager pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: etcd-server-0 container_name: etcd pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-canal-789dp container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-coredns-c8whl container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-ingress-nginx-gqtvn container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-metrics-server-7jckf container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-runtimeclasses-2zdbw container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-crd-9njtl container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: helm-install-rke2-snapshot-controller-rm764 container_name: helm pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: kube-apiserver-server-0 container_name: kube-apiserver pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: kube-controller-manager-server-0 container_name: kube-controller-manager pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: kube-proxy-server-0 container_name: kube-proxy pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: kube-scheduler-server-0 container_name: kube-scheduler pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: calico-node pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: rke2-canal-bqn2x container_name: kube-flannel pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-6464f98784-7mc2x container_name: coredns pod_namespace: kube-system container_caps_add: [  "NET_BIND_SERVICE"] is_whitelist: true is_compliant: true
***pod_name: rke2-coredns-rke2-coredns-autoscaler-67bb49dff-lks69 container_name: autoscaler pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: rke2-ingress-nginx-controller-2pjn6 container_name: rke2-ingress-nginx-controller pod_namespace: kube-system container_caps_add: [  "NET_BIND_SERVICE"] is_whitelist: true is_compliant: true
***pod_name: rke2-metrics-server-75d485c65b-djgst container_name: metrics-server pod_namespace: kube-system container_caps_add: notset is_compliant: true
***pod_name: rke2-snapshot-controller-696989ffdd-ctddn container_name: rke2-snapshot-controller pod_namespace: kube-system container_caps_add: notset is_compliant: true
Behebung:

Stellen Sie sicher, dass allowedCapabilities nicht in den Richtlinien für den Cluster vorhanden ist, es sei denn, es ist auf ein leeres Array gesetzt. RKE2 gibt Ausnahmen für die folgenden Pods im kube-system-Namespace, die für den regulären Betrieb erforderlich sind:

  • rke2-ingress-ngninx-controller, coredns. Audit: Das Audit ruft die hinzugefügten Fähigkeiten der Container jedes Pods ab. Bedingung: is_compliant ist falsch, wenn für einen bestimmten Container hinzugefügte Fähigkeiten vorhanden sind. Standardwert: Container werden mit einem standardmäßigen Satz von Fähigkeiten ausgeführt, die von der Container-Laufzeit zugewiesen werden.

5.2.10 Minimieren Sie die Zulassung von Containern mit zugewiesenen Fähigkeiten (Manuell)

Ergebnis: WARN

Behebung: Überprüfen Sie die Verwendung von Fähigkeiten in Anwendungen, die auf Ihrem Cluster ausgeführt werden. Wenn ein Namespace Anwendungen enthält, die keine Linux-Fähigkeiten benötigen, um zu funktionieren, ziehen Sie in Betracht, eine PSP hinzuzufügen, die die Zulassung von Containern verbietet, die nicht alle Fähigkeiten ablegen.

5.2.11 Minimieren Sie die Zulassung von Windows HostProcess-Containern (Manuell)

Ergebnis: WARN

Behebung: Fügen Sie Richtlinien zu jedem Namespace im Cluster hinzu, der Benutzerlasten hat, um die Zulassung von Containern einzuschränken, die .securityContext.windowsOptions.hostProcess auf true gesetzt haben.

5.2.12 Minimieren Sie die Zulassung von HostPath-Volumes (Manuell)

Ergebnis: WARN

Behebung: Fügen Sie Richtlinien zu jedem Namespace im Cluster hinzu, der Benutzerlasten hat, um die Zulassung von Containern mit hostPath-Volumes einzuschränken.

5.2.13 Minimieren Sie die Zulassung von Containern, die HostPorts verwenden (Manuell)

Ergebnis: WARN

Behebung: Fügen Sie Richtlinien zu jedem Namespace im Cluster hinzu, der Benutzerlasten hat, um die Zulassung von Containern einzuschränken, die hostPort-Abschnitte verwenden.

5.3 Netzwerk-Richtlinien und CNI

5.3.1 Stellen Sie sicher, dass das verwendete CNI Netzwerk-Richtlinien unterstützt (Manuell)

Ergebnis: WARN

Behebung: Wenn das verwendete CNI-Plugin keine Netzwerk-Richtlinien unterstützt, sollte in Betracht gezogen werden, ein anderes Plugin zu verwenden oder einen alternativen Mechanismus zur Einschränkung des Datenverkehrs im Kubernetes-Cluster zu finden.

5.3.2 Stellen Sie sicher, dass alle Namespaces Netzwerk-Richtlinien definiert haben (Manuell)

Ergebnis: WARN

Behebung: Befolgen Sie die Dokumentation und erstellen Sie Netzwerk-Richtlinienobjekte nach Bedarf.

5.4 Secretsverwaltung

5.4.1 Bevorzugen Sie die Verwendung von Secrets als Dateien gegenüber Secrets als Umgebungsvariablen (Manuell)

Ergebnis: WARN

Behebung: Falls möglich, schreiben Sie den Anwendungscode um, um Secrets aus gemounteten Secret-Dateien zu lesen, anstatt aus Umgebungsvariablen.

5.4.2 Ziehen Sie einen externen Secret-Speicher in Betracht (Manuell)

Ergebnis: WARN

Behebung: Verweisen Sie auf die von Ihrem Cloud-Anbieter oder einer Drittanbieter-Secretsverwaltungslösung angebotenen Optionen zur Secretsverwaltung.

5.5 Erweiterbare Zugangssteuerung

5.5.1 Konfigurieren Sie die Bildherkunft mithilfe des ImagePolicyWebhook Admission-Controllers (Manuell)

Ergebnis: WARN

Behebung: Befolgen Sie die Kubernetes-Dokumentation und richten Sie die Provenance ein.

5.6 Allgemeine Richtlinien

5.6.1 Erstellen Sie administrative Grenzen zwischen Ressourcen mithilfe von Namespaces (Manuell)

Ergebnis: WARN

Behebung: Befolgen Sie die Dokumentation und erstellen Sie Namespaces für Objekte in Ihrer Implementierung, wie Sie sie benötigen.

5.6.2 Stellen Sie sicher, dass das seccomp-Profil in Ihren Pod-Definitionen auf docker/default gesetzt ist (Manuell)

Ergebnis: WARN

Behebung: Verwenden Sie securityContext, um das docker/default seccomp-Profil in Ihren Pod-Definitionen zu aktivieren. Ein Beispiel ist wie folgt: securityContext: seccompProfile: type: RuntimeDefault

5.6.3 Wenden Sie SecurityContext auf Ihre Pods und Container an (Manuell)

Ergebnis: WARN

Behebung: Befolgen Sie die Kubernetes-Dokumentation und wenden Sie SecurityContexts auf Ihre Pods an. Für eine vorgeschlagene Liste von SecurityContexts können Sie sich an den CIS Security Benchmark für Docker-Container wenden.

5.6.4 Der Standard-Namespace sollte nicht verwendet werden (Manuell)

Ergebnis: WARN

Behebung: Stellen Sie sicher, dass Namespaces erstellt werden, um eine angemessene Trennung der Kubernetes-Ressourcen zu ermöglichen, und dass alle neuen Ressourcen in einem bestimmten Namespace erstellt werden.