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.
HinweisKein
clusterrolebindings und kein rolebindings mit Benutzer system:anonymous. |
Auswirkung
Nicht authentifizierte Benutzer haben Privilegien und Berechtigungen, die mit Rollen
verbunden sind, die mit den konfigurierten Bindungen verknüpft sind.
Es sollte darauf geachtet 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 zu 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. Falls Bindungen existieren, überprüfen Sie deren Berechtigungen
mit dem folgenden Befehl und bewerten Sie ihre 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 sollte kein
RoleBindings aufgeführt sein.Falls Bindungen existieren, ü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 Audit-Abschnitt oben oder konsultieren Sie
die GKE-Dokumentation.
Erwägen Sie dringend, unsichere Bindungen durch eine authentifizierte, benutzerdefinierte
Gruppe zu ersetzen. Binden Sie nach Möglichkeit an nicht standardmäßige, benutzerdefinierte
Gruppen mit Rollen mit minimalen Berechtigungen. Wenn es unsichere Bindungen zum Benutzer
system:anonymous gibt, fahren Sie fort, diese zu löschen, 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]
