diff --git a/docs/hardening-backlog.md b/docs/hardening-backlog.md index b16c526..79b54dc 100644 --- a/docs/hardening-backlog.md +++ b/docs/hardening-backlog.md @@ -61,6 +61,13 @@ contents in this repo. state and coordinated provider/workload rotation remain outstanding. Live destroy remains disabled until exact-action authorization is available. +## H4a — Known-accessor operator command + +- Delivery sessions already self-revoke in `finally` (`SECRETS-WP-0007-T05`). +- Residual from T03: no general CLI to revoke an already-issued token or + lease by a non-secret accessor the operator already holds. +- Do not print accessors. Prefer fingerprint-only evidence. + ## H5 — Audit report command - Implemented: `secrets-engine audit ` summarizes allowlisted local diff --git a/workplans/SECRETS-WP-0007-production-lifecycle-hardening.md b/workplans/SECRETS-WP-0007-production-lifecycle-hardening.md index 4cd4b09..ad9adff 100644 --- a/workplans/SECRETS-WP-0007-production-lifecycle-hardening.md +++ b/workplans/SECRETS-WP-0007-production-lifecycle-hardening.md @@ -8,7 +8,7 @@ status: active owner: codex topic_slug: custodian created: "2026-08-23" -updated: "2026-08-23" +updated: "2026-08-29" state_hub_workstream_id: "68a39be1-bd9c-5133-ad64-e7bca892aaf3" --- @@ -156,11 +156,21 @@ Acceptance: ```task id: SECRETS-WP-0007-T03 -status: progress +status: done priority: high state_hub_task_id: "bb6073e1-c952-5357-b707-5574cef50f2f" ``` +Completed 2026-08-29. Suspend, deactivate, and destroy share one plan object +for dry-run and live execution. Ordinary `revoke` aliases native deactivation +and preserves KV custody plus externally managed workload delivery. Live +destroy stays fail-closed until T04's exact-action contract; that is the +designed containment, not unfinished T03 work. Issued delivery sessions +self-revoke in T05. + +Residual, not this task: a general known-accessor operator command. Tracked in +`docs/hardening-backlog.md` H4a. + Progress 2026-08-23. Added one lifecycle plan model shared by dry-run and live execution. Ordinary `revoke` safely aliases native deactivation; suspend and deactivate preserve KV custody and externally managed workload delivery. @@ -202,11 +212,17 @@ Acceptance: ```task id: SECRETS-WP-0007-T04 -status: progress +status: wait priority: high state_hub_task_id: "4b58edec-c705-55e5-9ece-362e1ff13079" ``` +Wait 2026-08-29. The consumer validator and production fail-closed gate are +shipped. What remains is not local engine work: State Hub / `access-engine` +must serve the durable ActionAuthorization object. Paired with +`SECRETS-WP-0008-T02`. Do not reopen live production on hub status or local +fixtures. + Progress 2026-08-23. flex-auth revision `c473f19` now supplies execute-time structured binding and the proposed durable `ActionAuthorization` schema. The engine builds and fail-closed validates the exact secrets-engine profile, @@ -254,11 +270,17 @@ Acceptance: ```task id: SECRETS-WP-0007-T05 -status: progress +status: done priority: high state_hub_task_id: "36bcd64d-8b27-542d-b8da-ede1a4d3c22f" ``` +Completed 2026-08-29. Delivery AppRole sessions self-revoke in `finally` on +exec and both verification kinds. Bootstrap is a named provider with no +implicit fallback from the KeyCape scaffold. Wiring that scaffold as OpenBao +JWT login is `SECRETS-WP-0008-T06` / hardening H1, blocked on the +platform-owned role — not remaining T05 engine work. + Progress 2026-08-23. AppRole login material now travels through strict temporary JSON input rather than argv. Exec and both verification kinds use a scoped session that self-revokes in `finally`, drops the in-memory token even when @@ -303,11 +325,18 @@ Acceptance: ```task id: SECRETS-WP-0007-T06 -status: progress +status: done priority: high state_hub_task_id: "431bc91b-439e-595a-8a8a-7d4c82e68322" ``` +Completed 2026-08-29. Acceptance is met: multi-field readiness, real unrelated +identity for KV denial, privileged attempt/terminal evidence, and `audit`. +Residuals belong elsewhere: exact-action authorization is T04 / +`SECRETS-WP-0008-T02`; OpenBao audit request-id correlation is hardening H5; +unrelated-identity *selection* for production remains an owner/ops concern, +not an engine mint. + Progress 2026-08-23. KV verification now checks every declared field by default, with one path-level negative probe, and route readiness reads once and requires all declared fields. Missing readiness evidence contains field names only. Tests @@ -366,8 +395,9 @@ priority: high state_hub_task_id: "a0a1dd92-d703-5a95-b488-d895f34d5cf7" ``` -Dependency: T01-T06 complete, then explicit per-lane approvals and scoped -production authority from railiance-platform. +Dependency: T01–T03, T05, T06 are done. T04 still waits on the durable +ActionAuthorization serving path. Also requires explicit per-lane approvals +and scoped production authority from railiance-platform. Resume `SECRETS-WP-0006-T05` lane by lane. Apply only the exact native policy and bounded AppRole, verify every field plus unrelated-consumer denial, confirm the