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
HighAddress
SecurityCompliance Standards
- CIS AKS
Triage and Remediation
- Remediation
Remediation
Manual Steps
Manual Steps
-
On any machine with kubectl access, list all Roles/ClusterRoles that can approve CSRs:
-
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.
-
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.
-
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 thecertificatesigningrequests/approvalentry or reduceverbssoupdate(and*if present) is not granted unless absolutely required. -
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:authenticatedor large SSO groups. Adjust bindings accordingly: -
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.
Using kubectl
Using kubectl
*) to approve CSRs. Each listed role must be reviewed to decide if that power is justified and restricted to trusted admins.resourcesincludescertificatesigningrequests/approvalorcertificatesigningrequestsor*verbsincludesupdateor*- 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.
kindisGroupwith a very broad group (e.g.,system:authenticated,system:serviceaccounts, or an org-wide group not limited to cluster admins).kindisServiceAccountused by general workloads, CI/CD, or applications, rather than a tightly-controlled admin SA.kindisUserrepresenting many operators instead of a very small set of trusted admins.
Automation
Automation
- 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.,
defaultin any namespace). - Application-specific service accounts that are not trusted cluster administrators.

