Skip to content

Configuration

Every setting has a KV_* environment variable and a flag; the flag wins when both are set. Only the Entra issuer is required.

FlagEnvDefaultPurpose
--addrKV_ADDR:8444Listen address.
--data-dirKV_DATA_DIR(empty)State directory (SQLite + persisted TLS cert). Empty = in-memory DB and ephemeral TLS keys.
--entra-issuerKV_ENTRA_ISSUER(required)The exact iss bearer tokens must carry, e.g. https://localhost:8443/{tenant}/v2.0. An entra-emulator or real Entra v2.0 issuer.
--entra-jwks-urlKV_ENTRA_JWKS_URL(derived)Where signing keys are fetched. Derived from the issuer when unset ({issuer − /v2.0}/discovery/v2.0/keys).
--entra-tls-insecureKV_ENTRA_TLS_INSECUREfalseSkip TLS verification when fetching JWKS — for entra-emulator’s self-signed cert on a compose network.
--default-vaultKV_DEFAULT_VAULTemulatorThe vault served on non-vault hosts (localhost, IPs).
--soft-delete-retention-daysKV_SOFT_DELETE_RETENTION_DAYS90Soft-delete recovery window (7–90). Rejected outside that range.
--disable-tlsKV_DISABLE_TLSfalseServe plain HTTP (behind a TLS-terminating proxy, or for curl exploration).

--entra-jwks-url and the challenge authority are both derived from --entra-issuer when unset:

issuer https://localhost:8443/{tenant}/v2.0
jwks https://localhost:8443/{tenant}/discovery/v2.0/keys
authority (advertised in the 401 challenge)
https://localhost:8443/{tenant}

Point --entra-issuer at a real Entra tenant and nothing else changes — the vault validates real tokens.

The distroless image sets KV_DATA_DIR=/data and exposes 8444; mount /data to persist state and the TLS cert across restarts. See Installation for the compose contract.

  • Vaults are created on first write (Host-routed) — there is no vault-CRUD API (Architecture § Non-goals).
  • Runtime knobs used only in tests — the controllable clock, fault injection, and the permission map — are set over HTTP through /_emulator (Testing), not via config.