Skip to content

RBAC

User Role Design

Role Scopes Description
Guest read:presets, read:preset, read:metrics, read:deduplications, read:extraction, read:dashboards, read:ai, read:workflows, read:incidents, read:incident, read:alert, read:settings Read-only access for new users
Webhook write:alert, write:incident, read:alert, read:incidents Write/read alerts and incidents using API keys (internal role)
WorkflowRunner write:workflows, execute:workflows Run workflows using API keys
PccAnalyst (draft) read:*, update:alert, update:incident, execute:workflows Read all + update alerts/incidents for PCC analysts
PccAdmin read/write/update/delete/execute: maintenance, workflows, presets, preset, rules, extraction, providers, incidents, incident, secrets, alert, settings, topology, dashboards, actions, ai + read:deduplications Full access for PCC team
OpsMember (draft)read:*, update:alert, update:incident, execute:workflows Read all + update alerts/incidents for Ops members
OpsAdmin read/write/update/delete/execute: maintenance, workflows, presets, preset, rules, extraction, providers, incidents, incident, secrets, alert, settings, topology, dashboards, actions, ai + read:deduplications Full access for Ops team
Admin read:*, write:*, delete:*, update:*, execute:* Full access - can do everything

Scope Actions Reference

Action Description
read View resources
write Create new resources
update Modify existing resources
delete Remove resources
execute Run/trigger resources (e.g., workflows)

Scope Resources Reference

Resource Description
alert Single alert operations
incidents / incident Incident management
workflows Workflow definitions and execution
presets / preset Saved view presets
rules Alert rules configuration
extraction Field extraction rules
providers Data source providers
settings System settings
dashboards Dashboard management
ai AI analysis features
topology Service topology
maintenance Maintenance windows
secrets Secret/credential management
actions Custom actions
deduplications Deduplication rules
metrics Metrics data

User permissions

User permissions in EMS are managed through a combination of user roles and group memberships. Each user is assigned a role that defines their baseline permissions, and they can inherit additional permissions through group memberships.

User Group Design

Overview

User groups in EMS are designed to streamline permission management by grouping users with similar roles and responsibilities. Integrating with MyID allows for automatic user onboarding and group membership assignment based on existing organizational structures.

Group Permission Model

Each user group has two role levels for different member types:

Member Type Role Level Permissions Example
Group Admin Higher role Full team permissions + group management PccAdmin, OpsAdmin
Group Member Lower role Basic team permissions PccAnalyst, OpsMember

Group Configuration Example

┌─────────────────────────────────────────────────────────────────┐
│  User Group: "pcc-team"                                         │
│  ├── Admin Role: PccAdmin                                       │
│  ├── Member Role: PccAnalyst                                    │
│  │                                                              │
│  ├── Group Admins: (inherit PccAdmin permissions)               │
│  │   └── lead@cisco.com                                         │
│  │                                                              │
│  └── Group Members: (inherit PccAnalyst permissions)            │
│      ├── analyst1@cisco.com                                     │
│      └── analyst2@cisco.com                                     │
└─────────────────────────────────────────────────────────────────┘

Permission Resolution

User's effective permissions = User Role ∪ All Group Roles (based on member type in each group)

Example: - User: john@cisco.com - User Role: Guest - Groups: - "pcc-team" as Group Admin → PccAdmin - "ops-team" as Group Member → OpsMember - Effective Permissions: Guest + PccAdmin + OpsMember

Group Admin vs Group Member Capabilities

Action Group Admin Group Member
Inherit admin role permissions
Inherit member role permissions
View group members
Add members to group
Remove members from group
Promote member to admin
Change group roles ❌ (System Admin only)
Delete group ❌ (System Admin only)

Typical Role Pairings

Group Type Admin Role Member Role
PCC Team PccAdmin PccAnalyst
Ops Team OpsAdmin OpsMember

User Group sync with MyID

When integrating with MyID groups, we discovered that: - One user typically belongs to many MyID groups (10-50+ groups) - Syncing all MyID groups to EMS would create a messy, unmanageable group structure - Most MyID groups are irrelevant to EMS operations (e.g., company-wide, regional, HR groups)

Solution: Manual Group Creation with MyID Name Matching

Instead of auto-syncing all MyID groups, EMS uses a selective matching approach:

  1. Admin manually creates user groups in EMS
  2. Group name matches the relevant MyID group name exactly
  3. New users are auto-assigned to matching EMS groups based on their MyID group membership
  4. Group roles (admin/member) are defined in EMS during group creation

Sync Strategies

Strategy Description When to Use
On Login Sync when user logs in Default, ensures fresh data
Periodic Background job syncs all users Large user base, reduce login latency
Manual Admin triggers sync for specific user Troubleshooting, immediate updates

Configuration Options

Setting Type Default Description
myid_sync_enabled boolean true Global toggle for MyID sync
sync_on_login boolean true Sync groups on each login
sync_interval_hours integer 24 Periodic sync interval
remove_stale_memberships boolean false Remove memberships when user leaves MyID group

Edge Cases

Case Behavior
User removed from MyID group Membership remains in EMS unless remove_stale_memberships enabled
EMS group renamed MyID sync stops working for that group (name must match)
MyID group renamed Admin must rename EMS group to restore sync
User in no matching groups User has no group memberships
Duplicate group names Not allowed - unique constraint on (tenant_id, name)