Roles & Permissions (RBAC)
Nexus GSLB uses role-based access control (RBAC). Each user is assigned a single role; each role carries a set of permission atoms that gate individual API endpoints.
The system API key (GSLB_API_KEY) is always treated as a super-admin and bypasses RBAC entirely.
Built-in Roles
Three system roles are seeded on startup and cannot be deleted (but their permission sets can be updated).
Role | Description |
|---|---|
| Full read/write access to all resources within the tenant |
| Read/write access to operational resources; no user/tenant management |
| Read-only access to all resources |
Built-in permission sets
Permission | tenant_admin | operator | viewer |
|---|---|---|---|
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | read | — |
| ✓ | — | — |
| ✓ | read | read |
| ✓ | ✓ | ✓ |
| ✓ | ✓ | ✓ |
| ✓ | read | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | read | read |
Permission Atoms
Permission | Description |
|---|---|
| List and view pools |
| Create and update pools |
| Delete pools |
| List and view pool members |
| Create and update members |
| Delete members |
| List and view services |
| Create and update services |
| Delete services |
| View health check configuration |
| Create and update health checks |
| Delete health checks |
| List geo rules |
| Create and update geo rules |
| Delete geo rules |
| List users |
| Create and update users |
| Delete users |
| List tenants |
| Create and update tenants |
| Delete tenants |
| List roles and their permissions |
| Create and update roles |
| View usage for own tenant |
| View usage for any tenant |
| View cluster and NATS status |
| Trigger node restart |
| Download DB snapshot |
| View DNSSEC key status |
| Manage DNSSEC keys and initiate rollovers |
| List delegated domains |
| Create and verify delegated domains |
| List TXT records |
| Create and delete TXT records |
| List TSIG keys |
| Create and delete TSIG keys |
| List redirect rules |
| Create and delete redirect rules |
| View license status and install ID |
| Apply a new license token |
| View BGP peer and route announcement status |
| List RRL allowlist entries |
| Add and delete RRL allowlist entries |
| List alert channels |
| Create, update, and delete alert channels |
| List and view config snapshots |
| Create checkpoints, restore, and delete snapshots |
| View server settings (SMTP configuration) |
| Update server settings |
Role matrix (complete)
Permission | tenant_admin | operator | viewer |
|---|---|---|---|
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | read | — |
| ✓ | — | — |
| ✓ | read | read |
| ✓ | ✓ | ✓ |
| ✓ | ✓ | ✓ |
| ✓ | read | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | read | read |
| ✓ | ✓ | ✓ |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | ✓ | read |
| ✓ | — | — |
Custom Roles
License: Creating and modifying custom roles requires the enterprise tier. The three built-in roles (tenant_admin, operator, viewer) are available on all tiers. Contact licensing@gslb.nexus to upgrade.
You can create custom roles with any combination of permissions.
WebUI
Admin → Roles → New Role
gslbctl
gslbctl roles create --name "dns-operator" \ --permissions "domain:read,domain:write,txt:read,txt:write,tsig:read,tsig:write" \ --server https://nexus.example.com:8880
API
# Create a custom rolePOST /api/v1/roles{ "name": "dns-operator", "permissions": ["domain:read","domain:write","txt:read","txt:write"]}# Update a role's permissionsPUT /api/v1/roles/{id}{ "permissions": ["domain:read","domain:write"]}# Delete a custom role (system roles cannot be deleted)DELETE /api/v1/roles/{id}
Terraform
resource "nexus_role" "dns_operator" { name = "dns-operator" permissions = ["domain:read", "domain:write", "txt:read", "txt:write"]}
Assigning Roles to Users
A user's role is set at creation time and can be changed via update.
# Create a user with a specific rolePOST /api/v1/users{ "email": "alice@example.com", "password": "...", "role": "operator"}# Update rolePUT /api/v1/users/{id}{ "role": "tenant_admin"}
In the WebUI: Admin → Users → select user → change role.
RBAC Notes
The
system_adminidentity (GSLB_API_KEY) is not a role — it bypasses all permission checks.Built-in role permissions are automatically expanded on binary upgrades to include any newly-added permission atoms, without removing admin-added custom permissions.
Custom roles survive binary upgrades unchanged.
There is no permission inheritance — a user has exactly the permissions of their assigned role.