Before exposing the service
- Terminate HTTPS at the public origin
- Set
AIRMUX_CONSOLE_URLto that exact origin - Claim the instance immediately
- Keep
AIRMUX_PUBLIC_SIGNUP=falseunless open registration is intentional - Use a strong URL-safe Postgres password set before database initialization
- Restrict access to Postgres, the secret store, gateway state, and backups
- Give the control plane write access to runtime credentials and provider secrets; mount both read-only in gateways
- Keep control-plane synchronization traffic on a private or otherwise protected network
- Disable response buffering on
/inf/and set an appropriate streaming read timeout
Credential practices
- Give each application its own workspace inference key owned by an organization-managed service account
- Give automation a service account and a management key with the minimum scope and permissions
- Never use a management key for inference or expose a provider credential to an application
- Store one-time tokens immediately;
airmuxdoes not return them again - Rotate provider credentials through the API so their version invalidates gateway caches
- Revoke unused inference and management keys
State and logs
The default file-backed secret store writes one owner-readable file per provider credential under/state/secrets. Bundle
caches contain token hashes and secret references, not plaintext tokens or provider values. Usage and audit records can
still contain sensitive operational metadata such as model IDs, user IDs, credential IDs, cost, and timestamps.
Do not log Authorization, x-api-key, authentication-cookie values, request bodies, provider keys, or one-time token
responses. Limit access to application logs, database exports, volume snapshots, and support bundles.
Browser boundary
The data plane sendsX-Content-Type-Options: nosniff and disables caching on all HTTP responses. The airmux proxy
also sends a restrictive Content Security Policy, Referrer-Policy: no-referrer, and X-Frame-Options: DENY.
Preserve equivalent behavior if you replace the checked-in proxy. See the response headers
for streaming cache directives and the authentication challenge.
Playground requests may authenticate with a same-origin cookie. The gateway requires an X-Requested-With header and
rejects cross-site fetch metadata for cookie-authenticated inference. Normal applications should send inference keys
through Authorization: Bearer or x-api-key.