RBAC Administration
Configure teams, permissions, and data scopes for your organization.
This guide covers how to administer Role-Based Access Control (RBAC) in Parascope. You must be a superadmin to access these features.
Quick Start
- Create teams that map to your organizational structure
- Assign permissions to teams based on what they need to do
- Set data scopes to control which infrastructure each team can see
- Add users to teams as they log in
Teams
Teams are the primary way to manage access in Parascope. Users inherit permissions and data scopes from all teams they belong to.
Creating a Team
- Go to Settings → Teams
- Click Create Team
- Enter a name and description
- Click Create
Team Roles
Each team member has a role:
| Role | Capabilities |
|---|---|
| Admin | Add/remove members, change member roles |
| Member | Access team's permissions and scopes |
Team admins can manage their own team's membership. Only superadmins can change team permissions and scopes.
Recommended Team Structure
Organize teams by function or access needs:
Infrastructure Team
├── Permissions: configuration_items (read, write), collectors (read, write)
├── Data Scopes: kubernetes, proxmox, ceph
└── Members: Platform engineers
Application Team
├── Permissions: configuration_items (read)
├── Data Scopes: kubernetes
└── Members: Application developers
Operations Team
├── Permissions: configuration_items (read), collectors (read)
├── Data Scopes: all sources
└── Members: SRE, on-call engineersPermissions
Permissions control what actions users can perform.
Permission Model
Permissions are defined as:
- Resource: What the permission applies to
- Actions: What operations are allowed
Available Resources
| Resource | Description |
|---|---|
configuration_items | View and manage CIs |
collectors | View and manage collectors |
sources | View and manage data sources |
correlations | View and manage correlation rules |
teams | View and manage teams |
users | View and manage users |
audit | View security audit log |
raw_data | Verbatim source payloads, which may contain secrets. Read only. |
credentials | View and manage the stored credentials collectors use to reach their targets |
* | All resources. A * grant confers raw_data and credentials only with the * action, not read, write or delete. |
raw_data is the original object each collector reported for a CI, such as a pod spec with its environment values. Superadmins and members of a team holding * with the * action (the seeded Admins team) can read it. A team holding configuration_items:read (the seeded Viewers team), or * with only read, cannot. To let a team read source payloads without wider rights, grant it raw_data with read. Signed-in users without access see an explanation on the CI's Raw Data tab instead of the payload.
credentials follows the same rule. A team holding * with read, write and delete ticked one by one cannot open Settings → Credentials; grant it credentials with the actions it needs, or * with the * action.
Available Actions
| Action | Description |
|---|---|
read | View resources |
write | Create and update resources |
delete | Remove resources |
* | All actions |
Setting Team Permissions
- Go to Settings → Teams → select a team
- Scroll to Permissions
- Click Edit
- Add or remove permission entries
- Click Save
Example Permission Sets
Read-only access:
configuration_items: [read]
collectors: [read]
sources: [read]Operator access:
configuration_items: [read, write]
collectors: [read, write]
sources: [read, write]Full access (non-admin):
configuration_items: [read, write, delete]
collectors: [read, write, delete]
sources: [read, write, delete]
correlations: [read, write, delete]Data Scopes
Data scopes control which CIs a user can see. This is Parascope's primary data isolation mechanism.
Scope Model
Scopes are defined by:
- Source: The data source type (kubernetes, proxmox, ceph, netbox, openstack)
- Scope ID: A specific cluster or instance within that source
Scope Matching
| Source | Scope ID | What it matches |
|---|---|---|
kubernetes | null | All Kubernetes CIs |
kubernetes | prod-cluster | Only CIs from prod-cluster |
proxmox | null | All Proxmox CIs |
null | null | All CIs (full access) |
Setting Team Scopes
- Go to Settings → Teams → select a team
- Scroll to Data Scopes
- Click Edit
- Add or remove scope entries
- Click Save
Example Scope Configurations
Infrastructure team (all sources):
source: null, scope_id: null (full access)Kubernetes-only access:
source: kubernetes, scope_id: nullSingle cluster access:
source: kubernetes, scope_id: production
source: kubernetes, scope_id: stagingMulti-source limited access:
source: kubernetes, scope_id: production
source: proxmox, scope_id: pve-cluster-1Deny by Default
If a user has no data scopes (directly or via teams), they see no CIs. This is the "deny by default" model.
To give a user access to everything, add a scope with source: null, scope_id: null.
Related CIs Outside a User's Scope
Views that follow relationships from a CI the user can see never show them a related CI outside their data scopes. That CI is left out entirely: no name, ID, type, source or score of it is sent to the browser, and any walk stops at it, so a CI the user can see that is reachable only through a hidden one is left out too. Each view shows a count instead:
| View | What is left out | What is counted |
|---|---|---|
| CI detail, Relationships tab | Relationships to hidden CIs. They are not counted in the total either | Distinct hidden related CIs |
| Impact analysis | Hidden CIs in the blast radius, and every CI reached only through one | Distinct hidden CIs the traversal reached. The minimum risk score never drops a hidden CI itself, but one reachable only through a CI the score filters out is not reached |
| Cost flow (Sankey) | Hidden upstream cost sources and the links to them | Distinct hidden cost sources the walk reached |
| Relationships Explorer and Infrastructure Lineage | Hidden CIs and the edges to them | Hidden CIs next to the graph |
A count still tells the user that hidden CIs exist next to a CI they can see, and comparing counts across filters or depths can narrow down where. That is an accepted cost of reporting counts. Users without data scope restrictions always see a count of zero, and the API returns the same counts in each response's hidden_neighbours field.
Users
User accounts are created automatically the first time someone signs in through your tenant's identity realm (JIT provisioning).
Managing Users
- Go to Settings → Users
- Use search to find users by email or name
- Click a user to view/edit details
User Properties
| Property | Description |
|---|---|
| Display Name | How the user appears in the UI |
| Active | Whether the user can log in |
| Superadmin | Full access to everything |
Direct Permissions
You can assign permissions directly to a user (bypassing teams). This is useful for special cases but teams are preferred for maintainability.
Direct Data Scopes
Similarly, you can assign data scopes directly to a user.
Deactivating Users
Deactivating a user:
- Prevents them from logging in
- Immediately revokes all active sessions
- Immediately revokes all API tokens
The user's data and audit trail are preserved.
Bootstrap Admin
The first superadmin is configured during your Parascope onboarding. When the designated administrator first signs in through the identity realm, they automatically become a superadmin. This user can then create additional superadmins and configure the system.
Audit Log
All security-related events are logged to the audit log.
Viewing the Audit Log
- Go to Settings → Audit Log
- Use filters to narrow results:
- Event type
- User
- Date range
- IP address
Exporting
Click Export CSV to download the audit log for external analysis or compliance reporting.
Logged Events
| Category | Events |
|---|---|
| Session | Login, logout, session created/revoked |
| User | Created, updated, deactivated, reactivated |
| Permission | Permission changes, scope changes |
| Team | Created, updated, deleted, member added/removed |
| Token | Created, revoked |
| Auth | Success, failure, rate limited |
| Access denied | permission_denied: a request refused for a missing permission, including attempts to read raw_data |
Best Practices
Team Design
- Map teams to responsibilities: Infrastructure, applications, security, etc.
- Start restrictive: Give minimum necessary access
- Use team admins: Delegate team membership management
- Document team purposes: Use descriptions to explain what each team is for
Permission Design
- Prefer teams over direct permissions: Easier to audit and maintain
- Group related permissions: Users who need to manage collectors probably also need to manage sources
- Separate read and write: Not everyone who can view should be able to modify
Scope Design
- Organize by environment: production, staging, development
- Organize by domain: infrastructure, applications, databases
- Be specific: Prefer specific scopes over full access
- Review regularly: Ensure scopes still match organizational needs
Security
- Limit superadmins: Only give superadmin to users who truly need it
- Review audit logs: Check for unusual activity regularly
- Rotate tokens: Encourage users to rotate tokens periodically
- Deactivate promptly: Deactivate users when they leave or change roles
Troubleshooting
User can't see any data
Check their effective scopes:
- Go to Settings → Users → select user
- Review their teams and direct scopes
- Ensure at least one scope grants access to the expected source
User can see data but can't modify
Check their effective permissions:
- Review their teams' permissions
- Ensure they have
writeaction on the relevant resource
Changes not taking effect
Permissions and scopes are evaluated on each request. If changes aren't working:
- Have the user log out and back in
- Check that the team is active
- Check that the user is active in the team
Locked out superadmins
If all superadmins are locked out, contact your Parascope administrator or support to restore access.