Attesto

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

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

  1. La customer source crée un attestation event.
  2. Local Vault signe et stocke l'event dans l'encrypted spool.
  3. Local Vault relaie l'event vers POST /v2/local-vault/installations/{installation_id}/events sur https://verify.attesto.eu.
  4. Attesto retourne le Proofstream receipt.
  5. 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é.

StateSignification
queuedStocké localement et en attente de relay.
relayingOutbound request en cours.
receiptedAttesto a retourné un Proofstream receipt.
conflictSource reference rejouée avec un canonical content différent.

Security model

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