Enterprise Edge
Local Vault
Local Vault is an outbound-only customer edge component for connector secret storage, source attestation signing, offline spooling, event relay, and optional customer-side witness operation. It is not HashiCorp Vault.
Responsibilities
- Encrypt connector credentials locally.
- Sign source attestations before relay.
- Spool events during network outages.
- Replay spooled events in order with idempotency.
- Operate as a customer-side witness when the tenant policy enables it.
Install and run
Install Local Vault on the customer-controlled edge host. Runtime coordinates can come from flags or environment variables, but signing keys, spool encryption keys, and connector credentials must come from the local deployment secret manager. Do not place them in shell history, frontend config, or Attesto docs.
pipx install attesto-local-vault
export ATTESTO_LOCAL_VAULT_SPOOL_DB=/var/lib/attesto/local-vault.sqlite3
export ATTESTO_LOCAL_VAULT_INSTALLATION_ID="$ATTESTO_LOCAL_VAULT_INSTALLATION_ID"
export ATTESTO_LOCAL_VAULT_RELAY_URL="https://verify.attesto.eu/v2/local-vault/installations/$ATTESTO_LOCAL_VAULT_INSTALLATION_ID/events"
export ATTESTO_LOCAL_VAULT_KEY_ID="$ATTESTO_LOCAL_VAULT_KEY_ID"
attesto-local-vault drain-loop
Health check
Run attesto-local-vault doctor after bootstrap and during
operator troubleshooting. The doctor checks config presence, local secret
availability, secrets.env permissions, encrypted spool
readback, relay URL HTTPS rules, backend reachability, server clock
skew, invalid server Date headers, and dead-letter depth.
Failures return a non-zero exit code. Warnings keep the spool usable
but must be reviewed by the operator.
attesto-local-vault doctor
Enrollment
A tenant owner or admin creates a short-lived enrollment token with
POST /v2/tenant/local-vault/enrollment-tokens. The edge
host exchanges that token at POST /v2/local-vault/enroll
and receives installation metadata plus the credential needed for
outbound relay. Enrollment tokens are single-use; Attesto stores only
their hash after creation.
Delivery acknowledgement
Local Vault marks an item as delivered only when Attesto returns a 2xx JSON receipt with a matching localVaultAck.envelopeHash, stream binding, and canonical event id. A proxy 2xx, malformed body, mismatched receipt, or revoked installation remains a failed delivery and stays subject to retry or dead-letter policy.
Outbound relay flow
- The customer source creates an attestation event.
- Local Vault signs and stores the event in the encrypted spool.
- Local Vault relays the event to
POST /v2/local-vault/installations/{installation_id}/eventsonhttps://verify.attesto.eu. - Attesto returns the Proofstream receipt.
- Local Vault records receipt state and keeps retry metadata until delivery is complete.
{
"source_ref": "local-source-2026-0001",
"event_type": "source.attestation",
"payload_hash": "sha256-hex",
"local_signature": {
"alg": "Ed25519",
"kid": "local-vault-key-epoch",
"signature": "hex-encoded-signature"
}
}
Encrypted spool
The spool preserves events during network outages. Replay is ordered and idempotent: the same source reference and body can be retried, but changed content for the same source reference is rejected.
| State | Meaning |
|---|---|
queued | Stored locally and waiting for relay. |
relaying | Outbound request is in progress. |
receipted | Attesto returned a Proofstream receipt. |
conflict | Source reference replayed with different canonical content. |
Security model
- No inbound internet route is required for relay mode.
- Connector credentials remain encrypted at the customer edge.
- Relay endpoints reject replay conflicts and tampered envelopes.
- Revocation fails closed: a revoked installation cannot keep relaying accepted events.
Customer witness mode
When enabled, Local Vault can sign monotonic checkpoints for its tenant streams. A 2-of-3 policy can combine Attesto-operated, customer-operated, and assurance witness statements so no single service is treated as the only source of history.
Witness checkpoint statements are submitted to
POST /v2/local-vault/installations/{installation_id}/witness/checkpoints
and are accepted only when the installation is enabled, scoped to the
tenant, and monotonic for the stream.
In witness mode, Local Vault signs checkpoint statements only when they extend the last accepted checkpoint for the tenant stream. A conflict creates fork visibility for the customer side.
Witness command
Use the operator command to sign a monotonic checkpoint statement or return fork evidence for a conflicting checkpoint. The command prints public receipt/fork material only; it never prints the private signing key.
attesto-local-vault --witness-db /var/lib/attesto/local-vault-witness.sqlite3 \
witness-checkpoint \
--tenant-id ten_... \
--stream-id str_... \
--checkpoint-id chk_... \
--checkpoint-seq-no 42 \
--checkpoint-hash "$CHECKPOINT_HASH" \
--previous-checkpoint-hash "$PREVIOUS_CHECKPOINT_HASH"
Offline and online modes
- Online relay: events are signed, spooled, relayed, and receipted quickly.
- Temporary offline relay: events remain encrypted in the local spool until outbound network returns.
- Witness online: checkpoint statements are verified and signed according to policy.
- Witness unavailable: quorum may be delayed; receipts remain independent from witness availability.
