Skip to content

Commit 88d1e3a

Browse files
lpiwowarclaude
andcommitted
Remove unnecessary RBAC verbs
Applied principle of least privilege across all RBAC markers in openstacklightspeed_controller.go. Verbs were removed where code analysis confirmed they are never exercised by the controller or the controller-runtime framework. ClusterRole changes: - openstacklightspeeds: removed create, delete, update; get, list, watch, patch are sufficient for normal reconciliation - openstacklightspeeds/status: removed get, update; only patch is needed to update the status subresource - clusterroles: removed update, delete; CreateOrPatch uses get/create/patch, bulk removal uses deletecollection (DeleteAllOf) - clusterrolebindings: same reasoning as clusterroles - clusterversions: removed watch only; list is retained because the operator grants list to the app-server SAR ClusterRole and cannot grant permissions it does not hold - consoleplugins: removed update; get/list/watch/create/patch/delete cover all actual operations Role (namespaced) changes: - clusterserviceversions: removed patch; only update and delete are needed for owner reference and uninstall - networkpolicies: removed update; CreateOrPatch uses get/create/patch - deployments: removed update, delete; CreateOrPatch uses get/create/patch; owned resources are GC'd by Kubernetes - configmaps: removed update; get/list/watch/create/patch/delete cover all actual operations (one ConfigMap is explicitly deleted on toggle) - secrets: removed update, delete; bulk removal uses deletecollection (DeleteAllOf); owned secrets are GC'd by Kubernetes - services: removed update, delete; CreateOrPatch uses get/create/patch; owned resources are GC'd by Kubernetes - persistentvolumeclaims: removed update; get/list/watch/create/patch cover all actual operations; PVCs are intentionally never deleted Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent e770335 commit 88d1e3a

3 files changed

Lines changed: 19 additions & 71 deletions

File tree

bundle/manifests/openstack-lightspeed-operator.clusterserviceversion.yaml

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ metadata:
2525
]
2626
capabilities: Basic Install
2727
categories: AI/Machine Learning
28-
createdAt: "2026-07-13T09:32:13Z"
28+
createdAt: "2026-07-21T15:55:56Z"
2929
description: AI-powered virtual assistant for Red Hat OpenStack Services on OpenShift
3030
features.operators.openshift.io/cnf: "false"
3131
features.operators.openshift.io/cni: "false"
@@ -177,7 +177,6 @@ spec:
177177
verbs:
178178
- get
179179
- list
180-
- watch
181180
- apiGroups:
182181
- console.openshift.io
183182
resources:
@@ -188,19 +187,15 @@ spec:
188187
- get
189188
- list
190189
- patch
191-
- update
192190
- watch
193191
- apiGroups:
194192
- lightspeed.openstack.org
195193
resources:
196194
- openstacklightspeeds
197195
verbs:
198-
- create
199-
- delete
200196
- get
201197
- list
202198
- patch
203-
- update
204199
- watch
205200
- apiGroups:
206201
- lightspeed.openstack.org
@@ -213,9 +208,7 @@ spec:
213208
resources:
214209
- openstacklightspeeds/status
215210
verbs:
216-
- get
217211
- patch
218-
- update
219212
- apiGroups:
220213
- operator.openshift.io
221214
resources:
@@ -240,12 +233,10 @@ spec:
240233
- clusterroles
241234
verbs:
242235
- create
243-
- delete
244236
- deletecollection
245237
- get
246238
- list
247239
- patch
248-
- update
249240
- watch
250241
- apiGroups:
251242
- authentication.k8s.io
@@ -380,60 +371,45 @@ spec:
380371
- ""
381372
resources:
382373
- configmaps
383-
- services
384374
verbs:
385375
- create
386376
- delete
387377
- get
388378
- list
389379
- patch
390-
- update
391380
- watch
392381
- apiGroups:
393382
- ""
394383
resources:
395384
- persistentvolumeclaims
385+
- serviceaccounts
386+
- services
396387
verbs:
397388
- create
398389
- get
399390
- list
400391
- patch
401-
- update
402392
- watch
403393
- apiGroups:
404394
- ""
405395
resources:
406396
- secrets
407397
verbs:
408398
- create
409-
- delete
410399
- deletecollection
411400
- get
412401
- list
413402
- patch
414-
- update
415-
- watch
416-
- apiGroups:
417-
- ""
418-
resources:
419-
- serviceaccounts
420-
verbs:
421-
- create
422-
- get
423-
- list
424-
- patch
425403
- watch
426404
- apiGroups:
427405
- apps
428406
resources:
429407
- deployments
430408
verbs:
431409
- create
432-
- delete
433410
- get
434411
- list
435412
- patch
436-
- update
437413
- watch
438414
- apiGroups:
439415
- networking.k8s.io
@@ -444,15 +420,13 @@ spec:
444420
- get
445421
- list
446422
- patch
447-
- update
448423
- watch
449424
- apiGroups:
450425
- operators.coreos.com
451426
resources:
452427
- clusterserviceversions
453428
verbs:
454429
- delete
455-
- patch
456430
- update
457431
serviceAccountName: openstack-lightspeed-operator-controller-manager
458432
strategy: deployment

