TLS
Agent keys and operator tokens travel in theAuthorization header of every request. On anything but loopback, plaintext hands them to the network.
The demo configurations are loopback-only by design, and a real deployment needs a real certificate. Warden does not obtain or renew certificates; point it at files your existing tooling manages.
State on disk
Withdata_dir set, three append-only journals live there:
Writes are appended and flushed to disk, so a crash loses nothing that was acknowledged.
What a restart does
- A torn tail — a record half-written when the power went — is discarded, and the gateway reports it as a startup note.
- Corruption in the middle of a file, or a broken audit chain, refuses to start. Appending new history on top of a broken chain would hide whatever broke it.
- An operation in flight at the crash has its idempotency key marked
outcome_unknown: whether it took effect is genuinely unknown, and the agent is told to check the data and retry with a new key. Refusing a retry is recoverable; running a write twice is not.
Running without it
Omitdata_dir and everything is in memory. Startup warns. Fine for a demo or a test; for anything else it means no audit trail survives a restart.
Backups
Copy the directory. The files are append-only, so a copy taken while running is a consistent prefix.warden audit verify (or GET /api/v1/audit/verify) walks the chain and reports the first break, which is also how you check a restored copy.
Least privilege beneath Warden
Warden’s own database credential should not be a superuser. The PostgreSQL fixture creates the role the project recommends: no superuser, noBYPASSRLS, and access only to the schemas it governs. It can’t create roles. Per-lease roles are made by two helper functions it may call, which can only create a NOLOGIN lease role or drop one they made. A gateway compromise is then bounded by that grant, and governance is not the only thing standing between an agent and the rest of the database.