Cloud · Kubernetes · Security

Kubernetes workload identity: service account tokens or Pod Certificates?

For years the built-in answer to 'who is this workload?' in Kubernetes was a service account token. Kubernetes 1.37 made the foundations of a second answer generally available: X.509 certificates issued to Pods. The two solve overlapping problems with different security properties.

ComparisonSumanta Mukhopadhyay7 min read4 sources
#kubernetes#security#platform#cloud
COMPARISON · CLOUD · KUBERNETES · SECURITY28 Oct 2026 · 16:30 GST

Every service that calls another service has to prove who it is. Inside Kubernetes, the default proof has been a service account token, a signed JWT that the kubelet mounts into the Pod and keeps fresh2. It works well, which is why it underpins workload identity federation with the major cloud providers1. It also has one structural weakness, and Kubernetes 1.37 shipped a GA foundation for addressing it.

The problem with bearer tokens

Service account JWTs are bearer tokens: whoever has the token is the identity it names. To authenticate to a peer you must hand it a copy, which means the peer could replay it. Kubernetes reduces the risk by binding tokens to time, audience and objects, but the Kubernetes blog is candid that none of these are complete defences1.

The alternative is a proof-of-possession credential, where you prove you hold a secret without sending it. The most widely deployed form is the X.509 certificate used in TLS: the private key stays in the workload, and only a signature and the certificate cross the wire1.

How Pod Certificates work

A Pod requests certificates through projected volume sources in its spec13. When the Pod is scheduled, the kubelet generates a private key, creates a PodCertificateRequest addressed to a named signer, and waits for the signer controller to issue a certificate chain. The kubelet writes the key and certificate into the container, alongside trust anchors collected from matching Cluster Trust Bundles, and refreshes everything before it expires1.

Architecture diagram: a signer controller issues PodCertificateRequests and publishes ClusterTrustBundles; the kubelet on the node creates requests and reads trust bundles, then writes a credential bundle and a trust bundle file into the Pod, which the application reads
Pod Certificates architecture: the signer issues, the kubelet delivers, the application reads files. Source: Kubernetes blog · CC BY 4.0

Two details matter in practice. Rotation is automatic and frequent: signers eventually shipped in core are expected to issue certificates with a maximum lifetime of 24 hours, and other signers are capped at 91 days, so applications must reload credentials when files change. And security checks sit in the API server, where node restriction stops a compromised node requesting certificates for Pods not scheduled to it1.

Side by side

Service account tokensPod Certificates
Credential typeBearer JWTX.509 certificate with a private key kept in the Pod
Replay if interceptedPossible within the token's bindingsNot without the private key
Best forCalling cloud APIs and services that accept federated JWTsService-to-service mTLS inside and across clusters
Ecosystem supportVery broad todayGrowing; signers are pluggable
SignerBuilt into the control planeThird-party or custom at 1.37; built-in signers expected later
Application effortRead a file, send a headerConfigure TLS and handle frequent rotation

The blog expects at least two built-in signers over time: one for server TLS certificates matching Service DNS names, and one for SPIFFE client certificates that fill the role service account tokens play today1. SPIFFE defines a standard identity format and verifiable identity documents for workloads, which makes these identities portable across platforms4.

Use tokens to talk to clouds and APIs that expect them. Use certificates for service-to-service trust you control. Most platforms will run both for years.

How I'd roll it out

  1. Map current identity flows: which services call which, with what credential, and where tokens are forwarded rather than validated.
  2. Pick a signer strategy. Until built-in signers arrive, choose a maintained signer or your existing PKI, and decide who owns the root of trust.
  3. Start with internal mTLS between a few high-value services, using credential bundles so rotation is a single file reload.
  4. Test rotation deliberately. With lifetimes as short as a day, an application that only reads its certificate at start-up will fail.
  5. Enforce with policy: require certificate sources for services that handle sensitive data, using admission policies and the isolation model in Kubernetes multi-tenancy.
  6. Keep tokens where they fit, especially for cloud federation, and stop forwarding them between services, the same anti-pattern described in securing MCP servers.

How I can help

I design Kubernetes platforms with identity, policy and isolation built in, so security reviews become a walkthrough rather than a negotiation. As a fractional CTO I can own that roadmap. Or analyse your challenge and bring the result to a call.

References
  1. 1
  2. 2
    Service accountsKubernetes documentation
  3. 3
    Projected volumesKubernetes documentation
  4. 4
    SPIFFE conceptsSPIFFE project
FAQ

Common questions

What are Kubernetes Pod Certificates?

A built-in way for Pods to receive X.509 certificates. The kubelet generates a private key, creates a PodCertificateRequest addressed to a signer, and writes the issued certificate and key to the container filesystem, refreshing them automatically. Cluster Trust Bundles distribute the trust anchors needed to verify peers.

Why not just use service account tokens?

Service account JWTs are convenient and widely supported, but they are bearer tokens: anyone holding a copy can present it. Certificates used in TLS are proof-of-possession credentials, because the private key never has to leave the workload.

Does Kubernetes include a Pod Certificate signer?

As of the 1.37 announcement, the project did not yet ship signers in core, so a third-party or custom signer is needed. The author expected built-in signers for service TLS certificates and SPIFFE client certificates in time.

Keep reading

Related

Open to advisory, fractional CTO & select builds

Let's talk about what you're building.

The fastest route is a free 30-minute call. Prefer to write? Send a message and I'll reply personally within two business days.

Start a conversation

How would you like to reach me?

Book a 30-min callFastest. Pick any open slot on my calendar.→ Write in GmailOpens a pre-filled draft in your browser.→ Use my email appOutlook, Apple Mail or your default client.→

I reply personally within two business days. Time zones from the Americas and Europe to the Middle East and Asia-Pacific.