Skip to main content

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

Low

Address

Security

Compliance Standards

  • CIS GKE

Triage and Remediation

Remediation

Manual Steps

  1. 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-key fields:
    • Treat any non-empty client-certificate/client-key paired with a human user as in-scope for this finding.
  2. 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.
  3. 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.
  4. Migrate human users off client certificates (any machine with kubectl and gcloud access)
    • For each affected human user:
      1. Provision or enable OIDC / GKE/IAM-based access for that person.
      2. Create or update Kubernetes RBAC bindings for their new identity:
      3. Update their kubeconfig to remove the client certificate and use the new auth method (example for GKE using gcloud):
      4. Have the user verify access and then delete any contexts that still reference client certs from their kubeconfig:
  5. 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.
  6. 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.
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).