Profilanwendbarkeit: Stufe 2
Vermeiden Sie
ClusterRoleBindings oder RoleBindings mit dem Benutzer system:anonymous.Kubernetes weist dem Benutzer
system:anonymous API-Server-Anfragen zu, bei denen keine Authentifizierungsinformationen bereitgestellt
werden. Das Binden einer Rolle an den Benutzer system:anonymous gibt jedem nicht authentifizierten Benutzer die von dieser Rolle gewährten Berechtigungen
und wird dringend abgeraten.
HinweisKeine
ClusterRoleBindings oder RoleBindings mit Benutzer system:anonymous. |
Auswirkung
Nicht authentifizierte Benutzer haben Berechtigungen und Rechte, die mit Rollen verbunden
sind, die den konfigurierten Bindungen zugeordnet sind. Es sollte Vorsicht walten
gelassen werden, bevor
clusterrolebindings oder rolebindings aus der Umgebung entfernt werden, um sicherzustellen, dass sie nicht für den Betrieb
des Clusters erforderlich waren. Verwenden Sie einen spezifischeren und authentifizierten
Benutzer für Cluster-Operationen.Prüfung
Sowohl
ClusterRoleBindings als auch RoleBindings sollten überprüft werden.Verwenden Sie den folgenden Befehl, um zu bestätigen, dass keine
ClusterRoleBindings für system:anonymous vorhanden sind:$ kubectl get clusterrolebindings -o json | jq -r '["Name"], ["-----"], (.items[] | select((.subjects | length) > 0) | select(any(.subjects[]; .name == "system:anonymous")) | [.metadata.namespace, .metadata.name]) | @tsv'
Es sollten keine
ClusterRoleBindings aufgeführt sein.Wenn Bindungen vorhanden sind, überprüfen Sie deren Berechtigungen mit dem folgenden
Befehl und bewerten Sie deren Privilegien neu.
$ kubectl get clusterrolebinding [CLUSTER_ROLE_BINDING_NAME] -o json \ | jq ' .roleRef.name +" " + .roleRef.kind' \ | sed -e 's/"//g' \ | xargs -l bash -c 'kubectl get $1 $0 -o yaml'
Bestätigen Sie, dass es keine
RoleBindings gibt, die den system:anonymous-Benutzer einschließen:$ kubectl get rolebindings -A -o json | jq -r '["Namespace", "Name"], ["----- ----", "-----"], (.items[] | select((.subjects | length) > 0) | select(any(.subjects[]; .name == "system:anonymous")) | [.metadata.namespace, .metadata.name]) | @tsv'
Es sollten keine
RoleBindings aufgeführt sein.Wenn Bindungen vorhanden sind, überprüfen Sie deren Berechtigungen mit dem folgenden
Befehl und bewerten Sie deren Privilegien neu.
$ kubectl get rolebinding [ROLE_BINDING_NAME] --namespace [ROLE_BINDING_NAMESPACE] -o json \ | jq ' .roleRef.name +" " + .roleRef.kind' \ | sed -e 's/"//g' \ | xargs -l bash -c 'kubectl get $1 $0 -o yaml --namespace [ROLE_BINDING_NAMESPACE]'
Wiederherstellung
Identifizieren Sie alle
clusterrolebindings und rolebindings für den Benutzer system:anonymous. Überprüfen Sie, ob sie verwendet werden, und überprüfen Sie die mit der Bindung
verbundenen Berechtigungen mithilfe der Befehle im Audit-Abschnitt oben oder konsultieren
Sie die GKE-Dokumentation.Erwägen Sie dringend, unsichere Bindungen durch eine authentifizierte, benutzerdefinierte
Gruppe zu ersetzen. Binden Sie, wo möglich, an nicht standardmäßige, benutzerdefinierte
Gruppen mit Rollen mit minimalen Berechtigungen.
Falls es unsichere Bindungen zum Benutzer
system:anonymous gibt, fahren Sie mit deren Löschung fort, nachdem Sie die Clusteroperationen mit
nur notwendigen, sichereren Bindungen berücksichtigt haben.kubectl delete clusterrolebinding [CLUSTER_ROLE_BINDING_NAME] kubectl delete rolebinding [ROLE_BINDING_NAME] --namespace [ROLE_BINDING_NAMESPACE]
