Profilanwendbarkeit: Stufe 1
Die spezielle Gruppe
system:masters sollte nicht verwendet werden, um Berechtigungen für einen Benutzer oder ein Dienstkonto
zu gewähren, außer wenn es unbedingt erforderlich ist (z. B. um Zugriff vor der vollständigen
Verfügbarkeit von RBAC zu ermöglichen).Die Gruppe
system:masters hat uneingeschränkten Zugriff auf die Kubernetes-API, der fest im Quellcode des API-Servers
verankert ist. Ein authentifizierter Benutzer, der Mitglied dieser Gruppe ist, kann
seinen Zugriff nicht reduzieren, selbst wenn alle Bindungen und Clusterrollenbindungen,
die sie erwähnen, entfernt werden.In Kombination mit der Client-Zertifikat-Authentifizierung kann die Verwendung dieser
Gruppe dazu führen, dass unwiderrufliche
cluster-admin-Berechtigungen für einen Cluster existieren. GKE enthält den CertificateSubjectRestriction-Admission-Controller, der Anfragen für die system:masters-Gruppe ablehnt.CertificateSubjectRestriction "Dieser Admission-Controller überwacht die Erstellung von CertificateSigningRequest-Ressourcen, die einen spec.signerName von kubernetes.io/kube-apiserver-client haben. Er lehnt jede Anfrage ab, die eine 'Gruppe' (oder 'Organisationsattribut')
von system:masters angibt." Siehe die Kubernetes-Dokumentation für weitere Informationen.
HinweisStandardmäßig erstellen einige Cluster ein "Break Glass" Client-Zertifikat, das Mitglied
dieser Gruppe ist. Der Zugriff auf dieses Client-Zertifikat sollte sorgfältig kontrolliert
werden und es sollte nicht für allgemeine Cluster-Operationen verwendet werden.
|
Auswirkung
Sobald das RBAC-System in einem Cluster betriebsbereit ist, sollte
system:masters nicht speziell erforderlich sein, da gewöhnliche Bindungen von Prinzipalen zur cluster-admin Cluster-Rolle vorgenommen werden können, wenn uneingeschränkter Zugriff erforderlich
ist.Prüfung
Überprüfen Sie eine Liste aller Anmeldedaten, die Zugriff auf den Cluster haben, und
stellen Sie sicher, dass die Gruppe
system:masters nicht verwendet wird.kubectl get clusterrolebinding -o json | jq -r ' .items[] as $b | select([ $b.subjects[]? | select(.kind=="Group" and .name=="system:masters") ] | length > 0) | ($b.subjects[]? | select(.kind=="Group" and .name=="system:masters")) | "\(.kind)\t\(.name)\t(bound in: \($b.metadata.name))" '
Beispielausgabe:
Group system:masters (bound in: cluster-admin)
Wiederherstellung
Entfernen Sie die Gruppe
system:masters von allen Benutzern im Cluster.
