Profilanwendbarkeit: Stufe 1
Vermeiden Sie nicht standardmäßige
ClusterRoleBindings
und RoleBindings
mit der Gruppe system:unauthenticated
, außer dem ClusterRoleBinding system:public-info-viewer
.Kubernetes weist der Gruppe
system:unauthenticated
API-Server-Anfragen zu, die keine Authentifizierungsinformationen enthalten. Das
Binden einer Rolle an diese Gruppe gibt jedem nicht authentifizierten Benutzer die
von dieser Rolle gewährten Berechtigungen und wird dringend abgeraten.Standardwert:
ClusterRoleBindings
mit Gruppe system:unauthenticated
:
system:public-info-viewer
Kein
RoleBindings
mit der Gruppe system:unauthenticated
.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 nicht standardmäßige
clusterrolebindings
oder rolebindings
aus der Umgebung entfernt werden, um sicherzustellen, dass sie nicht für den Betrieb
des Clusters erforderlich waren. Nutzen 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 nicht standardmäßigen ClusterRoleBindings
zur Gruppierung von system:unauthenticated
gibt:$ kubectl get clusterrolebindings -o json | jq -r '["Name"], ["-----"], (.items[] | select((.subjects | length) > 0) | select(any(.subjects[]; .name == "system:unauthenticated")) | [.metadata.namespace, .metadata.name]) | @tsv'
Es sollten nur die folgenden Standard-
ClusterRoleBinding
angezeigt werden:Name ----- system:public-info-viewer
Wenn nicht standardmäßige Bindungen vorhanden sind, überprüfen Sie deren Berechtigungen
mit dem folgenden Befehl und bewerten Sie deren Privilegien erneut.
$ 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 die Gruppe
system:unauthenticated
enthalten:$ kubectl get rolebindings -A -o json \ | jq -r '["Namespace", "Name"], ["---------", "-----"], (.items[] | select((.subjects | length) > 0) | select(any(.subjects[]; .name == "system:unauthenticated")) | [.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 nicht standardmäßigen
clusterrolebindings
und rolebindings
für die Gruppe system:unauthenticated
. Überprüfen Sie, ob sie verwendet werden, und überprüfen Sie die Berechtigungen,
die mit der Bindung verbunden sind, indem Sie die Befehle im Audit-Abschnitt oben
verwenden oder auf die GKE-Dokumentation verweisen.Erwägen Sie dringend, nicht standardmäßige, unsichere Bindungen durch eine authentifizierte,
benutzerdefinierte Gruppe zu ersetzen. Binden Sie, wo möglich, an nicht standardmäßige,
benutzerdefinierte Gruppen mit Rollen mit minimalen Rechten.
Falls es nicht standardmäßige, unsichere Bindungen zur Gruppe
system:unauthenticated
gibt, fahren Sie mit dem Löschen 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]