KubeCon EUBooth 1151, Amsterdam. March 23-26

RBAC & Permissions

Kubernetes RBAC roles and permissions used by each DevZero operator.

RBAC & Permissions

Each DevZero operator uses a dedicated ServiceAccount with a minimal ClusterRole following the principle of least privilege.

Read Operator (zxporter)

Namespace: devzero-zxporter

ClusterRole permissions:

ResourceVerbs
Nodes, Pods, Deployments, StatefulSets, DaemonSets, ReplicaSetsget, list, watch
Services, Endpoints, Ingresses, NetworkPoliciesget, list, watch
PersistentVolumes, PersistentVolumeClaims, StorageClassesget, list, watch
Namespaces, ServiceAccounts, ConfigMaps (metadata only)get, list, watch
HPAs, VPAs, PDBs, PriorityClassesget, list, watch
ResourceQuotas, LimitRangesget, list, watch
Karpenter CRDs (NodePools, NodeClaims)get, list, watch
SecretsNo access

The Read Operator has zero write permissions -- it cannot create, update, patch, or delete any resource.

Write Operator (dakr-op)

Namespace: dakr-operator

ClusterRole permissions:

ResourceVerbs
Deployments, StatefulSets, DaemonSetsget, list, watch, patch, update
HPAsget, list, watch, patch, update
Podsget, list, watch
WorkloadRecommendations, NodeGroupRecommendations (CRDs)get, list, watch, create, update, patch, delete
CheckpointRestores (CRDs)get, list, watch, create, update, patch, delete

The Write Operator can only modify Deployments, StatefulSets, DaemonSets, and HPAs -- it cannot access Secrets, ConfigMaps, or other sensitive resources.

Security Operator

Namespace: dakr-security-system

ClusterRole permissions:

ResourceVerbs
All workload typesget, list, watch
VulnerabilityReports, ConfigAuditReports (CRDs)Full CRUD
ClusterComplianceReports (CRDs)Full CRUD
Jobs (for scan execution)create, delete

The Security Operator reads workload metadata to determine what to scan. It creates Jobs to run Trivy scanners and stores results as CRDs.

Node Operator

Namespace: karpenter

ClusterRole permissions:

ResourceVerbs
NodesFull lifecycle management
Podsget, list, watch, eviction
NodePools, NodeClaims, EC2NodeClasses (CRDs)Full CRUD
Cloud provider APIsInstance launch, termination

Scheduler (dz-scheduler)

Namespace: kube-system

ClusterRole permissions:

ClusterRolePermissions
dz-scheduler-kube-schedulerCreate/patch events, manage leases, get/list/watch nodes and pods, create pod bindings, patch pod status, get/list/watch workloads and storage resources
dz-scheduler-volume-schedulerGet/list/patch/update/watch PersistentVolumes, PersistentVolumeClaims, StorageClasses
dz-scheduler-configmap-readerGet/watch/list ConfigMaps

The Scheduler runs with system-cluster-critical priority and tolerates all taints. It has standard kube-scheduler permissions plus read access to ConfigMaps for token resolution.

Auditing Permissions

Verify what permissions an operator actually has:

# Check Read Operator's ClusterRole
kubectl describe clusterrole devzero-zxporter-manager-roleresources

# Check Write Operator's ClusterRole
kubectl describe clusterrole dakr-operator-role

# Check Scheduler's ClusterRoles
kubectl describe clusterrole dz-scheduler-kube-scheduler
kubectl describe clusterrole dz-scheduler-volume-scheduler

# Test specific permissions
kubectl auth can-i get secrets --as=system:serviceaccount:devzero-zxporter:devzero-zxporter-controller-manager
# Expected: no

On this page