Profilanwendbarkeit: Stufe 1
Die Kubernetes-API speichert Geheimnisse, bei denen es sich um Service-Account-Tokens
für die Kubernetes-API oder um Anmeldeinformationen handelt, die von Workloads im
Cluster verwendet werden. Der Zugriff auf diese Geheimnisse sollte auf die kleinstmögliche
Gruppe von Benutzern beschränkt werden, um das Risiko einer Rechteausweitung zu verringern.
Unangemessener Zugriff auf Geheimnisse, die im Kubernetes-Cluster gespeichert sind,
kann einem Angreifer zusätzlichen Zugriff auf den Kubernetes-Cluster oder externe
Ressourcen ermöglichen, deren Anmeldedaten als Geheimnisse gespeichert sind.
Auswirkung
Es sollte darauf geachtet werden, den Zugriff auf Geheimnisse für Systemkomponenten,
die diesen für ihren Betrieb benötigen, nicht zu entfernen
Prüfung
Überprüfen Sie die Benutzer, die Lese-, Listen- oder Beobachtungszugriff auf Geheimnisobjekte
in der Kubernetes-API haben.
Unten finden Sie einen Befehl, der anzeigt, welche Objekte die Berechtigungen "get",
"list" oder "watch" für jede übereinstimmende Rolle haben, einschließlich Rollen,
die über Platzhalter wie Ressourcen:
["","secrets/"] oder Verben: ["*"] Zugriff gewährenkubectl get clusterrole,role -A -o json | jq -r ' def wanted: ["get","list","watch"]; .items[] as $r | [ $r.rules[]? | select( ((.apiGroups? // [""]) | any(.=="" or .=="*")) and ((.resources? // []) | any(.=="secrets" or .=="secrets/*" or .=="*")) and ((.verbs? // []) | any(.=="*" or .=="get" or .=="list" or .=="watch")) ) | if ((.verbs? // []) | any(.=="*")) then wanted[] else (.verbs[]? | select(IN("get","list","watch"))) end ] as $verbs | select($verbs | length > 0) | "\($r.kind): \($r.metadata.name) (namespace: \($r.metadata.namespace // "cluster-wide")) | verbs: \($verbs | unique | join(","))" '
Beispielausgabe:
ClusterRole: admin (namespace: cluster-wide) | verbs: get,list,watch ClusterRole: cluster-admin (namespace: cluster-wide) | verbs: get,list,watch ClusterRole: edit (namespace: cluster-wide) | verbs: get,list,watch ClusterRole: system:aggregate-to-edit (namespace: cluster-wide) | verbs: get,list,watch ClusterRole: system:cloud-controller-manager (namespace: cluster-wide) | verbs: get,list,watch ClusterRole: system:controller:generic-garbage-collector (namespace: cluster-wide) | verbs: get,list,watch ClusterRole: system:controller:namespace-controller (namespace: cluster-wide) | verbs: get,list,watch ClusterRole: system:controller:resourcequota-controller (namespace: cluster-wide) | verbs: list,watch ClusterRole: system:gcp-controller-manager (namespace: cluster-wide) | verbs: get,list,watch ClusterRole: system:gke-common-webhooks (namespace: cluster-wide) | verbs: get,list,watch ClusterRole: system:glbc-status (namespace: cluster-wide) | verbs: get ClusterRole: system:kube-controller-manager (namespace: cluster-wide) | verbs: get,list,watch ClusterRole: system:kubestore-collector (namespace: cluster-wide) | verbs: get,list,watch ClusterRole: system:node (namespace: cluster-wide) | verbs: get,list,watch Role: operator (namespace: gmp-public) | verbs: get,list,watch Role: operator (namespace: gmp-system) | verbs: get,list,watch Role: system:controller:bootstrap-signer (namespace: kube-system) | verbs: get,list,watch Role: system:controller:token-cleaner (namespace: kube-system) | verbs: get,list,watch
Wiederherstellung
Wo möglich, entfernen Sie die Zugriffsrechte zum Abrufen, Auflisten oder Beobachten
von geheimen Objekten im Cluster.
Standardwert
CLUSTERROLEBINDING SUBJECT
TYPE SA-NAMESPACE
cluster-admin system:masters
Group
system:controller:clusterrole-aggregation-controller clusterroleaggregation-
controller ServiceAccount kube-system
system:controller:expand-controller expand-controller
ServiceAccount kube-system
system:controller:generic-garbage-collector generic-garbagecollector
ServiceAccount kube-system
system:controller:namespace-controller namespace-controller
ServiceAccount kube-system
system:controller:persistent-volume-binder persistent-volumebinder
ServiceAccount kube-system
system:kube-controller-manager system:kube-controllermanager
User