config/rbac/role.yaml

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ rules:
1919
verbs:
2020
- get
2121
- list
22-
- watch
2322
- apiGroups:
2423
- console.openshift.io
2524
resources:
@@ -30,19 +29,15 @@ rules:
3029
- get
3130
- list
3231
- patch
33-
- update
3432
- watch
3533
- apiGroups:
3634
- lightspeed.openstack.org
3735
resources:
3836
- openstacklightspeeds
3937
verbs:
40-
- create
41-
- delete
4238
- get
4339
- list
4440
- patch
45-
- update
4641
- watch
4742
- apiGroups:
4843
- lightspeed.openstack.org
@@ -55,9 +50,7 @@ rules:
5550
resources:
5651
- openstacklightspeeds/status
5752
verbs:
58-
- get
5953
- patch
60-
- update
6154
- apiGroups:
6255
- operator.openshift.io
6356
resources:
@@ -82,12 +75,10 @@ rules:
8275
- clusterroles
8376
verbs:
8477
- create
85-
- delete
8678
- deletecollection
8779
- get
8880
- list
8981
- patch
90-
- update
9182
- watch
9283
---
9384
apiVersion: rbac.authorization.k8s.io/v1
@@ -100,60 +91,45 @@ rules:
10091
- ""
10192
resources:
10293
- configmaps
103-
- services
10494
verbs:
10595
- create
10696
- delete
10797
- get
10898
- list
10999
- patch
110-
- update
111100
- watch
112101
- apiGroups:
113102
- ""
114103
resources:
115104
- persistentvolumeclaims
105+
- serviceaccounts
106+
- services
116107
verbs:
117108
- create
118109
- get
119110
- list
120111
- patch
121-
- update
122112
- watch
123113
- apiGroups:
124114
- ""
125115
resources:
126116
- secrets
127117
verbs:
128118
- create
129-
- delete
130119
- deletecollection
131120
- get
132121
- list
133122
- patch
134-
- update
135-
- watch
136-
- apiGroups:
137-
- ""
138-
resources:
139-
- serviceaccounts
140-
verbs:
141-
- create
142-
- get
143-
- list
144-
- patch
145123
- watch
146124
- apiGroups:
147125
- apps
148126
resources:
149127
- deployments
150128
verbs:
151129
- create
152-
- delete
153130
- get
154131
- list
155132
- patch
156-
- update
157133
- watch
158134
- apiGroups:
159135
- networking.k8s.io
@@ -164,13 +140,11 @@ rules:
164140
- get
165141
- list
166142
- patch
167-
- update
168143
- watch
169144
- apiGroups:
170145
- operators.coreos.com
171146
resources:
172147
- clusterserviceversions
173148
verbs:
174149
- delete
175-
- patch
176150
- update

internal/controller/openstacklightspeed_controller.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,24 +54,24 @@ func (r *OpenStackLightspeedReconciler) GetLogger(ctx context.Context) logr.Logg
5454
return log.FromContext(ctx).WithName("Controllers").WithName("OpenStackLightspeed")
5555
}
5656

