Per-actor issuance profile in the inventory contract: optional `extensions` allow-list (LocalCA -O clear + -O <ext>; Vault explicit extensions map) and `max_ttl_hours` ceiling enforced against --ttl overrides. Actors without these fields keep backend defaults. agt-custodian: principal agt-custodian, 12h TTL/ceiling, permit-pty only (no agent/port/X11 forwarding, no user-rc), no source-address (unstable workstation egress). Ceremony routing lane agt-custodian-ssh-cert: supervisor issues from the operator account; the agent cannot self-issue. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 605711@bnt-lap001 Assistant-Session: 1f5e2256-181f-49ed-b7b1-a1c34bf37a61
5.7 KiB
Actor Inventory Patterns
Date: 2026-06-17
Standard naming and TTL patterns for ~/.config/warden/inventory.yaml (or
Git-tracked inventory in your environment). Actor names must use the prefix
matching ActorType: adm-, agt-, atm-.
See wiki/AccessManagementDirective.md for policy background and
examples/inventory.seed.yaml for a copy-paste template.
Naming convention
<type>-<scope>-<purpose>[-<instance>]
| Segment | Meaning |
|---|---|
type |
adm | agt | atm |
scope |
team, repo, or environment slug (codex, state-hub, ci) |
purpose |
narrow function (bridge, bootstrap, backup) |
instance |
optional disambiguator (railiance01) |
Examples: agt-state-hub-bridge, agt-codex-interhub-bootstrap, atm-nightly-backup.
Pattern catalog
Tunnel agents (agt)
Used by ops-bridge cert_command for SSH tunnels.
agt-state-hub-bridge:
type: agt
principals: [agt-task-bridge]
ttl_hours: 24
description: "ops-bridge tunnel to state-hub backend"
- One actor per tunnel identity (match
ssh_user/actorintunnels.yaml). - Principal should match host
auth_principalsentry deployed by railiance-infra. - TTL default 24 h; shorten for high-risk paths.
Kaizen / Codex agents (agt)
Attended or semi-attended agent work on trusted hosts.
agt-codex-interhub-bootstrap:
type: agt
principals: [agt-interhub-bootstrap]
ttl_hours: 2
description: "Short-lived agent access for Inter-Hub bootstrap execution"
Supervised interactive agent account (agt-custodian)
CUST-WP-0073-T02 / WARDEN-WP-0045. One principal for the dedicated host account
custodian-agt on Railiance01, shared by the Codex, Claude Code and Grok Build
harnesses running in the isolated workstation WSL distro custodian-agents.
agt-custodian:
type: agt
principals: [agt-custodian]
ttl_hours: 12
max_ttl_hours: 12 # --ttl cannot raise it to the 24 h agt maximum
extensions: [permit-pty] # clears agent/port/X11 forwarding and user-rc
-
TTL 12 h. Between the attended bootstrap profile (2 h) and the agt type maximum (24 h): one supervised working session, so a leaked cert expires by the next day and every new session needs a fresh supervisor issuance. The profile ceiling (
max_ttl_hours) stops a--ttloverride from lengthening it. -
Extensions.
permit-ptyonly — interactive harness shells need a pty. Agent, port and X11 forwarding and~/.ssh/rcare not granted (-O clearlocally; explicitextensionsmap on the Vault role, which must allowpermit-pty). -
No
source-address. The workstation egress IP is not stable (residential dynamic address, WSL NAT), so a pinned address would break issuance silently. Revisit if agent traffic moves to a fixed egress (VPN or bastion). -
No self-issuance. The supervisor (Bernd) signs from the operator account with
warden sign agt-custodian --pubkey <agent-key>.pub > <agent-key>-cert.puband places the cert into thecustodian-agentsdistro. That distro gets no warden config, CA key, Vault token orwarden-signlane credential, so the signing path is not reachable from the agent account. -
Host mapping (
AuthorizedPrincipalsFileforcustodian-agt) is owned by railiance-infra. -
Prefer 1–2 h TTL for bootstrap; never multi-day agent certs.
-
Principal narrower than general ops access (
agt-interhub-bootstrapnotagt-ops-full). -
Remove or disable actor when lane is retired.
-
See
wiki/InterHubBootstrapAccessLane.md.
Human operators (adm)
adm-bernd:
type: adm
principals: [adm-full]
ttl_hours: 48
description: "Human operator — interactive shell when policy allows"
- Humans bring their own keypair (
ssh-keygen); warden signs pubkey only. - Use separate actors per person, not shared
adm-shared. - Principals may be narrowed (
adm-readonly) where railiance-infra supports it.
CI / cron automations (atm)
atm-backup-daily:
type: atm
principals: [atm-backup-daily]
ttl_hours: 8
description: "Nightly backup automation — force-command on host"
- Lowest TTL practical (≤ 8 h per directive max).
- Principal tied to single force-command on host.
- Prefer
warden issueonly in secured CI secret store contexts.
TTL guidance
| Type | Default max (warden) | Typical attended | Typical automation |
|---|---|---|---|
adm |
48 h | 24–48 h | N/A |
agt |
24 h | 1–4 h bootstrap | 8–24 h supervised |
atm |
8 h | N/A | 1–8 h |
warden sign rejects TTL above type maximum (WARDEN-WP-0002).
Principal narrowing
- One principal per automation purpose — avoid
agt-ops-admin. - Match host-side
auth_principalsexactly — coordinate with railiance-infra before add. - Document
descriptionfield for audit and scorecard reviews. - Use
hosts:section in inventory for reference (not enforced by warden).
Adding a new worker
warden inventory add agt-myrepo-ci \
--type agt \
--principal agt-myrepo-ci \
--ttl 4 \
--description "CI deploy actor for myrepo"
warden inventory list
warden sign agt-myrepo-ci --pubkey /path/to/ci.pub
Copy patterns from examples/inventory.seed.yaml before inventing new names.
Anti-patterns
| Do not | Why |
|---|---|
Reuse adm actor for agents |
Breaks attribution; use agt-* |
| Store private keys in inventory YAML | Inventory is registry only — keys live in secure paths |
72 h agt cert for convenience |
Violates TTL policy and directive |
One agt-ops for all tunnels |
Cannot revoke or audit per tunnel |
| Put API keys in inventory | Route to OpenBao — wiki/CredentialRouting.md |