diff --git a/runbooks/ssh-certificates/pack.yaml b/runbooks/ssh-certificates/pack.yaml index a07523b..053f321 100644 --- a/runbooks/ssh-certificates/pack.yaml +++ b/runbooks/ssh-certificates/pack.yaml @@ -17,15 +17,15 @@ datapoints: - id: actor_name label: Actor name type: string - default: agt-claude-railiance01 + default: agt-rehearsal pattern: "(adm|agt|atm)-[a-z0-9-]+" - help: "Actor type prefix decides the maximum TTL: adm 48h, agt 24h, atm 8h." + help: "Actor type prefix decides the maximum TTL: adm 48h, agt 24h, atm 8h. agt-rehearsal is an inert test actor (2h, a principal no host trusts); use your own actor for real access." dimensions: {actor: operator, kind: identity, subsystem: ops-warden} ask_in: ready - id: pubkey label: Public key path type: path - default: ~/.ssh/id_ed25519.pub + default: ~/.ssh/agt-rehearsal_ed25519.pub dimensions: {actor: operator, kind: location, subsystem: ops-warden} ask_in: ready - id: tunnel @@ -35,6 +35,14 @@ datapoints: pattern: "[a-z0-9-]+" dimensions: {kind: target, subsystem: ops-bridge} ask_in: ready + - id: test_target + label: Is there a target that trusts your actor's principal? + type: enum + values: [available, none-yet] + default: none-yet + help: With the inert rehearsal actor no host trusts the certificate, so the tunnel cannot be proven. Choose available only with a real actor and a tunnel that uses it. + dimensions: {kind: state, subsystem: ops-bridge} + ask_in: connect stages: - id: ready title: Before you start @@ -110,15 +118,26 @@ stages: title: Bring up the tunnel that uses cert_command actor: operator owner: ops-bridge - uses: [tunnel] - command: bridge up {{tunnel}} + uses: [tunnel, test_target] + description: A tunnel only proves the certificate if a host trusts its principal. With the inert rehearsal actor none does, so record that no target exists yet; the stage is then not proven. idempotent: idempotent - rollback: bridge down {{tunnel}} - verify: - done_when: The tunnel shows connected - command: bridge status - expect: output-contains - contains: "{{tunnel}}" + one_of: + - id: bring-up + title: Bring up the tunnel that uses the certificate + recommended_when: {test_target: [available]} + command: bridge up {{tunnel}} + rollback: bridge down {{tunnel}} + verify: + done_when: The tunnel shows connected + command: bridge status + expect: output-contains + contains: "{{tunnel}}" + - id: no-target-yet + title: No target trusts this actor yet; tunnel not proven + recommended_when: {test_target: [none-yet]} + verify: + done_when: You have recorded that the tunnel stage was not proven + expect: manual - id: audit title: Confirm the signing was audited actor: operator @@ -131,13 +150,13 @@ stages: expect: manual gates: - id: tunnel-connected - title: The tunnel is connected + title: The tunnel is connected, or its absence is recorded goal: private-access blocking: true + downstream_risk: A pass here could be read as proof that private access works. checks: - - done_when: bridge reports the tunnel as connected - command: bridge status | grep -E "{{tunnel}} +connected" - expect: exit-0 + - done_when: bridge reports the tunnel as connected, or "tunnel not proven" is recorded because no target exists + expect: manual ownership: - {concern: Certificate issuance and TTL policy, owner: ops-warden} - {concern: Tunnel lifecycle and refresh, owner: ops-bridge} diff --git a/workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md b/workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md index b3124ce..b641018 100644 --- a/workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md +++ b/workplans/NK-WP-0044-runbook-packs-for-runbook-tutorials.md @@ -99,6 +99,13 @@ Decision needed from Bernd on which actor and key the rehearsal uses; then fix t v0.2 packs) sent to runbook-tutorials (`6e366f35-43a7-4e55-8622-40626a4acbec`). Project `trial-2` is the lighthouse showcase and holds no NetKingdom pack, so it is not T05 evidence. +**Rehearsal actor 2026-10-02**: Bernd approved an inert test actor, not a master key. Added `agt-rehearsal` (agt, 2h, principal +`rehearsal-inert-nohost`, no host trusts it) to the workstation warden inventory, key `~/.ssh/agt-rehearsal_ed25519`; the +`nk.ssh-certificates` defaults now point at it and its tunnel step is an honest alternative (no target yet = not proven). +`warden sign` is still denied by flex-auth (`unknown_actor_resource`): actors live in ops-warden's production registry. Request +sent to ops-warden for the sanctioned registration; net-kingdom does not edit their registry. A systematic pre-production +testing environment (test CA, test principals, test hosts) is Bernd's later topic. + ## Retire the markdown verifier ```task