Skip to content

Commit 3499f12

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. 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 list, update, delete; CreateOrPatch uses get/create/patch, bulk removal uses deletecollection (DeleteAllOf) - clusterrolebindings: same reasoning as clusterroles - clusterversions: removed list, watch; only a single Get is performed to detect the OCP version - consoleplugins: removed list, update; get/create/patch/delete/watch cover all actual operations Role (namespaced) changes: - clusterserviceversions: removed patch; only update and delete are needed for owner reference and uninstall - networkpolicies: removed list, update; CreateOrPatch uses get/create/patch; owned resources are GC'd by Kubernetes - deployments: removed list, update, delete; CreateOrPatch uses get/create/patch; owned resources are GC'd by Kubernetes - configmaps: removed list, update; get/create/patch/delete cover all actual operations (one ConfigMap is explicitly deleted on toggle) - secrets: removed list, update, delete; bulk removal uses deletecollection (DeleteAllOf); owned secrets are GC'd - services: removed list, update, delete; CreateOrPatch uses get/create/patch; owned resources are GC'd by Kubernetes - consoles: removed list, watch; only Get and Update are called - persistentvolumeclaims: removed list, update; get/create/patch/watch cover all actual operations; PVCs are intentionally never deleted Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent e770335 commit 3499f12

3 files changed

Lines changed: 17 additions & 71 deletions

File tree

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

Lines changed: 2 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-21T13:42:49Z"
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"
@@ -176,8 +176,6 @@ spec:
176176
- clusterversions
177177
verbs:
178178
- get
179-
- list
180-
- watch
181179
- apiGroups:
182180
- console.openshift.io
183181
resources:
@@ -186,21 +184,16 @@ spec:
186184
- create
187185
- delete
188186
- get
189-
- list
190187
- patch
191-
- update
192188
- watch
193189
- apiGroups:
194190
- lightspeed.openstack.org
195191
resources:
196192
- openstacklightspeeds
197193
verbs:
198-
- create
199-
- delete
200194
- get
201195
- list
202196
- patch
203-
- update
204197
- watch
205198
- apiGroups:
206199
- lightspeed.openstack.org
@@ -213,18 +206,14 @@ spec:
213206
resources:
214207
- openstacklightspeeds/status
215208
verbs:
216-
- get
217209
- patch
218-
- update
219210
- apiGroups:
220211
- operator.openshift.io
221212
resources:
222213
- consoles
223214
verbs:
224215
- get
225-
- list
226216
- update
227-
- watch
228217
- apiGroups:
229218
- operators.coreos.com
230219
resources:
@@ -240,12 +229,9 @@ spec:
240229
- clusterroles
241230
verbs:
242231
- create
243-
- delete
244232
- deletecollection
245233
- get
246-
- list
247234
- patch
248-
- update
249235
- watch
250236
- apiGroups:
251237
- authentication.k8s.io
@@ -380,38 +366,31 @@ spec:
380366
- ""
381367
resources:
382368
- configmaps
383-
- services
384369
verbs:
385370
- create
386371
- delete
387372
- get
388-
- list
389373
- patch
390-
- update
391374
- watch
392375
- apiGroups:
393376
- ""
394377
resources:
395378
- persistentvolumeclaims
379+
- services
396380
verbs:
397381
- create
398382
- get
399-
- list
400383
- patch
401-
- update
402384
- watch
403385
- apiGroups:
404386
- ""
405387
resources:
406388
- secrets
407389
verbs:
408390
- create
409-
- delete
410391
- deletecollection
411392
- get
412-
- list
413393
- patch
414-
- update
415394
- watch
416395
- apiGroups:
417396
- ""
@@ -429,11 +408,8 @@ spec:
429408
- deployments
430409
verbs:
431410
- create
432-
- delete
433411
- get
434-
- list
435412
- patch
436-
- update
437413
- watch
438414
- apiGroups:
439415
- networking.k8s.io
@@ -442,17 +418,14 @@ spec:
442418
verbs:
443419
- create
444420
- get
445-
- list
446421
- patch
447-
- update
448422
- watch
449423
- apiGroups:
450424
- operators.coreos.com
451425
resources:
452426
- clusterserviceversions
453427
verbs:
454428
- delete
455-
- patch
456429
- update
457430
serviceAccountName: openstack-lightspeed-operator-controller-manager
458431
strategy: deployment