57-
// +kubebuilder:rbac:groups=lightspeed.openstack.org,resources=openstacklightspeeds,verbs=get;list;watch;create;update;patch;delete
58-
// +kubebuilder:rbac:groups=lightspeed.openstack.org,resources=openstacklightspeeds/status,verbs=get;update;patch
57+
// +kubebuilder:rbac:groups=lightspeed.openstack.org,resources=openstacklightspeeds,verbs=get;list;watch;patch
58+
// +kubebuilder:rbac:groups=lightspeed.openstack.org,resources=openstacklightspeeds/status,verbs=patch
5959
// +kubebuilder:rbac:groups=lightspeed.openstack.org,resources=openstacklightspeeds/finalizers,verbs=update
60-
// +kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=clusterroles,verbs=get;list;watch;create;patch;update;delete;deletecollection
61-
// +kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=clusterrolebindings,verbs=get;list;watch;create;patch;update;delete;deletecollection
60+
// +kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=clusterroles,verbs=get;list;watch;create;patch;deletecollection
61+
// +kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=clusterrolebindings,verbs=get;list;watch;create;patch;deletecollection
6262
// +kubebuilder:rbac:groups=operators.coreos.com,resources=clusterserviceversions,verbs=get;list;watch
63-
// +kubebuilder:rbac:groups=operators.coreos.com,resources=clusterserviceversions,namespace=openstack-lightspeed,verbs=update;patch;delete
64-
// +kubebuilder:rbac:groups=config.openshift.io,resources=clusterversions,verbs=get;list;watch
63+
// +kubebuilder:rbac:groups=operators.coreos.com,resources=clusterserviceversions,namespace=openstack-lightspeed,verbs=update;delete
64+
// +kubebuilder:rbac:groups=config.openshift.io,resources=clusterversions,verbs=get;list
6565
// +kubebuilder:rbac:groups="",resources=secrets,resourceNames=pull-secret,verbs=get
66-
// +kubebuilder:rbac:groups=networking.k8s.io,resources=networkpolicies,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch;update
67-
// +kubebuilder:rbac:groups=apps,resources=deployments,namespace=openstack-lightspeed,verbs=get;list;watch;create;update;patch;delete
68-
// +kubebuilder:rbac:groups="",resources=configmaps,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch;update;delete
69-
// +kubebuilder:rbac:groups="",resources=secrets,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch;update;delete;deletecollection
70-
// +kubebuilder:rbac:groups="",resources=services,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch;update;delete
66+
// +kubebuilder:rbac:groups=networking.k8s.io,resources=networkpolicies,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch
67+
// +kubebuilder:rbac:groups=apps,resources=deployments,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch
68+
// +kubebuilder:rbac:groups="",resources=configmaps,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch;delete
69+
// +kubebuilder:rbac:groups="",resources=secrets,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch;deletecollection
70+
// +kubebuilder:rbac:groups="",resources=services,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch
7171
// +kubebuilder:rbac:groups="",resources=serviceaccounts,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch
72-
// +kubebuilder:rbac:groups=console.openshift.io,resources=consoleplugins,verbs=get;list;watch;create;update;patch;delete
73-
// +kubebuilder:rbac:groups=operator.openshift.io,resources=consoles,verbs=watch;list;get;update
74-
// +kubebuilder:rbac:groups="",resources=persistentvolumeclaims,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch;update
72+
// +kubebuilder:rbac:groups=console.openshift.io,resources=consoleplugins,verbs=get;list;watch;create;patch;delete
73+
// +kubebuilder:rbac:groups=operator.openshift.io,resources=consoles,verbs=get;list;watch;update
74+
// +kubebuilder:rbac:groups="",resources=persistentvolumeclaims,namespace=openstack-lightspeed,verbs=get;list;watch;create;patch
7575

7676
func (r *OpenStackLightspeedReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
7777
Log := r.GetLogger(ctx)

0 commit comments

Comments
 (0)