Access control
jalth uses three independent access layers, each powered by a different Cloudflare product:
| Layer | Controls | CF Product | Example |
|---|---|---|---|
| Mesh membership | Who can join | WARP enrollment policies | SSO login or auth key |
| Mesh management | Who can manage | Access Groups | Only admins can destroy |
| Service access | Who can reach a URL | Access Apps (per service) | --allow group:devs |
These layers are independent. An external user can access a public service if they match --allow. A mesh member can reach any device at device.mesh:port without a service policy.
Mesh membership
Section titled “Mesh membership”The jalth-members Access Group is the enrollment boundary.
jalth role set sarah@team.com memberjalth group add members --domain myteam.comjalth role lsjalth group remove members sarah@team.comManagement roles
Section titled “Management roles”Admin (jalth-admins)
Section titled “Admin (jalth-admins)”jalth destroy,jalth upgrade,jalth devices removejalth auth-key create/list/revokejalth role set/ls
Operator (jalth-operators)
Section titled “Operator (jalth-operators)”jalth route add/removejalth auth-key create/list/revoke
Member (default)
Section titled “Member (default)”jalth serve/stopon own devicejalth ssh,jalth leavejalth status,jalth devices,jalth ping(read-only)
jalth role set alice@team.com adminjalth role set bob@team.com operatorPer-service policies
Section titled “Per-service policies”Set on jalth serve with --allow:
jalth serve api --port 3000 --allow email:alice@team.comjalth serve grafana --port 3000 --allow group:engineersjalth serve admin --port 8080 --allow ip:203.0.113.0/24Supported allow types: email:, group:, ip:, country:.
Custom Access Groups
Section titled “Custom Access Groups”jalth group create devsjalth group add devs alice@team.com bob@team.comjalth group members devsjalth group delete devsHeadless device identity
Section titled “Headless device identity”jalth auth-key create --name gpu-box --identity ops@team.com --group operators --reusableThe --identity flag assigns an email for role checks. No IdP verification — the auth key proves authorization.