More Info:
Kubernetes provides the option to use client certificates for user authentication. However as there is no way to revoke these certificates when a user leaves an organization or loses their credential, they are not suitable for this purpose. It is not possible to fully disable client certificate use within a cluster as it is used for component to component authentication.Risk Level
LowAddress
SecurityCompliance Standards
- CIS GKE
Triage and Remediation
- Remediation
Remediation
Manual Steps
Manual Steps
-
Identify how users currently authenticate (any machine with kubectl access)
- List configured clusters and contexts and see which client certs are in use:
- For each context that points at this cluster, inspect the user entry and note any
client-certificate/client-keyfields: - Treat any non-empty
client-certificate/client-keypaired with a human user as in-scope for this finding.
- List configured clusters and contexts and see which client certs are in use:
-
Confirm whether these certificates are human-user identities vs components (any machine with kubectl access)
- Decode each certificate and review its subject/issuer for human names, email, or non-system groups:
- Certificates with subjects like
CN=kube-apiserver,system:node:*, or other system/service accounts are expected; certificates with real names or generic “admin”/“devops” etc. are typically human users and should not be used.
- Decode each certificate and review its subject/issuer for human names, email, or non-system groups:
-
Review GKE authentication configuration and plan an alternative (any machine with gcloud access)
- Check whether alternative mechanisms are enabled (e.g., GKE OIDC / workload identity / IAM integration):
- Decide which non-certificate mechanism to use for humans (for CIS: OIDC or GKE/IAM-based auth). Ensure your IdP / IAM groups and RBAC bindings are or can be configured to replace the current certificate-based access.
- Check whether alternative mechanisms are enabled (e.g., GKE OIDC / workload identity / IAM integration):
-
Migrate human users off client certificates (any machine with kubectl and gcloud access)
- For each affected human user:
- Provision or enable OIDC / GKE/IAM-based access for that person.
- Create or update Kubernetes RBAC bindings for their new identity:
- Update their kubeconfig to remove the client certificate and use the new auth method (example for GKE using
gcloud): - Have the user verify access and then delete any contexts that still reference client certs from their kubeconfig:
- For each affected human user:
-
Validate that no human users rely on client certificates anymore (any machine with kubectl access)
- Re-scan kubeconfigs used by administrators and automation:
- Confirm that any remaining client-certificate users correspond only to system / component identities and not to individual humans.
- Re-scan kubeconfigs used by administrators and automation:
-
Optional: tighten server-side reliance on client certificates for users (every control plane node – review only)
- Inspect the control plane static pod manifest but do not change it solely to disable certificates (they are required for component-to-component auth):
- Verify that you are not adding new human-user client certificates here or elsewhere on control-plane nodes. Any further restriction of client certificate issuance and lifecycle should be done through your PKI / IAM processes, not by disabling component certificates in this manifest.
- Inspect the control plane static pod manifest but do not change it solely to disable certificates (they are required for component-to-component auth):
Using kubectl
Using kubectl
kubectl cannot be used to remediate this finding because it requires changing the kube-controller-manager static pod manifest on each control plane node at
/etc/kubernetes/manifests/kube-controller-manager.yaml. To address it, follow the guidance in the Manual Steps section for host-level configuration and authentication method changes (for example, moving to OIDC).Automation
Automation

