More Info:
The cluster-admin role grants unrestricted access across the cluster. It should only be bound to subjects that genuinely require full administrative privileges.Risk Level
CriticalAddress
SecurityCompliance Standards
- CIS EKS
Triage and Remediation
- Remediation
Remediation
Manual Steps
Manual Steps
-
On any machine with kubectl access, list all ClusterRoleBindings that grant
cluster-adminand see which subjects they bind: -
For each such ClusterRoleBinding, inspect full details and note the subjects (Users/Groups/ServiceAccounts):
Decide, with your application/cluster owners, which subjects truly require full cluster-wide admin rights and which can be reduced to more limited roles (for example, namespace‑scoped admin or a custom Role/ClusterRole).
-
For subjects that do not require full
cluster-admin, either:- Rebind them to an existing less‑privileged ClusterRole:
or for a ServiceAccount:
- Or, if appropriate, bind them only within a namespace using a Role/RoleBinding instead of a ClusterRoleBinding.
- Rebind them to an existing less‑privileged ClusterRole:
-
Once a subject has suitable alternative permissions, remove unnecessary ClusterRoleBindings to
cluster-adminas recommended:Only delete after confirming no remaining operational dependency on that binding. -
Ensure that only the intended high‑privilege groups remain bound to
cluster-admin(typicallysystem:mastersor other tightly controlled admin groups), and avoid binding arbitrary users, service accounts, or broad groups (likesystem:authenticated) to this role. -
Verification (on any machine with kubectl access): confirm no unexpected subjects are bound to
cluster-admin:If the output is onlyNO_CLUSTER_ADMIN_BINDINGS, all non‑approvedcluster-adminbindings have been removed.
Using kubectl
Using kubectl
On any machine with kubectl access:
- List all ClusterRoleBindings that grant
cluster-admin:
- Inspect each binding’s subjects to decide who truly needs full admin:
- For each subject that should have reduced privileges, create or bind a lower-privilege role (example: namespace-scoped admin instead of cluster-admin).
metadata.name, metadata.namespace, and subjects as needed):- After validating that the alternative access works, delete unnecessary
cluster-adminClusterRoleBindings (do NOT delete those you still need, and typically retain default system bindings such as forsystem:masters):
- Verification (expected output is
NO_CLUSTER_ADMIN_BINDINGSor only system groups excluded by the query):
Automation
Automation

