Role-Based Access Control and Identity Capabilities

StarlingX OpenStack uses Keystone’s RBAC model to control exactly who can do what across the platform. Instead of assigning permissions directly to individual users, administrators assign roles within a specific scope — a project, a domain, or the entire system. Each OpenStack service then enforces its own policy rules against those role assignments, keeping identity management separate from policy enforcement.

This topic expands on the access-control model introduced in the Keystone section of OpenStack Services.

How the Model Works

The RBAC model connects four elements into a single authorization chain:

  1. A user authenticates against Keystone and receives a token.

  2. The token encodes the user’s role assignments within one or more scopes.

  3. The user presents the token with every API request.

  4. The target service evaluates the request against its policy file and permits or denies the operation based on the role and scope.

Because each service owns its own policy rules, operators can tailor access granularly — tightening Cinder policies for storage operations while relaxing Nova policies for developers who need to iterate quickly.

Core Identity Concepts

  • Domains — Top-level containers that group projects, users, and groups. Domains enable multi-tenancy by letting separate organizations manage their own identity resources independently without interfering with one another.

  • Projects — Organizational units that own resources such as instances, volumes, and networks. Users gain access to those resources through role assignments scoped to the project.

  • Roles — Named labels (for example, admin, member, reader) that carry no inherent meaning on their own. Their power comes from the policy rules each service defines to map roles to permitted API actions.

  • Groups — Collections of users that receive role assignments collectively, simplifying administration when many users need the same level of access.

Tokens and Authentication

After a user authenticates successfully, Keystone issues a short-lived token that encodes the user’s identity and role assignments. The user presents this token with every subsequent API request, eliminating the need to transmit credentials repeatedly and reducing exposure risk.

Tokens are scoped — each token is valid only for the project or domain specified at authentication time. If a user holds roles in multiple projects, they obtain a separate token for each scope they need to access.

Policy Enforcement

Each OpenStack service maintains its own policy file (typically policy.yaml) that maps API operations to required roles. When a request arrives, the service extracts the role and scope from the token and checks them against the policy rules before allowing the operation to proceed.

This separation means:

  • Keystone handles who you are (authentication and role assignment).

  • Each service handles what you can do (authorization through policy rules).

Operators can customize policy files to match organizational needs — for example, granting a security-auditor role read-only access to Neutron security groups without exposing compute or storage APIs.

Least Privilege at Scale

The combination of scoped roles and per-service policies supports the principle of least privilege across the entire deployment. An operator can grant a user the reader role in one project for read-only monitoring while assigning member in another project for resource creation — without ever granting broad administrative rights.

This granular approach scales cleanly with organizational growth: new teams receive their own projects and domain boundaries, inheriting the same enforceable access rules without requiring changes to the platform’s security posture.