Skip to main content

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

Critical

Address

Security

Compliance Standards

  • CIS EKS

Triage and Remediation

Remediation

Manual Steps

  1. On any machine with kubectl access, list all ClusterRoleBindings that grant cluster-admin and see which subjects they bind:
  2. 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).
  3. 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.
  4. Once a subject has suitable alternative permissions, remove unnecessary ClusterRoleBindings to cluster-admin as recommended:
    Only delete after confirming no remaining operational dependency on that binding.
  5. Ensure that only the intended high‑privilege groups remain bound to cluster-admin (typically system:masters or other tightly controlled admin groups), and avoid binding arbitrary users, service accounts, or broad groups (like system:authenticated) to this role.
  6. Verification (on any machine with kubectl access): confirm no unexpected subjects are bound to cluster-admin:
    If the output is only NO_CLUSTER_ADMIN_BINDINGS, all non‑approved cluster-admin bindings have been removed.
On any machine with kubectl access:
  1. List all ClusterRoleBindings that grant cluster-admin:
  1. Inspect each binding’s subjects to decide who truly needs full admin:
  1. For each subject that should have reduced privileges, create or bind a lower-privilege role (example: namespace-scoped admin instead of cluster-admin).
Example: create a namespace admin Role and RoleBinding (adjust metadata.name, metadata.namespace, and subjects as needed):
  1. After validating that the alternative access works, delete unnecessary cluster-admin ClusterRoleBindings (do NOT delete those you still need, and typically retain default system bindings such as for system:masters):
  1. Verification (expected output is NO_CLUSTER_ADMIN_BINDINGS or only system groups excluded by the query):