Profilanwendbarkeit: Stufe 1
Wenn
kubelet läuft und durch eine kubeconfig-Datei konfiguriert ist, stellen Sie sicher, dass
die Proxy-kubeconfig-Datei Berechtigungen von 644 oder restriktiver hat.Die
kubelet kubeconfig-Datei steuert verschiedene Parameter des kubelet-Dienstes im Arbeitsknoten. Sie sollten die Dateiberechtigungen einschränken, um die
Integrität der Datei zu wahren. Die Datei sollte nur von den Administratoren des Systems
beschreibbar sein.Es ist möglich,
kubelet mit den kubeconfig-Parametern auszuführen, die als Kubernetes ConfigMap anstelle
einer Datei konfiguriert sind. In diesem Fall gibt es keine Proxy-kubeconfig-Datei.
HinweisSiehe die AWS EKS-Dokumentation für den Standardwert.
|
Auswirkung
Ensuring that the kubeconfig file permissions are set to 644 or more restrictive significantly
strengthens the security posture of the Kubernetes environment by preventing unauthorized
modifications. This restricts write access to the kubeconfig file, ensuring only administrators
can alter crucial kubelet configurations, thereby reducing the risk of malicious alterations
that could compromise the cluster's integrity.
Diese Konfiguration kann die Benutzerfreundlichkeit geringfügig beeinträchtigen, da
sie die Möglichkeit für nicht-administrative Benutzer einschränkt, schnelle Anpassungen
an den Kubelet-Einstellungen vorzunehmen. Administratoren müssen die Sicherheitsanforderungen
mit der betrieblichen Flexibilität in Einklang bringen, was möglicherweise Anpassungen
der Arbeitsabläufe zur Verwaltung der Kubelet-Konfigurationen erfordert.
Prüfung
Methode 1
SSH zu den Worker-Knoten.
-
Geben Sie den folgenden Befehl ein, um zu überprüfen, ob der Kubelet-Dienst läuft:
sudo systemctl status kubelet
Die Ausgabe sollteAktiv: aktiv (läuft) seit..zurückgeben. -
Führen Sie den folgenden Befehl auf jedem Knoten aus, um die passende kubeconfig-Datei zu finden:
ps -ef | grep kubelet
Die Ausgabe sollte etwas Ähnliches wie--kubeconfig /var/lib/kubelet/kubeconfigzurückgeben, was den Speicherort der kubeconfig-Datei darstellt. -
Führen Sie diesen Befehl aus, um die Berechtigungen der kubeconfig-Datei zu erhalten:
stat -c %a /var/lib/kubelet/kubeconfig
-
Überprüfen Sie, ob eine Datei angegeben ist und ob sie existiert, dass die Berechtigungen 644 oder restriktiver sind.
Methode 2
Erstellen und Ausführen eines privilegierten Pods
-
Run a pod that is privileged enough to access the host's file system. To do this, deploy a pod that uses the hostPath volume to mount the node's file system into the pod.Ein Beispiel für eine einfache Pod-Definition, die das Root-Verzeichnis des Hosts im Pod unter /host einbindet:
apiVersion: v1 kind: Pod metadata: name: file-check spec: volumes: - name: host-root hostPath: path: / type: Directory containers: - name: nsenter image: busybox command: ["sleep", "3600"] volumeMounts: - name: host-root mountPath: /host securityContext: privileged: true -
Speichern Sie dies in einer Datei (z. B. file-check-pod.yaml) und erstellen Sie das Pod:
kubectl apply -f file-check-pod.yaml
-
Sobald das Pod läuft, führen Sie einen Exec-Befehl aus, um die Dateiberechtigungen auf dem Knoten zu überprüfen:
kubectl exec -it file-check -- sh
-
Jetzt befinden Sie sich in einer Shell innerhalb des Pods, aber Sie können über das /host-Verzeichnis auf das Dateisystem des Knotens zugreifen und die Berechtigungsstufe der Datei überprüfen:
ls -l /host/var/lib/kubelet/kubeconfig
-
Überprüfen Sie, ob eine Datei angegeben ist und ob sie existiert, dass die Berechtigungen 644 oder restriktiver sind.
Wiederherstellung
Führen Sie den folgenden Befehl (basierend auf dem Dateispeicherort auf Ihrem System)
auf jedem Worker-Knoten aus. Zum Beispiel:
chmod 644 <kubeconfig file>
