Skip to content

Credentials and secrets

Nothing here is omitted for looking bad.

SecretWhere it livesLifetimeEncrypted at rest by the application
API token (z9_live_…)Hash only, in the control planeUntil deletedHash — plaintext is never stored
User sessionSigned token in the browserShortn/a
Server password (generated)Nowhere. Shown onceOne displayn/a
SSH public keyControl planeUntil deletedPublic key; not a secret
Appliance bootstrap tokenHash in the control plane; plaintext in VM firmware metadataSingle use, minutesHash
Appliance device identityHash in the control plane; plaintext on the VMUntil the VM is rebuiltHash
Proxmox API tokenThe region agent’s environmentUntil rotatedNot applicable — never in the control plane
Edge router credentialsThe region agent’s environmentUntil rotatedNot applicable
Zero Trust join keyUsed once, discardedSecondsNot stored
Kubernetes kubeconfigControl plane, until displayed once, then deletedUntil first displayNo
Kubernetes cluster secrets (PKI)Control planeCluster lifetimeNo
Object storage cluster secretControl planeStore lifetimeNo
Object storage access key secretNowhere. Shown onceOne displayn/a
TLS private keyControl plane; delivered to load balancersCertificate lifetimeNo
ACME account keyControl planeInstallation lifetimeNo

The rows marked No are a real gap and are tracked in Known gaps. The column names in the database already say what they are meant to become; today the value is plaintext. It is stated here rather than left to be discovered.

Shown once, never stored. Server passwords, storage key secrets, kubeconfigs and API tokens are displayed at creation and not kept in retrievable form. Losing one means creating another. That is the deliberate trade against a control plane holding a permanent copy of every customer’s administrative credential.

Region credentials never leave the region. In agent mode the Proxmox and edge credentials exist only in the agent’s environment. Compromising the control plane does not hand over the hypervisor.

Identity is exchanged, not distributed. A fresh appliance receives a single-use bootstrap token through hypervisor firmware metadata — readable inside that guest and nowhere else — and exchanges it for a long-lived identity. The bootstrap token is consumed at that moment.

Secrets are not logged. Logs carry identifiers and outcomes. Provider tokens are never included in error messages, and the tooling used to operate the platform is held to the same rule — no tracing a script that sources a secret, no verbose HTTP dump that would print an authorization header.

Appliances cannot be logged into. No SSH daemon, no shell, no accounts. There is no interactive session on a load balancer to hijack and no shell history to read.

Use scoped tokens. A monitoring integration gets a viewer token. Only the step that changes something needs a write token.

Rotate on suspicion, not on schedule alone. Delete first, reissue after. The audit trail shows what a token did.

Do not paste secrets into the console. Console sessions are relayed and audited. Use SSH keys for servers, and the API for everything else.

Treat a displayed secret as the only copy. The panel genuinely cannot show it again.