Per-key resource scoping: a service key may modify any service #72
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Option 3 from #55, split out when the first two landed in
d1bb5a5. Not started, no milestone.key_typenow gates key management, so a service key can no longer mint or revoke keys, and a session carries only the authority of the key that minted it. What remains is that a service key is not scoped to particular resources: any valid key mayPATCHorDELETEany service or L4 route.So the original #55 scenario is narrowed but not closed. Hand a container a key so it can self-register; if that container is compromised, the key still repoints an unrelated service —
PATCH /api/services/webmailwith the attacker'starget_host, and Edge Router keeps presenting the genuine certificate for it, so a browser shows a valid padlock. What it can no longer do is mint a replacement key to survive revocation, or revoke the master key.Shape, roughly
A key records which resources it owns (most naturally: the ones it created), and the mutating routes check ownership. Decisions it needs:
source=config) arguably should not be API-mutable at all, which may be a cheaper partial answer worth taking first — on Kuruk every one of 18 services and 13 tls_domains issource=config, so there a config/API split alone would remove the whole attack surface.That last point may be the 80% fix for a fraction of the work, and it is worth evaluating before building ownership tracking.
Why it is unmilestoned
Nothing in the fleet currently hands a key to a workload — Roku serves no API, Kuruk uses the dashboard only, devinfra calls
/api/*from nothing. So this guards a deployment pattern that exists in the product but not yet in practice. Worth doing before anyone adopts that pattern, not before.