Enterprise Edge
Local Vault
Local Vault est un composant customer edge outbound-only pour connector secret storage, source attestation signing, offline spooling, event relay et optional customer-side witness operation. Ce n'est pas HashiCorp Vault.
Responsibilities
- Encrypt les connector credentials localement.
- Signer les source attestations avant relay.
- Spool les events pendant les network outages.
- Replay les spooled events dans l'ordre avec idempotency.
- Opérer comme customer-side witness lorsque la tenant policy l'active.
Installer et exécuter
Installez Local Vault sur l’hôte edge contrôlé par le client. Les coordonnées runtime peuvent venir de flags ou variables d’environnement, mais les signing keys, spool encryption keys et connector credentials doivent venir du secret manager local de déploiement. Ne les placez pas dans l’historique shell, la configuration frontend ou les docs Attesto.
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
Contrôle de santé
Exécutez attesto-local-vault doctor après le bootstrap et
pendant le troubleshooting opérateur. Le doctor vérifie la configuration, les
secrets locaux, les permissions de secrets.env, le
readback du spool chiffré, les règles HTTPS de relay URL,
l'accessibilité du backend, le server clock skew, les en-têtes
serveur Date invalides et la dead-letter depth. Les
failures retournent un code non nul. Les warnings gardent le spool
utilisable mais doivent être revus par l'opérateur.
attesto-local-vault doctor
Enrollment
Un tenant owner ou admin crée un enrollment token court avec
POST /v2/tenant/local-vault/enrollment-tokens. L'edge
host échange ce token via POST /v2/local-vault/enroll
et reçoit l'installation metadata plus la credential nécessaire au
outbound relay. Les enrollment tokens sont single-use; Attesto ne
stocke que leur hash après création.
Accusé de livraison
Local Vault marque un élément delivered uniquement quand Attesto renvoie un receipt JSON 2xx avec localVaultAck.envelopeHash, stream binding et canonical event id correspondants. Un proxy 2xx, malformed body, mismatched receipt ou revoked installation reste une livraison échouée soumise à retry ou dead-letter policy.
Outbound relay flow
- La customer source crée un attestation event.
- Local Vault signe et stocke l'event dans l'encrypted spool.
- Local Vault relaie l'event vers
POST /v2/local-vault/installations/{installation_id}/eventssurhttps://verify.attesto.eu. - Attesto retourne le Proofstream receipt.
- Local Vault enregistre receipt state et conserve retry metadata jusqu'à completion de delivery.
{
"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
Le spool préserve les events pendant les network outages. Le replay est ordonné et idempotent: la même source reference et le même body peuvent être retried, mais changed content pour la même source reference est rejeté.
| State | Signification |
|---|---|
queued | Stocké localement et en attente de relay. |
relaying | Outbound request en cours. |
receipted | Attesto a retourné un Proofstream receipt. |
conflict | Source reference rejouée avec un canonical content différent. |
Security model
- Aucune inbound internet route n'est requise pour relay mode.
- Les connector credentials restent encrypted au customer edge.
- Les relay endpoints rejettent replay conflicts et tampered envelopes.
- Revocation fail closed: une revoked installation ne peut pas continuer à relay accepted events.
Customer witness mode
Lorsqu'il est activé, Local Vault peut signer des monotonic checkpoints pour ses tenant streams. Une policy 2-of-3 peut combiner des statements Attesto-operated, customer-operated et assurance witness afin qu'aucun service unique ne soit traité comme seule source of history.
En witness mode, Local Vault signe les checkpoint statements seulement lorsqu'ils étendent le last accepted checkpoint du tenant stream. Un conflict crée fork visibility côté client.
Les witness checkpoint statements sont soumis à
POST /v2/local-vault/installations/{installation_id}/witness/checkpoints
et acceptés uniquement lorsque l'installation est enabled, scoped au
tenant et monotonic pour le stream.
Commande witness
Utilisez la commande opérateur pour signer un monotonic checkpoint statement ou renvoyer fork evidence pour un checkpoint conflictuel. La commande affiche uniquement du matériel public receipt/fork; elle n’affiche jamais la 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"
Modes offline et online
- Online relay: events sont signed, spooled, relayed et receipted rapidement.
- Temporary offline relay: events restent encrypted dans le local spool jusqu'au retour de l'outbound network.
- Witness online: checkpoint statements sont vérifiés et signés selon policy.
- Witness unavailable: quorum peut être retardé; receipts restent indépendants de witness availability.
