Vault learns to speak SPIFFE, and your pipeline's static token is on notice
Tomás VegaEvery pipeline you have shipped has at least one secret that nobody owns. You know the one. It was generated for a proof-of-concept, rotated never, copied into a CI variable, and now lives behind a deploy step that three teams depend on. (We have all written that step. We are all on the hook for it.) The honest fix is not a calendar reminder. It is to stop minting bearer tokens that outlive the job that uses them, and start handing workloads identities that the issuer can attest to in real time.
That is the world SPIFFE has been quietly trying to drag us into for years. This week HashiCorp added its weight to the push: Vault now speaks SPIFFE on both sides — as an authentication method that accepts SPIFFE identities, and as a secrets engine that mints them.
What HashiCorp actually shipped
Two pieces, doing opposite jobs:
- A SPIFFE auth method that validates incoming SPIFFE JWTs and X.509 identities, so a workload presenting an SVID gets a Vault token without anyone copying a static credential into a runner.
- A SPIFFE secrets engine that mints JWT-SVIDs with claims derived dynamically from workload metadata, issues PKI certificates carrying SPIFFE URI Subject Alternative Names, and exposes OIDC discovery and JWKS endpoints so anything that knows how to validate a JWT can check Vault-issued identities without bespoke glue.
In one direction Vault is the relying party. In the other it is the issuer. Combined, it is positioned as a workload-identity broker between whatever produces identities at the edge of your fleet and whatever consumes secrets in the middle of your pipeline.
Is this just SPIRE with new packaging?
No, and HashiCorp is unusually careful about saying so. The blog states plainly that Vault does not replace SPIRE-style node or workload attestation. SPIRE is still the thing that decides "this pod, on this node, in this cluster, really is who it claims to be." Vault can authenticate the SVIDs SPIRE produces, broker credentials downstream from them, and — if you want a hardened enterprise root — sit upstream of SPIRE as its certificate authority.
Read that again. Vault is not pretending to do attestation. It is plugging into the layer above it.
Which is the right call. The hardest part of workload identity has never been "issue a JWT." It is convincing the rest of your stack that the JWT means anything, and giving operators something to rotate, scope and audit when an identity goes bad. Vault is already where most enterprises do the second job. Letting it consume the output of the first one closes a real seam.
Why CI/CD owners should care more than most
Pipelines are where static secrets go to die badly. A build runner is a small machine with very large permissions, and the credential it uses to talk to your registry, your cloud, your artifact store and your deployment target is almost always longer-lived than the job itself. Workload identity flips that: the job gets an attested identity at start, exchanges it for short-lived credentials scoped to the operation, and ends with nothing left to steal.
Plug Vault's SPIFFE auth method in front of that exchange and three things change:
- The runner no longer needs a Vault token baked into its image or its environment. It presents an SVID and gets one.
- The blast radius of a leaked credential collapses to the lifetime of a single job, because there is no static credential to leak in the first place.
- The audit trail becomes useful. "Identity X used at time Y to fetch secret Z" is a sentence that means something, in a way "the shared CI token did a thing" never has.
None of that is free. You still need an attestor doing the work at the bottom — SPIRE, a cloud provider's identity service, a Kubernetes ServiceAccount projection — and you need to wire it through. Workload identity is a system, not a checkbox.
The catch your security team will find
A broker is also a single, very interesting target. If Vault is the thing translating "I am workload X" into "you may now read secret Y and assume cloud role Z," then a compromise of the broker is a compromise of the entire chain it brokers. The mitigations are the usual ones (least-privilege policies on the broker, hardware-backed roots, recovery procedures you have actually rehearsed), but they get more important, not less, the more you centralise identity.
The other catch: enterprise-grade workload identity is a migration, not an install. Existing pipelines have years of accumulated convenience baked into their secret variables. Pulling those out and replacing them with attested-identity flows is the kind of work nobody asks for and everybody benefits from. Budget accordingly.
The verdict
Good move, with the right humility. Vault is not trying to be SPIRE, it is trying to be the layer where SPIFFE identities turn into the secrets and credentials your jobs actually need. That is exactly the layer most teams already operate, and most pipelines already trust. The piece that has been missing — a clean way to accept an attested identity at the door of your secrets store — now exists in the box.
Will that drag the industry off long-lived pipeline tokens this quarter? Of course not. But it removes one more excuse. Your static CI secret is not getting any younger. The broker is ready when you are.
Source: HashiCorp Blog (hashicorp.com)