Skip to content

Commit 1302f4e

Browse files
authored
Update RBAC for ACM registration (#72)
1 parent 169e837 commit 1302f4e

File tree

2 files changed

+132
-4
lines changed

2 files changed

+132
-4
lines changed

config/rbac/role.yaml

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,27 @@ rules:
1515
- list
1616
- update
1717
- watch
18+
- apiGroups:
19+
- ""
20+
resources:
21+
- configmaps
22+
- secrets
23+
- serviceaccounts
24+
verbs:
25+
- create
26+
- delete
27+
- get
28+
- list
29+
- patch
30+
- update
31+
- watch
1832
- apiGroups:
1933
- ""
2034
resources:
2135
- namespaces
2236
verbs:
2337
- create
38+
- delete
2439
- get
2540
- list
2641
- patch
@@ -30,6 +45,7 @@ rules:
3045
resources:
3146
- nodes
3247
verbs:
48+
- get
3349
- list
3450
- watch
3551
- apiGroups:
@@ -49,18 +65,45 @@ rules:
4965
- serviceaccounts
5066
verbs:
5167
- create
68+
- apiGroups:
69+
- ""
70+
- events.k8s.io
71+
resources:
72+
- events
73+
verbs:
74+
- create
75+
- patch
76+
- update
5277
- apiGroups:
5378
- apiextensions.k8s.io
5479
resources:
5580
- customresourcedefinitions
5681
verbs:
5782
- create
83+
- delete
84+
- get
85+
- list
86+
- patch
87+
- update
88+
- watch
5889
- apiGroups:
5990
- apps
6091
resources:
6192
- deployments
6293
verbs:
6394
- create
95+
- delete
96+
- get
97+
- list
98+
- patch
99+
- update
100+
- watch
101+
- apiGroups:
102+
- authorization.k8s.io
103+
resources:
104+
- subjectaccessreviews
105+
verbs:
106+
- create
64107
- apiGroups:
65108
- config.openshift.io
66109
resources:
@@ -115,6 +158,17 @@ rules:
115158
- list
116159
- patch
117160
- watch
161+
- apiGroups:
162+
- coordination.k8s.io
163+
resources:
164+
- leases
165+
verbs:
166+
- create
167+
- get
168+
- list
169+
- patch
170+
- update
171+
- watch
118172
- apiGroups:
119173
- machineconfiguration.openshift.io
120174
resources:
@@ -132,9 +186,19 @@ rules:
132186
- klusterlets
133187
verbs:
134188
- create
189+
- delete
135190
- get
136191
- list
192+
- patch
193+
- update
137194
- watch
195+
- apiGroups:
196+
- operator.open-cluster-management.io
197+
resources:
198+
- klusterlets/status
199+
verbs:
200+
- patch
201+
- update
138202
- apiGroups:
139203
- operator.openshift.io
140204
resources:
@@ -172,12 +236,40 @@ rules:
172236
- clusterrolebindings
173237
verbs:
174238
- create
239+
- apiGroups:
240+
- rbac.authorization.k8s.io
241+
resources:
242+
- clusterrolebindings
243+
- rolebindings
244+
verbs:
245+
- create
246+
- delete
247+
- get
248+
- list
249+
- patch
250+
- update
251+
- watch
175252
- apiGroups:
176253
- rbac.authorization.k8s.io
177254
resources:
178255
- clusterroles
179256
verbs:
180257
- create
258+
- apiGroups:
259+
- rbac.authorization.k8s.io
260+
resources:
261+
- clusterroles
262+
- roles
263+
verbs:
264+
- bind
265+
- create
266+
- delete
267+
- escalate
268+
- get
269+
- list
270+
- patch
271+
- update
272+
- watch
181273
- apiGroups:
182274
- rhsyseng.github.io
183275
resources:
@@ -212,3 +304,11 @@ rules:
212304
- delete
213305
- list
214306
- watch
307+
- apiGroups:
308+
- work.open-cluster-management.io
309+
resources:
310+
- appliedmanifestworks
311+
verbs:
312+
- list
313+
- patch
314+
- update

internal/acm/reconcile.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,43 @@ import (
2525
"sigs.k8s.io/controller-runtime/pkg/client"
2626
)
2727

28-
// these resources are created by the 'crds.yaml' and 'import.yaml' files that are provided by ACM
2928
//+kubebuilder:rbac:groups="",resources=secrets,verbs=create;delete;get;list;watch
30-
//+kubebuilder:rbac:groups=operator.open-cluster-management.io,resources=klusterlets,verbs=create;get;list;watch
29+
//+kubebuilder:rbac:groups=operator.open-cluster-management.io,resources=klusterlets,verbs=get;list;watch
30+
31+
// these resources are created by the 'crds.yaml' file that is provided by ACM
32+
//+kubebuilder:rbac:groups=apiextensions.k8s.io,resources=customresourcedefinitions,verbs=create
33+
34+
// these resources are created by the 'import.yaml' file that is provided by ACM
3135
//+kubebuilder:rbac:groups="",resources=namespaces,verbs=create
3236
//+kubebuilder:rbac:groups="",resources=serviceaccounts,verbs=create
33-
//+kubebuilder:rbac:groups=apps,resources=deployments,verbs=create
3437
//+kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=clusterroles,verbs=create
3538
//+kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=clusterrolebindings,verbs=create
36-
//+kubebuilder:rbac:groups=apiextensions.k8s.io,resources=customresourcedefinitions,verbs=create
39+
//+kubebuilder:rbac:groups=apps,resources=deployments,verbs=create
40+
//+kubebuilder:rbac:groups="",resources=secrets,verbs=create
41+
//+kubebuilder:rbac:groups=operator.open-cluster-management.io,resources=klusterlets,verbs=create
42+
43+
// these permissions are granted by the ClusterRoles created by import.yaml
44+
// since an object cannot grant permissions that it doesn't have, the operator needs these as well
45+
// ClusterRole/klusterlet
46+
//+kubebuilder:rbac:groups="",resources=secrets;configmaps;serviceaccounts,verbs=create;get;list;update;watch;patch;delete
47+
//+kubebuilder:rbac:groups=coordination.k8s.io,resources=leases,verbs=create;get;list;update;watch;patch
48+
//+kubebuilder:rbac:groups=authorization.k8s.io,resources=subjectaccessreviews,verbs=create
49+
//+kubebuilder:rbac:groups="",resources=namespaces,verbs=create;get;list;watch;delete
50+
//+kubebuilder:rbac:groups="",resources=nodes,verbs=get;list;watch
51+
//+kubebuilder:rbac:groups="";events.k8s.io,resources=events,verbs=create;patch;update
52+
//+kubebuilder:rbac:groups=apps,resources=deployments,verbs=create;get;list;update;watch;patch;delete
53+
//+kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=clusterrolebindings;rolebindings,verbs=create;get;list;update;watch;patch;delete
54+
//+kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=clusterroles;roles,verbs=create;get;list;update;watch;patch;delete;escalate;bind
55+
//+kubebuilder:rbac:groups=apiextensions.k8s.io,resources=customresourcedefinitions,verbs=create;get;list;update;watch;patch;delete
56+
//+kubebuilder:rbac:groups=operator.open-cluster-management.io,resources=klusterlets,verbs=get;list;watch;update;patch;delete
57+
//+kubebuilder:rbac:groups=operator.open-cluster-management.io,resources=klusterlets/status,verbs=update;patch
58+
//+kubebuilder:rbac:groups=work.open-cluster-management.io,resources=appliedmanifestworks,verbs=list;update;patch
59+
60+
// ClusterRole/klusterlet-bootstrap-kubeconfig
61+
//+kubebuilder:rbac:groups="",resources=secrets,verbs=get;update
62+
63+
// ClusterRole/open-cluster-management:klusterlet-admin-aggregate-clusterrole
64+
//+kubebuilder:rbac:groups=operator.open-cluster-management.io,resources=klusterlets,verbs=get;list;watch;create;update;patch;delete
3765

3866
// returns nil if the Klusterlet is Available, error otherwise
3967
func checkKlusterlet(ctx context.Context, c client.Client, logger logr.Logger) error {

0 commit comments

Comments
 (0)