logo-green.png
Graphic depicting the concept of SPIFFY Mutual TLS (mTLS) securing workload identity and communication in a distributed system using SPIFFE and SPIRE standards. SPIFFE stands for Secure Production Identity Framework for Everyone, and SPIRE stands for SPIFFE Runtime Environment. The image illustrates the process of enforcing policies based on workload identities derived from X.509 client certificates within an East-West service mesh like Istio or Cilium. It also mentions the use of policy languages such as Cilium YAML and CEL, as well as the suggestion of using OPA or other Policy Decision Points (PDP) for managing enterprise policies. Additionally, the image highlights the overlap between mTLS workload identity and OAuth clients, mentioning RFC 8705 and RFC 9449 as potential mechanisms for binding OAuth access tokens to mutual-TLS certificates

“Workload Identity”: It’s SPIFFY, but Central Policy Management?

SPIFFY Mutual TLS (mTLS) is a way to secure workload identity and communication in a distributed system using the SPIFFE and SPIRE standards. (see also: https://spiffe.io/) SPIFFE stands for Secure Production Identity Framework for Everyone, and SPIRE stands for SPIFFE Runtime Environment. SPIFFE defines a platform-agnostic identity format and API for workloads, and SPIRE provides a system for issuing and verifying SPIFFE identities.

An East-West service mesh like Istio or Cilium could be a good place to enforce policies based on “workload identities” derived from the claims of the X.509 client certificate. Let’s say the policy is “version2” clients can’t call “version1″ endpoints.” Thanks to Christian Posta for the solo.iowebinar showing how in Cilium we could define a policy like this:

Cilium YAML file

From an enterprise policy management standpoint, do I want network policies in my service mesh? It means I need to learn a one-off policy language. For example, Cilium has its way they express policies (see above). But KrakenD uses the CEL policy language. And there are a hundred other systems that might need to consume enterprise policies. Wouldn’t it be better to follow the lead of Kubernetes access control, and use OPA to manage policies, or some other PDP–pick from an increasingly vast array like Axiomatics , Aserto , Permit.io , SGNL ? Just to name a few…

We want the speed of decentralization, but the consistency and operational leverage of central control. eBPF enables kernel-level optimizations and leaps forward in performance. But metaphorically, it doesn’t mean having a bunch of ACL’s in the router is the right thing, even if we can run those ACL’s faster then ever!

As an OAuth person, I see a lot of overlap between an MTLS workload identity (e.g. a “a kubernetes service account”) and an OAuth “client”. You can connect these two worlds–RFC 8705 defines a mechanism to bind OAuth access tokens to a client’s mutual-TLS certificate, enabling endpoints to verify the access token presented was actually issued to the client presenting it. You could also achieve this with DPoP (RFC 9449), which might be better, because MTLS doesn’t work for mobile clients. The real edge is the super computer in people’s pocket.