Ansichten:
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.
Hinweis
Hinweis
Weder clusterrolebindings noch rolebindings mit Benutzer system:anonymous.

Auswirkung

Nicht authentifizierte Benutzer haben Berechtigungen und Rechte, die den Rollen zugeordnet sind, die mit den konfigurierten Bindungen verbunden 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 CusterRoleBindings als auch RoleBindings sollten überprüft werden. Verwenden Sie den folgenden Befehl, um zu bestätigen, dass es keine ClusterRoleBindings zu system:anonymous gibt:
$ 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. Falls Bindungen existieren, ü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 keine RoleBindings einschließlich des system:anonymous-Benutzers vorhanden sind:
$ 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.
Falls 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 das Benutzersystem: anonym.
Überprüfen Sie, ob sie verwendet werden, und überprüfen Sie die mit der Bindung verbundenen Berechtigungen mithilfe der Befehle im obigen Abschnitt "Audit" 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 den geringsten Privilegien. Wenn es unsichere Bindungen zum Benutzer system:anonymous gibt, fahren Sie fort, diese nach Abwägung der Cluster-Operationen mit nur notwendigen, sichereren Bindungen zu löschen.
kubectl delete clusterrolebinding 
[CLUSTER_ROLE_BINDING_NAME] 
kubectl delete rolebinding 
[ROLE_BINDING_NAME] 
--namespace 
[ROLE_BINDING_NAMESPACE]