Broker & attested_workload
Concept
A caller shouldn't have to implement passport minting and request signing itself. The broker
is a small local service that does it for them: a caller asks "let me call GET /orders," and the
broker returns a request-bound passport + transcript-v1 proof over a pod-local Unix socket.
By default the broker signs with a local software key. On Kubernetes it can go further: verify
the caller's SPIFFE/SPIRE X.509-SVID before issuing, and stamp the passport as
attested_workload — the strongest signer class.
Implementation
cmd/trustplane-broker+internal/broker; listens on a Unix domain socket (no broker Service, no TCP port exposed).- Software path (default): issues request-bound passport/stamp pairs from the locked broker
IPC v1 JSON contract, signed with a local Ed25519 key. Records
profile,signer: local/software, and same-host peer metadata (UID/GID/PID/process) only where the OS resolver safely provides it — otherwiseunknown/unsupported(no overclaiming). - SPIFFE/SPIRE path: verifies X.509-SVID via a
WorkloadIdentitySource. A concrete go-spiffe-backed SPIRE Workload API source is included, with explicittrustplane-brokerflags for a live SPIRE socket. Profile:trustplane-spiffe-spire-k8s-v1. - Trust split: for protected requests, the verifier trusts the broker issuer key from the local bundle. The broker is the attestation authority; the verifier does not re-verify the SVID per request.
Example
Issue a request-bound passport from the broker (CLI):
trustplane broker issue \
--method GET \
--path /orders \
--audience acme.demo.orders \
--route-id acme.demo.orders.read
Or run the whole local stack (broker + adapter + bundle) with one command:
trustplane up
The broker abuse regressions (wrong peer, wrong route, stale nonce, replay) each deny with a stable reason and an audit record, and run as part of the acceptance gate.
For the same-cluster SPIFFE/SPIRE M2M shape (broker sidecar + SPIRE Workload API CSI), see the deployment overview. Deployment examples should stay dry-run-first and avoid exposing provider-specific environment details.
The honest boundary on attested_workload
attested_workloadmeans "the broker verified workload identity (SVID) before issuance."- It does not mean the broker's signing key is hardware-backed, enclave-backed, KMS-backed, or non-exportable.
- The verifier trusts the broker issuer key from the bundle and does not re-verify the SVID on each request.
- The v0.1 runtime path is intentionally narrow: X.509-SVID only, configured profile only, local trust-domain + SPIFFE-ID allow checks, fail-closed when the SPIRE Workload API or pod binding can't be verified. No JWT-SVID, no Helm-packaged SPIRE, no hardware/enclave/KMS signer.
→ Next: Audit events.