Skip to main content

More Info:

Access to approve CertificateSigningRequests can be abused to issue high-privilege certificates and create cluster-admin level users. This access should be limited to trusted administrators only.

Risk Level

High

Address

Security

Compliance Standards

  • CIS AKS

Triage and Remediation

Remediation

Manual Steps

  1. On any machine with kubectl access, list all Roles/ClusterRoles that can approve CSRs:
  2. For each identified Role/ClusterRole, review its intent and current subjects (who gets it):
    Decide whether each subject (user/group/serviceaccount) is a trusted admin who truly needs CSR approval.
  3. For access that is not justified, remove or narrow the binding instead of deleting the Role/ClusterRole outright:
    In the editor, delete subjects that should not have CSR approval. Save to apply.
  4. If a Role/ClusterRole is used exclusively to provide CSR approval to non-admins and is no longer needed, remove or tighten its rule:
    In the rules, either delete the certificatesigningrequests/approval entry or reduce verbs so update (and * if present) is not granted unless absolutely required.
  5. For cases where limited, justified CSR approvers are required (e.g., a small security team), ensure they are mapped to a dedicated admin group or service account instead of broad subjects like system:authenticated or large SSO groups. Adjust bindings accordingly:
  6. Verify that only the intended admin identities retain CSR approval rights:
    For each remaining Role/ClusterRole listed, confirm its bindings reference only trusted admin users/groups/serviceaccounts as per your access policy.
Problem indication: Any ClusterRole in this list is able (directly or via *) to approve CSRs. Each listed role must be reviewed to decide if that power is justified and restricted to trusted admins.
What to look for (problem indicators):
  • resources includes certificatesigningrequests/approval or certificatesigningrequests or *
  • verbs includes update or *
  • The role is bound to broad subjects (e.g., system:authenticated, wide groups, or service accounts used by general workloads), not just a very small set of trusted admins.
Problem indication: Any binding where:
  • kind is Group with a very broad group (e.g., system:authenticated, system:serviceaccounts, or an org-wide group not limited to cluster admins).
  • kind is ServiceAccount used by general workloads, CI/CD, or applications, rather than a tightly-controlled admin SA.
  • kind is User representing many operators instead of a very small set of trusted admins.
Then inspect and trace bindings:
Problem indication: Same patterns as for ClusterRoles—any Role with CSR approval power that is bound to non-admin or broadly scoped subjects.
Use this summary to visually confirm which roles can approve CSRs and decide, case by case, whether that is acceptable or needs to be restricted.
Problematic output indicators to review and potentially restrict:
  • ClusterRoles with names like edit, admin, or custom application roles that appear in the “ClusterRoles with CSR approval rights” list.
  • Roles in application namespaces (non-system namespaces) that appear in the “Roles (namespaced) with CSR approval rights” list.
  • Any of the listed Roles/ClusterRoles bound (via ClusterRoleBinding or RoleBinding) to:
    • system:authenticated, system:serviceaccounts, or similar broad groups.
    • Default service accounts (e.g., default in any namespace).
    • Application-specific service accounts that are not trusted cluster administrators.