Skip to the content.

RFC 0026: Operator Debug Access (promotion-gated)

Status: Draft

Summary

Give the operator root exec / logs / file access into any NON-promoted (dev-mode) project container, brokered by the daemon so it does not leak into the promoted/attested ones — and record every access. Promoted apps are refused: you un-promote to debug (which voids the attestation; re-promote re-attests from the new measurement). This replaces the privileged ssh-debug sidecar. It is not a “scoped capability” — for your own dev apps it’s just root; the only thing being scoped is the promotion boundary.

Problem

Design

POST /_api/projects/<name>/debug (authed = owner), through the daemon’s existing filtered docker-proxy:

Why this beats host-SSH

The value is not a leash on the operator — it’s that the daemon enforces the promotion boundary (root into non-promoted, hands off promoted) and records it, instead of host-SSH’s blanket root-over-everything.

Optional (not core)

A TTL’d / expiring grant only earns its keep when delegating debug to someone else (not the owner). Keep it as an optional mode; the default (owner → own dev container) is plain root.

Relation / companion gap

Same “record the event” spine as the deploy audit (deploy.py records + RTMR-extends updates). Note the companion gap: today that audit fires only for attested mode (“Only record audit log for attested mode”), so a dev-app update to a malicious version leaves no trace. Same fix — record the event even when you don’t gate it — applies to both updates and debug. Builds on the per-project mode axis (#16) and the already-existing docker-proxy + audit.