kimberlite-rbac: Role-Based Access Control
Provides fine-grained access control for Kimberlite:
- Role-based access control (4 roles: Admin, Analyst, User, Auditor)
- Field-level security (column filtering)
- Row-level security (RLS with WHERE clause injection)
- Policy enforcement at query time
Architecture
┌─────────────────────────────────────────────┐
│ Query Request │
└─────────────────┬───────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ PolicyEnforcer │
│ ├─ Stream-level access control │
│ ├─ Column filtering (field-level security) │
│ └─ Row filtering (RLS) │
└─────────────────┬───────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ Rewritten Query │
│ - Unauthorized columns removed │
│ - WHERE clause injected │
└─────────────────────────────────────────────┘
Roles
| Role | Read | Write | Delete | Export | Cross-Tenant | Audit Logs |
|---|---|---|---|---|---|---|
| Auditor | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ |
| User | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ |
| Analyst | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ |
| Admin | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Examples
Standard Policies
use StandardPolicies;
use TenantId;
// Admin: full access
let admin_policy = admin;
// User: tenant-isolated access
let user_policy = user;
// Analyst: cross-tenant read, no write
let analyst_policy = analyst;
// Auditor: audit logs only
let auditor_policy = auditor;
Custom Policies
use ;
use Role;
use TenantId;
let policy = new
.with_tenant
.allow_stream // Only patient streams
.deny_stream // Except sensitive data
.allow_column
.deny_column // No SSN access
.with_row_filter;
Policy Enforcement
use PolicyEnforcer;
use StandardPolicies;
use TenantId;
let policy = user;
let enforcer = new;
// Check stream access
enforcer.enforce_stream_access?;
// Filter columns
let requested = vec!;
let allowed = enforcer.filter_columns;
// Generate WHERE clause for row-level security
let where_clause = enforcer.generate_where_clause?;
// Result: "tenant_id = 42"
# Ok::
Compliance
RBAC supports multi-framework compliance:
- HIPAA § 164.312(a)(1): Role-based access controls
- GDPR Article 32(1)(b): Access controls and confidentiality
- SOC 2 CC6.1: Logical access controls
- PCI DSS Requirement 7: Restrict access to cardholder data
- ISO 27001 A.5.15: Access control policy
FedRAMPAC-3: Access enforcement
Formal Verification
All RBAC properties are formally verified:
-
TLA+ Specification:
specs/tla/compliance/RBAC.tlaNoUnauthorizedAccesstheoremPolicyCompletenesstheoremAuditTrailCompletetheorem
-
Kani Proofs:
src/lib.rs(bounded model checking)- Proof #33: Role separation
- Proof #34: Column filter completeness
- Proof #35: Row filter enforcement
- Proof #36: Audit completeness
-
VOPR Scenarios:
kimberlite-sim/src/scenarios/unauthorized_column_accessrole_escalation_attackrow_level_securityaudit_trail_completeness