Skip to content

Trust and security model ​

Each control interface checks caller identity. Guests are outside the control boundary. Network access alone grants no authority.

Who can call each interface ​

CallerInterfaceCredential
Central or regional serviceAtlas tenant APIEdDSA bearer token with the Atlas audience, scope=*, and signed tenant claim.
System ManagerAtlas tenant API and DeskFrappe session with the System Manager role.
AtlasMetal control APIRegional certificate and pinned Atlas client common name, checked through mutual TLS.
Metal nodeCoordination API and migration streamAny certificate signed by the regional authority.
Central, Atlas, or CargoProxy control APIBearer password or issuer-bound token with route scopes and optional name constraints.
AtlasCargo APIToken for the regional Cargo audience. Cargo's validator is outside this repository.
Proxy peerInternal cluster APIRegional cluster password.
BrowserAtlas realtime bridgeShort-lived, single-use console token.

Atlas and proxy tokens ​

Signing keys and tokens explains the combined public key set, token structure, and separate Atlas, proxy, and Cargo audiences. Tenant identity defines record access, and proxy authentication defines route access. Proxy control requests fail authentication when valid credentials are not configured.

Metal listeners ​

Metal uses TLS 1.3 with no shared secret.

Installed listenerPortAuthority
Control9000Regional CA certificate plus the Atlas client common name.
Coordination9001Any regional node certificate. Source-side migration routes only.
One-shot snapshot stream9002Any regional node certificate.

Coordination and snapshot listeners bind only to the WireGuard address. The destination also checks the source server certificate against the source address.

Certificate lifetime ​

Atlas owns one private certificate authority per region. Node certificates support client and server authentication. They identify the node and its WireGuard, private, and public addresses.

CertificateLifetimeRenewal
Node825 daysAtlas renews within 30 days of expiry and restarts Metal.
Regional authority10 yearsNo rotation. Atlas reports an error within 180 days of expiry.

Tenant and guest boundaries ​

Atlas records ​

Frappe permission hooks enforce tenant access:

  • permission_query_conditions filters lists.
  • has_permission checks VM, image, and public IP allocation documents.
  • A request for another tenant's record returns 404.
  • Outside an Atlas API identity, callers without System Manager access read nothing.

System images are shared reads. An Available Public IP Allocation has no tenant, so tenants cannot read it.

Guests and packets ​

Metal gives each guest its own user ID, Firecracker jail, and Linux network namespace. An enabled guest firewall filters forwarded traffic there.

WG Mesh checks source ownership and tenant IDs in eBPF. A privileged tenant-0 VM can cross tenant boundaries only when Atlas includes its address in the privileged set.

Treat guest user data, metadata, and packets as untrusted input.

Secret and console handling ​

Atlas stores regional keys and provider credentials in Frappe Password fields. It writes Metal client credentials to private site files for TLS connections. Node and proxy credentials go to their host configurations.

A console connection uses a one-use Redis token. Console access explains its lifetime, permission check, and bridge.

Rules for a change ​

  1. Use frappe.get_list in list routes. frappe.get_all bypasses permissions.
  2. Check permissions on the domain object so each whitelisted method is safe on its own.
  3. Use AtlasUserError only for caller-safe messages. Other failures return a generic message and log the traceback.
  4. Run queued work as Administrator with run_as_admin. Do not depend on the initiating user's permissions.

Limitations ​

Accepted limitEffect
Bearer service tokensNo replay tracking. A stolen token works until expiry. Issuers must use short lifetimes.
Atlas scope=*Service tokens can reach every tenant API route within their tenant authority.
No Atlas tenant quotasVM validation limits one VM. Central owns aggregate capacity and cost control.
Signed image URLs last 24 hoursAnyone with the URL can access that artifact.
Console token is a bearer credentialAnyone who holds a valid token can use it once before it expires. See console access.
Regional node authorityA node in the mesh can call another node's migration source routes.
Live Atlas API docs load Scalar from a CDN/api/atlas/docs loads an unpinned script without an integrity hash on the site origin.
Source code and tests

AGPL-3.0