Skip to main content

More Info:

The cluster-admin ClusterRole grants unrestricted superuser access. Bind it only to subjects that genuinely require full cluster control.

Risk Level

Critical

Address

Security

Compliance Standards

  • CIS Kubernetes

Triage and Remediation

Remediation

Manual Steps

  1. List all ClusterRoleBindings to cluster-admin
    • Run on: any machine with kubectl access
  2. Review each subject’s actual access needs (manual decision)
    • Run on: any machine with kubectl access
      For each ClusterRoleBinding identified in step 1, inspect details and note the subjects:
    Manually determine, based on your org’s policies and the subject’s responsibilities, whether they truly require full cluster-wide admin, or only subset permissions (e.g., namespace admin, read-only, ops).
  3. Identify or design least-privilege roles for subjects that do NOT need cluster-admin
    • Run on: any machine with kubectl access
      If a subject should have reduced permissions, either use an existing ClusterRole/Role or draft one. For example, create a more limited ClusterRole manifest file (edit rules according to your needs):
  4. Create appropriate RoleBindings/ClusterRoleBindings to the reduced-privilege role
    • Run on: any machine with kubectl access
      For each subject that should no longer use cluster-admin, bind them to the least-privilege role you chose or created. For example, to bind a user to the restricted-admin ClusterRole cluster-wide:
    Replace <subject> and <subject-name> with the actual subject identifier.
  5. Remove unnecessary cluster-admin ClusterRoleBindings
    • Run on: any machine with kubectl access
      After confirming the subject has appropriate alternative access and no longer needs cluster-admin, delete the old binding:
    Only retain cluster-admin bindings for subjects that you explicitly decided must keep full cluster control.
  6. Verification
    • Run on: any machine with kubectl access
      Re-run the audit logic and confirm no non-cluster-admin role names are bound to cluster-admin:
    Manually check that any remaining cluster-admin bindings are only for subjects you intentionally approved for full cluster-admin access.
On any machine with kubectl access:
  1. List all ClusterRoleBindings that reference cluster-admin
  1. Inspect each non‑default binding to cluster-admin and its subjects
  1. For each subject that does not truly need full cluster‑admin, create or use a less‑privileged ClusterRole/Role and bind that instead. Example – if a subject only needs namespace‑scoped access:
Create a namespace Role (edit rules as needed):
Bind the subject to the lower‑privileged Role (fill in actual subject kind/name):
  1. Once all necessary replacement bindings are in place and validated, delete the unneeded cluster-admin ClusterRoleBindings:
Repeat for each unnecessary cluster-admin binding.
  1. Verification (adapted from the audit):