Skip to main content

Overview

Polystack services enforce role-based access control through policy files. Each service has a policy.yaml (or policy.json) file that maps API operations to role requirements. The default policies follow the principle of least privilege — admin gets full access, member gets project-scoped CRUD, and reader gets read-only access. This guide covers viewing default policies, creating custom roles, writing per-service overrides, and applying changes safely.
Administrator Access Required — This operation requires the admin role. Contact your Polystack administrator if you do not have sufficient permissions.

Default Policy Overview

Polystack ships with three built-in roles and a set of default policies enforced across all services: The admin role implies member, which implies reader — so each role inherits the permissions of those below it.
Policy files use oslo.policy syntax. Rules can reference roles, project context, object ownership, and system scope. You only need to define overrides — unspecified rules use the service’s compiled-in defaults.

Policy File Locations

Each Polystack service reads its policy file from inside its container. Overrides are placed in /etc/ironcore/<service>/ on the host and deployed by the deployment console:
Start with an empty override file and add only the rules you need to change. All other rules fall back to the service’s built-in defaults.

Custom Roles and Per-Service Policies

Custom roles are names you create in Keystone. They have no permissions by default — you must explicitly grant them permissions in each service’s policy file.

Workflow

Create the custom role in Keystone

Create a custom role
Verify

Find the policy rule names for the operations you want to allow

View the current built-in policy rules for the target service:
Show Nova's current effective policies
Show Neutron's current effective policies

Write the policy override file

Create /etc/ironcore/<service>/policy.yaml with only the rules you want to change:
/etc/ironcore/nova/policy.yaml — allow network-operator to list servers
/etc/ironcore/neutron/policy.yaml — allow network-operator to manage ports

Apply the policy changes via the deployment console

Redeploy the affected service
The new policy is active. Test with a user holding the custom role to verify enforcement.

Assign the custom role to users

Assign the custom role to a user on a project

Policy Syntax Reference

Role-based rules

Common policy rule patterns
Project ownership rules
System admin rules
Define reusable aliases at the top of the policy file to avoid repetition:
Policy with reusable aliases

Per-Service Policy Examples

/etc/ironcore/nova/policy.yaml

Discover Policy Rule Names

Before writing an override, find the exact rule name used by the service:

Audit Policy Enforcement

Regularly review and verify policy configurations across all services:
Overly permissive policies are a leading cause of privilege escalation incidents. Test policy changes in a staging environment before applying to production. Always restrict — never relax — default policies without documented justification.
Maintain a change log for all policy modifications. Document the business justification, date of change, and approver for each policy override. This record is essential for compliance audits.

Next Steps

Roles & Role Assignments

Create custom roles and assign them to users on projects and domains

Security Hardening

Apply the full security hardening checklist including policy auditing best practices

Domain Management

Manage the domain and project hierarchy that policies operate within

Admin Troubleshooting

Resolve 403 Forbidden errors caused by policy misconfigurations