Role-Based Access Control

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
tenant_admin Full read/write access to all resources within the tenant
operator Read/write access to operational resources; no user/tenant management
viewer Read-only access to all resources

Built-in permission sets

Permission tenant_admin operator viewer
pool:read/write/delete read
member:read/write/delete read
service:read/write/delete read
hc:read/write/delete read
geo:read/write/delete read
user:read/write/delete read
tenant:read/write/delete
role:read/write read read
usage:read_own
cluster:status
dnssec:read/write read read
domain:read/write read
txt:read/write read
tsig:read/write read
redirect:read/write read
license:read/write read read

Permission Atoms

Permission Description
pool:read List and view pools
pool:write Create and update pools
pool:delete Delete pools
member:read List and view pool members
member:write Create and update members
member:delete Delete members
service:read List and view services
service:write Create and update services
service:delete Delete services
hc:read View health check configuration
hc:write Create and update health checks
hc:delete Delete health checks
geo:read List geo rules
geo:write Create and update geo rules
geo:delete Delete geo rules
user:read List users
user:write Create and update users
user:delete Delete users
tenant:read List tenants
tenant:write Create and update tenants
tenant:delete Delete tenants
role:read List roles and their permissions
role:write Create and update roles
usage:read_own View usage for own tenant
usage:read_any View usage for any tenant
cluster:status View cluster and NATS status
cluster:restart Trigger node restart
snapshot:read Download DB snapshot
dnssec:read View DNSSEC key status
dnssec:write Manage DNSSEC keys and initiate rollovers
domain:read List delegated domains
domain:write Create and verify delegated domains
txt:read List TXT records
txt:write Create and delete TXT records
tsig:read List TSIG keys
tsig:write Create and delete TSIG keys
redirect:read List redirect rules
redirect:write Create and delete redirect rules
license:read View license status and install ID
license:write Apply a new license token
bgp:status View BGP peer and route announcement status
rrl:read List RRL allowlist entries
rrl:write Add and delete RRL allowlist entries
alert:read List alert channels
alert:write Create, update, and delete alert channels
history:read List and view config snapshots
history:write Create checkpoints, restore, and delete snapshots
settings:read View server settings (SMTP configuration)
settings:write Update server settings

Role matrix (complete)

Permission tenant_admin operator viewer
pool:read/write/delete read
member:read/write/delete read
service:read/write/delete read
hc:read/write/delete read
geo:read/write/delete read
user:read/write/delete read
tenant:read/write/delete
role:read/write read read
usage:read_own
cluster:status
dnssec:read/write read read
domain:read/write read
txt:read/write read
tsig:read/write read
redirect:read/write read
license:read/write read read
bgp:status
rrl:read/write read
alert:read/write read
history:read/write read
settings:read/write

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 role
POST /api/v1/roles
{
  "name": "dns-operator",
  "permissions": ["domain:read","domain:write","txt:read","txt:write"]
}

# Update a role's permissions
PUT /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 role
POST /api/v1/users
{
  "email": "alice@example.com",
  "password": "...",
  "role": "operator"
}

# Update role
PUT /api/v1/users/{id}
{
  "role": "tenant_admin"
}

In the WebUI: Admin → Users → select user → change role.


RBAC Notes

  • The system_admin identity (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.

Was this article helpful?
© 2026