Profilanwendbarkeit: Stufe 1
Kubernetes-Rollen und ClusterRoles bieten Zugriff auf Ressourcen basierend auf Objektgruppen
und Aktionen, die auf diese Objekte ausgeführt werden können. Es ist möglich, eine
dieser Optionen auf das Platzhalterzeichen "*" zu setzen, das alle Elemente abdeckt.
Die Verwendung von Platzhaltern ist aus Sicherheitsperspektive nicht optimal, da sie
möglicherweise unbeabsichtigten Zugriff ermöglichen kann, wenn neue Ressourcen entweder
als CRDs oder in späteren Versionen des Produkts zur Kubernetes-API hinzugefügt werden.
Das Prinzip der minimalen Rechte empfiehlt, dass Benutzern nur der für ihre Rolle
erforderliche Zugriff gewährt wird und nicht mehr. Die Verwendung von Platzhalter-Rechten
gewährt wahrscheinlich übermäßige Rechte auf die Kubernetes-API.
Prüfung
Rufen Sie die Rollen ab, die in den einzelnen Namespaces im Cluster definiert sind,
und überprüfen Sie sie auf Platzhalter.
Hier ist ein null-sicherer, spaltenformatierter Befehl, der nur Rollen und Clusterrollen
anzeigt, die ein Platzhalterzeichen (*) irgendwo in Verben, Ressourcen oder API-Gruppen
verwenden – und Ihnen mitteilt, welches Feld bzw. welche Felder das Platzhalterzeichen
verwenden:
kubectl get clusterrole,role -A -o json | jq -r ' def has_star(a): (a // []) | any(. == "*");
.items[] | . as $r |
( any($r.rules[]?; has_star(.verbs)) ) as $wv |
( any($r.rules[]?; has_star(.resources)) ) as $wr |
( any($r.rules[]?; has_star(.apiGroups)) ) as $wg |
select($wv or $wr or $wg) |
[ $r.kind, $r.metadata.name,
($r.metadata.namespace // "cluster-wide"),
([ if $wv then "verbs" else empty end,
if $wr then "resources" else empty end,
if $wg then "apiGroups" else empty end
] | join(","))
] | @tsv
' | awk -F'\t' '{printf "%-15s %-40s %-20s %-20s\n", $1, $2, $3, $4}'
Beispielausgabe vom Befehl:
KIND NAME NAMESPACE WILDCARD_IN --------------- ---------------------------------------- -------------------- -------------------- ClusterRole cluster-admin cluster-wide verbs,resources,apiGroups ClusterRole external-metrics-reader cluster-wide resources ClusterRole kubelet-api-admin cluster-wide verbs ClusterRole system:cloud-controller-manager cluster-wide resources,apiGroups ClusterRole system:controller:disruption-controller cluster-wide apiGroups ClusterRole system:controller:generic-garbage-collector cluster-wide resources,apiGroups ClusterRole system:controller:horizontal-pod-autoscaler cluster-wide resources,apiGroups ClusterRole system:controller:namespace-controller cluster-wide resources,apiGroups ClusterRole system:controller:resourcequota-controller cluster-wide resources,apiGroups ClusterRole system:gcp-controller-manager cluster-wide verbs ClusterRole system:gke-common-webhooks cluster-wide verbs,resources,apiGroups ClusterRole system:gke-hpa-actor cluster-wide resources,apiGroups ClusterRole system:glbc-status cluster-wide verbs ClusterRole system:kube-controller-manager cluster-wide resources,apiGroups ClusterRole system:kubelet-api-admin cluster-wide verbs ClusterRole system:kubestore-collector cluster-wide verbs,resources,apiGroups ClusterRole system:managed-certificate-controller cluster-wide verbs ClusterRole system:metrics-server-nanny cluster-wide verbs Role gke-spiffe-leaderelection kube-system verbs
Wiederherstellung
Wo möglich, ersetzen Sie die Verwendung von Platzhaltern in Clusterrollen und Rollen
durch spezifische Objekte oder Aktionen.
