building-role-mining-for-rbac-optimization skill (Anthropic-Cybersecurity-Skills)
- Install
- SKILL.md (verbatim)
- Overview
- When to Use
- Prerequisites
- Core Concepts
- Role Mining Approaches
- Role Mining Algorithms
- Role Mining Metrics
- Workflow
- Step 1: Extract User-Permission Data
- Step 2: Bottom-Up Role Discovery Using Clustering
- Step 3: Formal Concept Analysis
- Step 4: Evaluate and Select Roles
- Step 5: Business Validation
- Validation Checklist
- References
- Other files in this skill
- assets/template.md (verbatim)
- Project Overview
- Data Collection Summary
- Mining Results
- Proposed Role Definitions
- Stakeholder Validation
- Migration Plan
- references/api-reference.md (verbatim)
- Input Format (CSV)
- Role Mining Algorithms
- Bottom-Up Mining
- Top-Down Mining (Jaccard Clustering)
- Optimization Metrics
- SailPoint IdentityNow Role Mining API
- SailPoint Role Mining Status
- CyberArk Identity Role Optimization
- NIST RBAC Model Levels
- references/standards.md (verbatim)
- RBAC Standards
- ANSI/INCITS 359-2012 - Core RBAC
- NIST RBAC Model (SP 800-162)
- Identity Governance Standards
- ISO 27001:2022 - A.5.15 Access Control
- NIST SP 800-53 Rev 5
- Role Mining Research
- Key Algorithms
- Quality Metrics
- references/workflows.md (verbatim)
- End-to-End Role Mining Workflow
- Data Normalization Workflow
- Role Consolidation Workflow
What it does. Apply bottom-up and top-down role mining techniques, including clustering Part of mukul975/Anthropic-Cybersecurity-Skills (817 security skills) (mukul975/Anthropic-Cybersecurity-Skills).
| Upstream | mukul975/Anthropic-Cybersecurity-Skills |
| Skill file | skills/building-role-mining-for-rbac-optimization/SKILL.md |
| License | Apache-2.0 (skill folder LICENSE) |
| Author | mukul975 |
| Fetched | 2026-09-10 |
Install
npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill building-role-mining-for-rbac-optimization, or copy the skill folder into~/.claude/skills/building-role-mining-for-rbac-optimization/.- Raw file:
curl -sL https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/HEAD/skills/building-role-mining-for-rbac-optimization/SKILL.md
SKILL.md (verbatim)
name: building-role-mining-for-rbac-optimization
description: Apply bottom-up and top-down role mining techniques, including clustering
algorithms and formal concept analysis, to discover optimal RBAC roles from existing
user-permission assignments, consolidating overlapping roles and enforcing least
privilege. Use when an identity program needs to reduce role explosion or redesign
its RBAC role set from access data.
domain: cybersecurity
subdomain: identity-access-management
tags:
- rbac
- role-mining
- identity-governance
- access-control
- least-privilege
- clustering
version: '1.0'
author: mahipal
license: Apache-2.0
nist_csf:
- PR.AA-01
- PR.AA-02
- PR.AA-05
- PR.AA-06
mitre_attack:
- T1078
- T1098
- T1069
Building Role Mining for RBAC Optimization
Overview
Role mining is the process of analyzing existing user-permission assignments to discover optimal roles for a Role-Based Access Control (RBAC) system. Organizations accumulate excessive permissions over time through job changes, project assignments, and ad-hoc access grants, leading to "role explosion" where thousands of granular roles exist with significant overlap. Role mining uses data analysis -- including clustering algorithms, formal concept analysis, and graph-based methods -- to consolidate permissions into a minimal set of roles that accurately represent business functions while enforcing least privilege.
When to Use
- When deploying or configuring building role mining for rbac optimization capabilities in your environment
- When establishing security controls aligned to compliance requirements
- When building or improving security architecture for this domain
- When conducting security assessments that require this implementation
Prerequisites
- Export of current user-permission assignments (CSV/database)
- Identity governance platform or directory service access
- Python 3.9+ with pandas, scikit-learn, numpy
- Understanding of organizational structure and job functions
- Stakeholder access for role validation workshops
Core Concepts
Role Mining Approaches
| Approach | Description | Best For |
|---|---|---|
| Bottom-Up | Analyze existing permissions to discover common patterns | Large datasets with organic permission growth |
| Top-Down | Design roles from business requirements and job descriptions | Greenfield RBAC or organizational restructuring |
| Hybrid | Combine bottom-up analysis with top-down business validation | Most production environments |
Role Mining Algorithms
1. Permission Clustering: Group users with similar permission sets using k-means or hierarchical clustering. Users in the same cluster share a common role.
2. Formal Concept Analysis (FCA): Mathematical framework that identifies complete set of concepts (user groups sharing exact permission sets) from a binary user-permission matrix.
3. Graph-Based Mining: Model users and permissions as a bipartite graph, then find dense subgraphs representing candidate roles.
4. Boolean Matrix Decomposition: Decompose the user-permission matrix U into U ≈ R × P where R maps users to roles and P maps roles to permissions.
Role Mining Metrics
| Metric | Formula | Target |
|---|---|---|
| Role Count | Total distinct roles after mining | Minimize |
| Coverage | Permissions explained by mined roles / Total permissions | > 95% |
| Weighted Structural Complexity (WSC) | Sum of role-user + role-permission assignments | Minimize |
| Deviation | Extra permissions not covered by assigned roles | < 5% |
Workflow
Step 1: Extract User-Permission Data
Collect the current access state from all identity sources:
import pandas as pd
import numpy as np
# Load user-permission assignments
# Format: user_id, permission_id (one row per assignment)
assignments = pd.read_csv("user_permissions.csv")
# Create binary user-permission matrix (UPA matrix)
upa_matrix = assignments.pivot_table(
index="user_id",
columns="permission_id",
aggfunc="size",
fill_value=0
)
upa_matrix = (upa_matrix > 0).astype(int)
print(f"Users: {upa_matrix.shape[0]}")
print(f"Permissions: {upa_matrix.shape[1]}")
print(f"Assignments: {assignments.shape[0]}")
print(f"Density: {upa_matrix.values.sum() / upa_matrix.size:.2%}")
Step 2: Bottom-Up Role Discovery Using Clustering
from sklearn.cluster import AgglomerativeClustering
from sklearn.metrics import silhouette_score
def find_optimal_clusters(matrix, max_k=50):
"""Find optimal number of roles using silhouette analysis."""
scores = []
for k in range(2, min(max_k, matrix.shape[0])):
clustering = AgglomerativeClustering(
n_clusters=k, metric="jaccard", linkage="average"
)
labels = clustering.fit_predict(matrix)
score = silhouette_score(matrix, labels, metric="jaccard")
scores.append((k, score))
optimal_k = max(scores, key=lambda x: x[1])[0]
return optimal_k, scores
def mine_roles_clustering(upa_matrix, n_clusters):
"""Mine roles using hierarchical clustering on Jaccard distance."""
clustering = AgglomerativeClustering(
n_clusters=n_clusters, metric="jaccard", linkage="average"
)
user_matrix = upa_matrix.values
labels = clustering.fit_predict(user_matrix)
roles = {}
for cluster_id in range(n_clusters):
cluster_users = upa_matrix.index[labels == cluster_id]
cluster_permissions = upa_matrix.loc[cluster_users]
# Core role = permissions held by >80% of cluster members
permission_frequency = cluster_permissions.mean()
core_permissions = permission_frequency[permission_frequency >= 0.8].index.tolist()
roles[f"Role_{cluster_id}"] = {
"permissions": core_permissions,
"user_count": len(cluster_users),
"users": cluster_users.tolist(),
"coverage": permission_frequency[permission_frequency >= 0.8].mean()
}
return roles, labels
Step 3: Formal Concept Analysis
def mine_roles_fca(upa_matrix, min_support=3):
"""Mine roles using Formal Concept Analysis (frequent closed itemsets)."""
from itertools import combinations
users = upa_matrix.index.tolist()
permissions = upa_matrix.columns.tolist()
concepts = []
# Find all maximal permission sets shared by at least min_support users
for size in range(len(permissions), 0, -1):
for perm_combo in combinations(permissions, size):
perm_set = set(perm_combo)
# Find users who have ALL permissions in this set
matching_users = []
for user in users:
user_perms = set(upa_matrix.columns[upa_matrix.loc[user] == 1])
if perm_set.issubset(user_perms):
matching_users.append(user)
if len(matching_users) >= min_support:
# Check if this is a closed concept (no superset with same extent)
is_closed = True
for concept in concepts:
if set(matching_users) == set(concept["users"]) and \
perm_set.issubset(set(concept["permissions"])):
is_closed = False
break
if is_closed:
concepts.append({
"permissions": list(perm_set),
"users": matching_users,
"support": len(matching_users)
})
if len(concepts) > 100: # Limit for performance
break
return concepts
Step 4: Evaluate and Select Roles
def evaluate_role_set(roles, upa_matrix):
"""Evaluate the quality of a mined role set."""
total_assignments = upa_matrix.values.sum()
covered_assignments = 0
extra_assignments = 0
for role_name, role_data in roles.items():
role_perms = set(role_data["permissions"])
for user in role_data["users"]:
user_perms = set(upa_matrix.columns[upa_matrix.loc[user] == 1])
covered = role_perms.intersection(user_perms)
extra = role_perms - user_perms
covered_assignments += len(covered)
extra_assignments += len(extra)
metrics = {
"total_roles": len(roles),
"total_assignments": total_assignments,
"covered_assignments": covered_assignments,
"coverage_rate": covered_assignments / total_assignments if total_assignments else 0,
"extra_permissions": extra_assignments,
"deviation_rate": extra_assignments / (covered_assignments + extra_assignments) if (covered_assignments + extra_assignments) else 0,
"avg_role_size": np.mean([len(r["permissions"]) for r in roles.values()]),
"avg_users_per_role": np.mean([r["user_count"] for r in roles.values()]),
}
return metrics
Step 5: Business Validation
After mining candidate roles:
- Map mined roles to business functions (department, job title)
- Conduct workshops with business unit managers to validate role definitions
- Identify outlier permissions that indicate misconfiguration
- Refine roles based on feedback and re-evaluate metrics
- Document role definitions with business justification
Validation Checklist
- User-permission matrix extracted from all identity sources
- Multiple mining algorithms compared (clustering, FCA)
- Optimal role count determined via silhouette analysis or WSC
- Coverage rate exceeds 95% of existing assignments
- Deviation rate below 5% (minimal extra permissions)
- Mined roles validated with business stakeholders
- Role hierarchy defined (parent-child inheritance)
- Exception/outlier permissions documented
- Migration plan created for transitioning to new role model
- Ongoing role governance process defined
References
- Role Mining: Optimizing RBAC - NIST
- RBAC Standard - ANSI/INCITS 359-2012
- Formal Concept Analysis for Role Engineering
- scikit-learn Clustering Documentation
Other files in this skill
- LICENSE
- assets/template.md
- references/api-reference.md
- references/standards.md
- references/workflows.md
- scripts/agent.py
- scripts/process.py
assets/template.md (verbatim)
Role Mining Project Template
Project Overview
| Field | Value |
|---|---|
| Organization | |
| Project Lead | |
| Start Date | |
| Target Completion | |
| Identity Sources | AD / Azure / AWS / Applications |
Data Collection Summary
| Source | Users | Permissions | Assignments |
|---|---|---|---|
| Active Directory | |||
| AWS IAM | |||
| Azure AD | |||
| Applications | |||
| Total (Deduplicated) |
Mining Results
| Algorithm | Roles Found | Coverage | Deviation | WSC |
|---|---|---|---|---|
| Clustering (k=___) | ||||
| Intersection Mining | ||||
| Selected Approach |
Proposed Role Definitions
| Role Name | Department | Permissions | Users | Status |
|---|---|---|---|---|
| Draft/Validated/Approved | ||||
Stakeholder Validation
| Business Unit | Reviewer | Roles Reviewed | Approved | Date |
|---|---|---|---|---|
| Yes/No |
Migration Plan
- Roles created in identity governance platform
- User-role assignments configured
- Individual permission grants removed
- Test users validated access
- Full migration completed
- Post-migration access verification
- Old permissions cleanup confirmed
references/api-reference.md (verbatim)
API Reference: Role Mining for RBAC Optimization
Input Format (CSV)
user,entitlement,system
john.doe,read_files,FileServer
john.doe,write_files,FileServer
jane.smith,read_files,FileServer
Role Mining Algorithms
Bottom-Up Mining
Finds exact permission sets shared by >= N users.
- Input: user-permission matrix
- Output: candidate roles with exact permission sets
- Parameter:
min_users(default: 2)
Top-Down Mining (Jaccard Clustering)
Groups users by permission similarity.
Jaccard(A, B) = |A ∩ B| / |A ∪ B|
- Threshold >= 0.8: strict similarity
- Threshold >= 0.6: moderate clustering
Optimization Metrics
| Metric | Description |
|---|---|
| Total Assignments | Sum of all user-permission pairs |
| Candidate Roles | Discovered role count |
| Role Coverage | Users assigned to candidate roles |
| Avg Permissions/User | Assignment density |
| Outlier Count | Users with unique permissions |
SailPoint IdentityNow Role Mining API
POST https://{tenant}.api.identitynow.com/beta/role-mining-sessions
Authorization: Bearer TOKEN
{
"scope": {"included": {"identityIds": [...]}},
"minEntitlementPopularity": 2,
"pruneThreshold": 50
}
SailPoint Role Mining Status
GET /beta/role-mining-sessions/{sessionId}
GET /beta/role-mining-sessions/{sessionId}/potential-roles
CyberArk Identity Role Optimization
GET /Roles/GetRoleMembers?name={role}
POST /Roles/OptimizeRoles
{"minUsers": 3, "maxRoles": 50}
NIST RBAC Model Levels
| Level | Description |
|---|---|
| Core RBAC | Users, roles, permissions, sessions |
| Hierarchical | Role inheritance |
| Constrained | Separation of duty (SoD) |
| Symmetric | Permission-role review |
references/standards.md (verbatim)
Role Mining for RBAC Optimization - Standards Reference
RBAC Standards
ANSI/INCITS 359-2012 - Core RBAC
- Defines User, Role, Permission, Session abstractions
- Role assignment: users are assigned to roles
- Permission assignment: permissions are assigned to roles
- Role hierarchy: senior roles inherit junior role permissions
- Separation of Duty constraints (static and dynamic)
NIST RBAC Model (SP 800-162)
- Core RBAC: Basic user-role and role-permission mappings
- Hierarchical RBAC: Role inheritance relationships
- Constrained RBAC: Static and dynamic separation of duties
- Symmetric RBAC: Combined user-centric and permission-centric views
Identity Governance Standards
ISO 27001:2022 - A.5.15 Access Control
- Access control policy based on business and security requirements
- Roles determined by job function
- Regular review of access rights
- Formal authorization for privilege changes
NIST SP 800-53 Rev 5
- AC-2: Account Management
- AC-3: Access Enforcement
- AC-5: Separation of Duties
- AC-6: Least Privilege
- AC-16: Security and Privacy Attributes
- AC-24: Access Control Decisions
Role Mining Research
Key Algorithms
- RoleMiner (Vaidya et al., 2007): Iterative role mining minimizing WSC
- CompleteMiner / FastMiner (Vaidya et al., 2006): Complete vs. approximate algorithms
- ORCA (Schlegelmilch & Steffens, 2005): Clustering-based approach
- Graph Optimization (Lu et al., 2008): Graph-based role mining
Quality Metrics
- Weighted Structural Complexity: min(|UA| + |PA| + |Roles|)
- Boolean Matrix Decomposition error
- Jaccard similarity between mined and original access
- Role coverage percentage
references/workflows.md (verbatim)
Role Mining for RBAC Optimization - Workflows
End-to-End Role Mining Workflow
Phase 1: DATA COLLECTION (Week 1-2)
├── Export user-permission data from all identity sources
│ ├── Active Directory group memberships
│ ├── Cloud IAM role assignments
│ ├── Application-level permissions
│ └── Database access grants
├── Collect HR data (job titles, departments, cost centers)
├── Normalize data into User-Permission Assignment (UPA) matrix
└── Clean data: remove disabled accounts, system accounts
Phase 2: ANALYSIS (Week 3-4)
├── Run clustering algorithms (hierarchical, k-means)
├── Run Formal Concept Analysis for exact role candidates
├── Compare results using WSC and coverage metrics
├── Identify optimal number of roles via silhouette analysis
└── Map candidate roles to organizational structure
Phase 3: VALIDATION (Week 5-6)
├── Present candidate roles to business unit managers
├── Validate each role against job descriptions
├── Identify and resolve outlier permissions
├── Define role hierarchy (inheritance relationships)
└── Agree on role names and descriptions
Phase 4: IMPLEMENTATION (Week 7-8)
├── Create roles in identity governance platform
├── Assign users to validated roles
├── Remove individual permission assignments
├── Test access for sample users in each role
└── Document role definitions and approval chain
Phase 5: GOVERNANCE (Ongoing)
├── Monitor for permission drift
├── Quarterly role effectiveness review
├── Re-run mining annually to detect new patterns
└── Track role count and WSC metrics over time
Data Normalization Workflow
Raw Data Sources
│
├── AD: user → group → permissions
│ Normalize to: user_id, permission_id
│
├── AWS: user/role → policy → actions
│ Normalize to: user_id, permission_id
│
├── Azure: user → role → permissions
│ Normalize to: user_id, permission_id
│
└── Applications: user → app_role → features
Normalize to: user_id, permission_id
Merge all sources → Deduplicate → Create UPA matrix
Role Consolidation Workflow
Mining produces N candidate roles
│
├── Remove roles with < 3 users (outliers)
│
├── Merge roles with > 90% Jaccard similarity
│
├── Identify hierarchical relationships:
│ └── If Role A permissions ⊂ Role B permissions
│ → Role A is junior to Role B
│
├── Check for SoD violations:
│ └── Does any role combine conflicting permissions?
│ → Split into separate roles if needed
│
└── Final role set with hierarchy and constraints
Back to mukul975/Anthropic-Cybersecurity-Skills (817 security skills) or Agent skills.