config/rbac/role.yaml

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ rules:
1818
- clusterversions
1919
verbs:
2020
- get
21-
- list
22-
- watch
2321
- apiGroups:
2422
- console.openshift.io
2523
resources:
@@ -28,21 +26,16 @@ rules:
2826
- create
2927
- delete
3028
- get
31-
- list
3229
- patch
33-
- update
3430
- watch
3531
- apiGroups:
3632
- lightspeed.openstack.org
3733
resources:
3834
- openstacklightspeeds
3935
verbs:
40-
- create
41-
- delete
4236
- get
4337
- list
4438
- patch
45-
- update
4639
- watch
4740
- apiGroups:
4841
- lightspeed.openstack.org
@@ -55,18 +48,14 @@ rules:
5548
resources:
5649
- openstacklightspeeds/status
5750
verbs:
58-
- get
5951
- patch
60-
- update
6152
- apiGroups:
6253
- operator.openshift.io
6354
resources:
6455
- consoles
6556
verbs:
6657
- get
67-
- list
6858
- update
69-
- watch
7059
- apiGroups:
7160
- operators.coreos.com
7261
resources:
@@ -82,12 +71,9 @@ rules:
8271
- clusterroles
8372
verbs:
8473
- create
85-
- delete
8674
- deletecollection
8775
- get
88-
- list
8976
- patch
90-
- update
9177
- watch
9278
---
9379
apiVersion: rbac.authorization.k8s.io/v1
@@ -100,38 +86,31 @@ rules:
10086
- ""
10187
resources:
10288
- configmaps
103-
- services
10489
verbs:
10590
- create
10691
- delete
10792
- get
108-
- list
10993
- patch
110-
- update
11194
- watch
11295
- apiGroups:
11396
- ""
11497
resources:
11598
- persistentvolumeclaims
99+
- services
116100
verbs:
117101
- create
118102
- get
119-
- list
120103
- patch
121-
- update
122104
- watch
123105
- apiGroups:
124106
- ""
125107
resources:
126108
- secrets
127109
verbs:
128110
- create
129-
- delete
130111
- deletecollection
131112
- get
132-
- list
133113
- patch
134-
- update
135114
- watch
136115
- apiGroups:
137116
- ""
@@ -149,11 +128,8 @@ rules:
149128
- deployments
150129
verbs:
151130
- create
152-
- delete
153131
- get
154-
- list
155132
- patch
156-
- update
157133
- watch
158134
- apiGroups:
159135
- networking.k8s.io
@@ -162,15 +138,12 @@ rules:
162138
verbs:
163139
- create
164140
- get
165-
- list
166141
- patch
167-
- update
168142
- watch
169143
- apiGroups:
170144
- operators.coreos.com
171145
resources:
172146
- clusterserviceversions
173147
verbs:
174148
- delete
175-
- patch
176149
- 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;watch;create;patch;deletecollection
61+
// +kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=clusterrolebindings,verbs=get;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
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;watch;create;patch
67+
// +kubebuilder:rbac:groups=apps,resources=deployments,namespace=openstack-lightspeed,verbs=get;watch;create;patch
68+
// +kubebuilder:rbac:groups="",resources=configmaps,namespace=openstack-lightspeed,verbs=get;watch;create;patch;delete
69+
// +kubebuilder:rbac:groups="",resources=secrets,namespace=openstack-lightspeed,verbs=get;watch;create;patch;deletecollection
70+
// +kubebuilder:rbac:groups="",resources=services,namespace=openstack-lightspeed,verbs=get;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;watch;create;patch;delete
73+
// +kubebuilder:rbac:groups=operator.openshift.io,resources=consoles,verbs=get;update
74+
// +kubebuilder:rbac:groups="",resources=persistentvolumeclaims,namespace=openstack-lightspeed,verbs=get;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)