Attesto

Enterprise Edge

Local Vault

Local Vault es un componente customer edge outbound-only para connector secret storage, source attestation signing, offline spooling, event relay y optional customer-side witness operation. No es HashiCorp Vault.

Responsibilities

Instalar y ejecutar

Instale Local Vault en el host edge controlado por el cliente. Las coordenadas runtime pueden venir de flags o variables de entorno, pero signing keys, spool encryption keys y connector credentials deben venir del secret manager local de despliegue. No las ponga en shell history, configuración frontend ni docs de 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

Comprobación de salud

Ejecute attesto-local-vault doctor después del bootstrap y durante operator troubleshooting. El doctor comprueba config, secrets locales, permisos de secrets.env, encrypted spool readback, reglas HTTPS de relay URL, disponibilidad del backend, server clock skew, cabeceras de servidor Date inválidas y dead-letter depth. Los failures devuelven un código distinto de cero. Los warnings mantienen el spool utilizable, pero el operador debe revisarlos.

attesto-local-vault doctor

Enrollment

Un tenant owner o admin crea un enrollment token corto con POST /v2/tenant/local-vault/enrollment-tokens. El edge host intercambia ese token en POST /v2/local-vault/enroll y recibe installation metadata más la credential necesaria para outbound relay. Los enrollment tokens son single-use; Attesto almacena solo su hash después de la creación.

Acknowledgement de entrega

Local Vault marca un ítem como delivered solo cuando Attesto devuelve un receipt JSON 2xx con localVaultAck.envelopeHash, stream binding y canonical event id coincidentes. Un proxy 2xx, malformed body, mismatched receipt o revoked installation sigue siendo una entrega fallida sujeta a retry o dead-letter policy.

Outbound relay flow

  1. La customer source crea un attestation event.
  2. Local Vault firma y almacena el event en el encrypted spool.
  3. Local Vault relay el event a POST /v2/local-vault/installations/{installation_id}/events en https://verify.attesto.eu.
  4. Attesto devuelve el Proofstream receipt.
  5. Local Vault registra receipt state y conserva retry metadata hasta completar 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

El spool preserva events durante network outages. Replay es ordenado e idempotente: la misma source reference y body pueden reintentarse, pero changed content para la misma source reference es rechazado.

StateSignificado
queuedAlmacenado localmente y esperando relay.
relayingOutbound request en progreso.
receiptedAttesto devolvió un Proofstream receipt.
conflictSource reference reproducida con canonical content diferente.

Security model

Customer witness mode

Cuando está habilitado, Local Vault puede firmar monotonic checkpoints para sus tenant streams. Una policy 2-of-3 puede combinar statements Attesto-operated, customer-operated y assurance witness para que ningún servicio único sea tratado como la única source of history.

En witness mode, Local Vault firma checkpoint statements solo cuando extienden el last accepted checkpoint del tenant stream. Un conflict crea fork visibility para el lado del cliente.

Los witness checkpoint statements se envían a POST /v2/local-vault/installations/{installation_id}/witness/checkpoints y se aceptan solo cuando la installation está enabled, scoped al tenant y es monotonic para el stream.

Comando witness

Use el comando de operador para firmar un monotonic checkpoint statement o devolver fork evidence para un checkpoint conflictivo. El comando imprime solo material público receipt/fork; nunca imprime 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"

Offline y online modes