Pointer-only, warden_executes false. Shape lives in flex-auth; OpenBao path is not built yet. Testdata keys are not this lane. Assistant: grok Assistant-Session: 01a09dc1-b21e-77e1-919e-fcad2f82b267
1.4 KiB
1.4 KiB
flex-auth decision-envelope signing key
Date: 2026-09-14
Catalog: flex-auth-decision-envelope-signing-key (status draft until the OpenBao lane exists)
Owner of shape: flex-auth (docs/decision-envelope-signature.md)
Owner of key material: OpenBao / railiance-platform — flex-auth does not mint this key
Detached Ed25519 key used to sign flex-auth.decision-record.v1 envelopes so a
stored allow remains attributable after the HTTP connection is gone
(FLEX-WP-0024, FLEX-DEC-2026-010).
This lane is a pointer. ops-warden routes it and executes nothing.
Ask first: warden plan "decision envelope signing key" --json.
Worker checklist
- Do not generate a key in
flex-author paste a seed into Git, State Hub, or chat. - The proposed KV path is
platform/workloads/flex-auth/envelope-signing. Fields:ED25519_PRIVATE_KEY(secret),ED25519_PUBLIC_KEYandkid(public). - flex-auth loads the private key the same way it loads TokenReview credentials.
With no key configured it emits
signature.mode=unsigned. - Consumers verify with
kidagainst the published public key list, not a pinned single key. Rotation overlap is the allow TTL (default 15m) plus a short margin.
Verify (capabilities-safe)
bao token capabilities <lane-token> platform/data/workloads/flex-auth/envelope-signing
# expect: read on the workload identity; deny for unrelated paths
Do not print the private field.