blob: 4910e72641700e91e091d3c38968509152a758d7 [file] [log] [blame]
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +04001{{- if .Values.global.rbac.create }}
2apiVersion: rbac.authorization.k8s.io/v1
3kind: Role
4metadata:
5 name: {{ template "cert-manager.fullname" . }}:leaderelection
6 namespace: {{ .Values.global.leaderElection.namespace }}
7 labels:
8 app: {{ include "cert-manager.name" . }}
9 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
10 app.kubernetes.io/instance: {{ .Release.Name }}
11 app.kubernetes.io/component: "controller"
12 {{- include "labels" . | nindent 4 }}
13rules:
14 - apiGroups: ["coordination.k8s.io"]
15 resources: ["leases"]
16 resourceNames: ["cert-manager-controller"]
17 verbs: ["get", "update", "patch"]
18 - apiGroups: ["coordination.k8s.io"]
19 resources: ["leases"]
20 verbs: ["create"]
21
22---
23
24# grant cert-manager permission to manage the leaderelection configmap in the
25# leader election namespace
26apiVersion: rbac.authorization.k8s.io/v1
27kind: RoleBinding
28metadata:
29 name: {{ include "cert-manager.fullname" . }}:leaderelection
30 namespace: {{ .Values.global.leaderElection.namespace }}
31 labels:
32 app: {{ include "cert-manager.name" . }}
33 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
34 app.kubernetes.io/instance: {{ .Release.Name }}
35 app.kubernetes.io/component: "controller"
36 {{- include "labels" . | nindent 4 }}
37roleRef:
38 apiGroup: rbac.authorization.k8s.io
39 kind: Role
40 name: {{ template "cert-manager.fullname" . }}:leaderelection
41subjects:
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +040042 - kind: ServiceAccount
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +040043 name: {{ template "cert-manager.serviceAccountName" . }}
44 namespace: {{ include "cert-manager.namespace" . }}
45
46---
47
48# Issuer controller role
49apiVersion: rbac.authorization.k8s.io/v1
50kind: ClusterRole
51metadata:
52 name: {{ template "cert-manager.fullname" . }}-controller-issuers
53 labels:
54 app: {{ include "cert-manager.name" . }}
55 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
56 app.kubernetes.io/instance: {{ .Release.Name }}
57 app.kubernetes.io/component: "controller"
58 {{- include "labels" . | nindent 4 }}
59rules:
60 - apiGroups: ["cert-manager.io"]
61 resources: ["issuers", "issuers/status"]
62 verbs: ["update", "patch"]
63 - apiGroups: ["cert-manager.io"]
64 resources: ["issuers"]
65 verbs: ["get", "list", "watch"]
66 - apiGroups: [""]
67 resources: ["secrets"]
68 verbs: ["get", "list", "watch", "create", "update", "delete"]
69 - apiGroups: [""]
70 resources: ["events"]
71 verbs: ["create", "patch"]
72---
73
74# ClusterIssuer controller role
75apiVersion: rbac.authorization.k8s.io/v1
76kind: ClusterRole
77metadata:
78 name: {{ template "cert-manager.fullname" . }}-controller-clusterissuers
79 labels:
80 app: {{ include "cert-manager.name" . }}
81 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
82 app.kubernetes.io/instance: {{ .Release.Name }}
83 app.kubernetes.io/component: "controller"
84 {{- include "labels" . | nindent 4 }}
85rules:
86 - apiGroups: ["cert-manager.io"]
87 resources: ["clusterissuers", "clusterissuers/status"]
88 verbs: ["update", "patch"]
89 - apiGroups: ["cert-manager.io"]
90 resources: ["clusterissuers"]
91 verbs: ["get", "list", "watch"]
92 - apiGroups: [""]
93 resources: ["secrets"]
94 verbs: ["get", "list", "watch", "create", "update", "delete"]
95 - apiGroups: [""]
96 resources: ["events"]
97 verbs: ["create", "patch"]
98
99---
100
101# Certificates controller role
102apiVersion: rbac.authorization.k8s.io/v1
103kind: ClusterRole
104metadata:
105 name: {{ template "cert-manager.fullname" . }}-controller-certificates
106 labels:
107 app: {{ include "cert-manager.name" . }}
108 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
109 app.kubernetes.io/instance: {{ .Release.Name }}
110 app.kubernetes.io/component: "controller"
111 {{- include "labels" . | nindent 4 }}
112rules:
113 - apiGroups: ["cert-manager.io"]
114 resources: ["certificates", "certificates/status", "certificaterequests", "certificaterequests/status"]
115 verbs: ["update", "patch"]
116 - apiGroups: ["cert-manager.io"]
117 resources: ["certificates", "certificaterequests", "clusterissuers", "issuers"]
118 verbs: ["get", "list", "watch"]
119 # We require these rules to support users with the OwnerReferencesPermissionEnforcement
120 # admission controller enabled:
121 # https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement
122 - apiGroups: ["cert-manager.io"]
123 resources: ["certificates/finalizers", "certificaterequests/finalizers"]
124 verbs: ["update"]
125 - apiGroups: ["acme.cert-manager.io"]
126 resources: ["orders"]
127 verbs: ["create", "delete", "get", "list", "watch"]
128 - apiGroups: [""]
129 resources: ["secrets"]
130 verbs: ["get", "list", "watch", "create", "update", "delete", "patch"]
131 - apiGroups: [""]
132 resources: ["events"]
133 verbs: ["create", "patch"]
134
135---
136
137# Orders controller role
138apiVersion: rbac.authorization.k8s.io/v1
139kind: ClusterRole
140metadata:
141 name: {{ template "cert-manager.fullname" . }}-controller-orders
142 labels:
143 app: {{ include "cert-manager.name" . }}
144 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
145 app.kubernetes.io/instance: {{ .Release.Name }}
146 app.kubernetes.io/component: "controller"
147 {{- include "labels" . | nindent 4 }}
148rules:
149 - apiGroups: ["acme.cert-manager.io"]
150 resources: ["orders", "orders/status"]
151 verbs: ["update", "patch"]
152 - apiGroups: ["acme.cert-manager.io"]
153 resources: ["orders", "challenges"]
154 verbs: ["get", "list", "watch"]
155 - apiGroups: ["cert-manager.io"]
156 resources: ["clusterissuers", "issuers"]
157 verbs: ["get", "list", "watch"]
158 - apiGroups: ["acme.cert-manager.io"]
159 resources: ["challenges"]
160 verbs: ["create", "delete"]
161 # We require these rules to support users with the OwnerReferencesPermissionEnforcement
162 # admission controller enabled:
163 # https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement
164 - apiGroups: ["acme.cert-manager.io"]
165 resources: ["orders/finalizers"]
166 verbs: ["update"]
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400167 - apiGroups: ["cert-manager.io"]
168 resources: ["clusterissuers/finalizers", "issuers/finalizers"]
169 verbs: ["update"]
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400170 - apiGroups: [""]
171 resources: ["secrets"]
172 verbs: ["get", "list", "watch"]
173 - apiGroups: [""]
174 resources: ["events"]
175 verbs: ["create", "patch"]
176
177---
178
179# Challenges controller role
180apiVersion: rbac.authorization.k8s.io/v1
181kind: ClusterRole
182metadata:
183 name: {{ template "cert-manager.fullname" . }}-controller-challenges
184 labels:
185 app: {{ include "cert-manager.name" . }}
186 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
187 app.kubernetes.io/instance: {{ .Release.Name }}
188 app.kubernetes.io/component: "controller"
189 {{- include "labels" . | nindent 4 }}
190rules:
191 # Use to update challenge resource status
192 - apiGroups: ["acme.cert-manager.io"]
193 resources: ["challenges", "challenges/status"]
194 verbs: ["update", "patch"]
195 # Used to watch challenge resources
196 - apiGroups: ["acme.cert-manager.io"]
197 resources: ["challenges"]
198 verbs: ["get", "list", "watch"]
199 # Used to watch challenges, issuer and clusterissuer resources
200 - apiGroups: ["cert-manager.io"]
201 resources: ["issuers", "clusterissuers"]
202 verbs: ["get", "list", "watch"]
203 # Need to be able to retrieve ACME account private key to complete challenges
204 - apiGroups: [""]
205 resources: ["secrets"]
206 verbs: ["get", "list", "watch"]
207 # Used to create events
208 - apiGroups: [""]
209 resources: ["events"]
210 verbs: ["create", "patch"]
211 # HTTP01 rules
212 - apiGroups: [""]
213 resources: ["pods", "services"]
214 verbs: ["get", "list", "watch", "create", "delete"]
215 - apiGroups: ["networking.k8s.io"]
216 resources: ["ingresses"]
217 verbs: ["get", "list", "watch", "create", "delete", "update"]
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400218 - apiGroups: ["gateway.networking.k8s.io"]
219 resources: ["httproutes"]
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400220 verbs: ["get", "list", "watch", "create", "delete", "update"]
221 # We require the ability to specify a custom hostname when we are creating
222 # new ingress resources.
223 # See: https://github.com/openshift/origin/blob/21f191775636f9acadb44fa42beeb4f75b255532/pkg/route/apiserver/admission/ingress_admission.go#L84-L148
224 - apiGroups: ["route.openshift.io"]
225 resources: ["routes/custom-host"]
226 verbs: ["create"]
227 # We require these rules to support users with the OwnerReferencesPermissionEnforcement
228 # admission controller enabled:
229 # https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement
230 - apiGroups: ["acme.cert-manager.io"]
231 resources: ["challenges/finalizers"]
232 verbs: ["update"]
233 # DNS01 rules (duplicated above)
234 - apiGroups: [""]
235 resources: ["secrets"]
236 verbs: ["get", "list", "watch"]
237
238---
239
240# ingress-shim controller role
241apiVersion: rbac.authorization.k8s.io/v1
242kind: ClusterRole
243metadata:
244 name: {{ template "cert-manager.fullname" . }}-controller-ingress-shim
245 labels:
246 app: {{ include "cert-manager.name" . }}
247 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
248 app.kubernetes.io/instance: {{ .Release.Name }}
249 app.kubernetes.io/component: "controller"
250 {{- include "labels" . | nindent 4 }}
251rules:
252 - apiGroups: ["cert-manager.io"]
253 resources: ["certificates", "certificaterequests"]
254 verbs: ["create", "update", "delete"]
255 - apiGroups: ["cert-manager.io"]
256 resources: ["certificates", "certificaterequests", "issuers", "clusterissuers"]
257 verbs: ["get", "list", "watch"]
258 - apiGroups: ["networking.k8s.io"]
259 resources: ["ingresses"]
260 verbs: ["get", "list", "watch"]
261 # We require these rules to support users with the OwnerReferencesPermissionEnforcement
262 # admission controller enabled:
263 # https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement
264 - apiGroups: ["networking.k8s.io"]
265 resources: ["ingresses/finalizers"]
266 verbs: ["update"]
267 - apiGroups: ["gateway.networking.k8s.io"]
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400268 resources: ["gateways", "httproutes", "listenersets"]
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400269 verbs: ["get", "list", "watch"]
270 - apiGroups: ["gateway.networking.k8s.io"]
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400271 resources: ["gateways/finalizers", "httproutes/finalizers", "listenersets/finalizers"]
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400272 verbs: ["update"]
273 - apiGroups: [""]
274 resources: ["events"]
275 verbs: ["create", "patch"]
276
277---
278
279apiVersion: rbac.authorization.k8s.io/v1
280kind: ClusterRoleBinding
281metadata:
282 name: {{ template "cert-manager.fullname" . }}-controller-issuers
283 labels:
284 app: {{ include "cert-manager.name" . }}
285 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
286 app.kubernetes.io/instance: {{ .Release.Name }}
287 app.kubernetes.io/component: "controller"
288 {{- include "labels" . | nindent 4 }}
289roleRef:
290 apiGroup: rbac.authorization.k8s.io
291 kind: ClusterRole
292 name: {{ template "cert-manager.fullname" . }}-controller-issuers
293subjects:
294 - name: {{ template "cert-manager.serviceAccountName" . }}
295 namespace: {{ include "cert-manager.namespace" . }}
296 kind: ServiceAccount
297
298---
299
300apiVersion: rbac.authorization.k8s.io/v1
301kind: ClusterRoleBinding
302metadata:
303 name: {{ template "cert-manager.fullname" . }}-controller-clusterissuers
304 labels:
305 app: {{ include "cert-manager.name" . }}
306 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
307 app.kubernetes.io/instance: {{ .Release.Name }}
308 app.kubernetes.io/component: "controller"
309 {{- include "labels" . | nindent 4 }}
310roleRef:
311 apiGroup: rbac.authorization.k8s.io
312 kind: ClusterRole
313 name: {{ template "cert-manager.fullname" . }}-controller-clusterissuers
314subjects:
315 - name: {{ template "cert-manager.serviceAccountName" . }}
316 namespace: {{ include "cert-manager.namespace" . }}
317 kind: ServiceAccount
318
319---
320
321apiVersion: rbac.authorization.k8s.io/v1
322kind: ClusterRoleBinding
323metadata:
324 name: {{ template "cert-manager.fullname" . }}-controller-certificates
325 labels:
326 app: {{ include "cert-manager.name" . }}
327 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
328 app.kubernetes.io/instance: {{ .Release.Name }}
329 app.kubernetes.io/component: "controller"
330 {{- include "labels" . | nindent 4 }}
331roleRef:
332 apiGroup: rbac.authorization.k8s.io
333 kind: ClusterRole
334 name: {{ template "cert-manager.fullname" . }}-controller-certificates
335subjects:
336 - name: {{ template "cert-manager.serviceAccountName" . }}
337 namespace: {{ include "cert-manager.namespace" . }}
338 kind: ServiceAccount
339
340---
341
342apiVersion: rbac.authorization.k8s.io/v1
343kind: ClusterRoleBinding
344metadata:
345 name: {{ template "cert-manager.fullname" . }}-controller-orders
346 labels:
347 app: {{ include "cert-manager.name" . }}
348 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
349 app.kubernetes.io/instance: {{ .Release.Name }}
350 app.kubernetes.io/component: "controller"
351 {{- include "labels" . | nindent 4 }}
352roleRef:
353 apiGroup: rbac.authorization.k8s.io
354 kind: ClusterRole
355 name: {{ template "cert-manager.fullname" . }}-controller-orders
356subjects:
357 - name: {{ template "cert-manager.serviceAccountName" . }}
358 namespace: {{ include "cert-manager.namespace" . }}
359 kind: ServiceAccount
360
361---
362
363apiVersion: rbac.authorization.k8s.io/v1
364kind: ClusterRoleBinding
365metadata:
366 name: {{ template "cert-manager.fullname" . }}-controller-challenges
367 labels:
368 app: {{ include "cert-manager.name" . }}
369 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
370 app.kubernetes.io/instance: {{ .Release.Name }}
371 app.kubernetes.io/component: "controller"
372 {{- include "labels" . | nindent 4 }}
373roleRef:
374 apiGroup: rbac.authorization.k8s.io
375 kind: ClusterRole
376 name: {{ template "cert-manager.fullname" . }}-controller-challenges
377subjects:
378 - name: {{ template "cert-manager.serviceAccountName" . }}
379 namespace: {{ include "cert-manager.namespace" . }}
380 kind: ServiceAccount
381
382---
383
384apiVersion: rbac.authorization.k8s.io/v1
385kind: ClusterRoleBinding
386metadata:
387 name: {{ template "cert-manager.fullname" . }}-controller-ingress-shim
388 labels:
389 app: {{ include "cert-manager.name" . }}
390 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
391 app.kubernetes.io/instance: {{ .Release.Name }}
392 app.kubernetes.io/component: "controller"
393 {{- include "labels" . | nindent 4 }}
394roleRef:
395 apiGroup: rbac.authorization.k8s.io
396 kind: ClusterRole
397 name: {{ template "cert-manager.fullname" . }}-controller-ingress-shim
398subjects:
399 - name: {{ template "cert-manager.serviceAccountName" . }}
400 namespace: {{ include "cert-manager.namespace" . }}
401 kind: ServiceAccount
402
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400403{{- if .Values.global.rbac.aggregateClusterRoles }}
404---
405
406apiVersion: rbac.authorization.k8s.io/v1
407kind: ClusterRole
408metadata:
409 name: {{ template "cert-manager.fullname" . }}-cluster-view
410 labels:
411 app: {{ include "cert-manager.name" . }}
412 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
413 app.kubernetes.io/instance: {{ .Release.Name }}
414 app.kubernetes.io/component: "controller"
415 {{- include "labels" . | nindent 4 }}
416 rbac.authorization.k8s.io/aggregate-to-cluster-reader: "true"
417rules:
418 - apiGroups: ["cert-manager.io"]
419 resources: ["clusterissuers"]
420 verbs: ["get", "list", "watch"]
421
422{{- end }}
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400423---
424
425apiVersion: rbac.authorization.k8s.io/v1
426kind: ClusterRole
427metadata:
428 name: {{ template "cert-manager.fullname" . }}-view
429 labels:
430 app: {{ include "cert-manager.name" . }}
431 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
432 app.kubernetes.io/instance: {{ .Release.Name }}
433 app.kubernetes.io/component: "controller"
434 {{- include "labels" . | nindent 4 }}
435 {{- if .Values.global.rbac.aggregateClusterRoles }}
436 rbac.authorization.k8s.io/aggregate-to-view: "true"
437 rbac.authorization.k8s.io/aggregate-to-edit: "true"
438 rbac.authorization.k8s.io/aggregate-to-admin: "true"
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400439 rbac.authorization.k8s.io/aggregate-to-cluster-reader: "true"
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400440 {{- end }}
441rules:
442 - apiGroups: ["cert-manager.io"]
443 resources: ["certificates", "certificaterequests", "issuers"]
444 verbs: ["get", "list", "watch"]
445 - apiGroups: ["acme.cert-manager.io"]
446 resources: ["challenges", "orders"]
447 verbs: ["get", "list", "watch"]
448
449
450---
451
452apiVersion: rbac.authorization.k8s.io/v1
453kind: ClusterRole
454metadata:
455 name: {{ template "cert-manager.fullname" . }}-edit
456 labels:
457 app: {{ include "cert-manager.name" . }}
458 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
459 app.kubernetes.io/instance: {{ .Release.Name }}
460 app.kubernetes.io/component: "controller"
461 {{- include "labels" . | nindent 4 }}
462 {{- if .Values.global.rbac.aggregateClusterRoles }}
463 rbac.authorization.k8s.io/aggregate-to-edit: "true"
464 rbac.authorization.k8s.io/aggregate-to-admin: "true"
465 {{- end }}
466rules:
467 - apiGroups: ["cert-manager.io"]
468 resources: ["certificates", "certificaterequests", "issuers"]
469 verbs: ["create", "delete", "deletecollection", "patch", "update"]
470 - apiGroups: ["cert-manager.io"]
471 resources: ["certificates/status"]
472 verbs: ["update"]
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400473 {{- /*
474 Challenge and Order resources are not intended to be created by users
475 (GHSA-8rvj-mm4h-c258).
476
477 Challenges: "create" is excluded because a user-created Challenge with
478 attacker-controlled spec.solver can exfiltrate ClusterIssuer credentials
479 cross-namespace. "patch" and "update" are retained because spec is
480 immutable after creation (ValidateChallengeUpdate) so they cannot change
481 solver config, and because users need them to remove stuck finalizers
482 (see cert-manager/cert-manager#3851, cert-manager/cert-manager#3870).
483
484 Orders: "create", "patch", and "update" are excluded because a user
485 who can update an Order can change spec.issuerRef to reference a
486 different ClusterIssuer, then delete the Challenge; the Orders
487 controller recreates the Challenge with the attacker-chosen Issuer's
488 solver config, exfiltrating its credentials.
489 */}}
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400490 - apiGroups: ["acme.cert-manager.io"]
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400491 resources: ["challenges"]
492 verbs: ["delete", "deletecollection", "patch", "update"]
493 - apiGroups: ["acme.cert-manager.io"]
494 resources: ["orders"]
495 verbs: ["delete", "deletecollection"]
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400496
497---
498
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400499{{- if not .Values.disableAutoApproval -}}
500
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400501# Permission to approve CertificateRequests referencing cert-manager.io Issuers and ClusterIssuers
502apiVersion: rbac.authorization.k8s.io/v1
503kind: ClusterRole
504metadata:
505 name: {{ template "cert-manager.fullname" . }}-controller-approve:cert-manager-io
506 labels:
507 app: {{ include "cert-manager.name" . }}
508 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
509 app.kubernetes.io/instance: {{ .Release.Name }}
510 app.kubernetes.io/component: "cert-manager"
511 {{- include "labels" . | nindent 4 }}
512rules:
513 - apiGroups: ["cert-manager.io"]
514 resources: ["signers"]
515 verbs: ["approve"]
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400516 {{- with .Values.approveSignerNames }}
517 resourceNames:
518 {{- range . }}
519 - {{ . | quote }}
520 {{- end }}
521 {{- end }}
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400522
523---
524
525apiVersion: rbac.authorization.k8s.io/v1
526kind: ClusterRoleBinding
527metadata:
528 name: {{ template "cert-manager.fullname" . }}-controller-approve:cert-manager-io
529 labels:
530 app: {{ include "cert-manager.name" . }}
531 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
532 app.kubernetes.io/instance: {{ .Release.Name }}
533 app.kubernetes.io/component: "cert-manager"
534 {{- include "labels" . | nindent 4 }}
535roleRef:
536 apiGroup: rbac.authorization.k8s.io
537 kind: ClusterRole
538 name: {{ template "cert-manager.fullname" . }}-controller-approve:cert-manager-io
539subjects:
540 - name: {{ template "cert-manager.serviceAccountName" . }}
541 namespace: {{ include "cert-manager.namespace" . }}
542 kind: ServiceAccount
543
544---
545
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400546{{- end -}}
547
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400548# Permission to:
Giorgi Lekveishviliea328da2026-07-29 12:15:15 +0400549# - Update and sign CertificateSigningRequests referencing cert-manager.io Issuers and ClusterIssuers
Giorgi Lekveishvili4ec4c022024-08-17 15:09:24 +0400550# - Perform SubjectAccessReviews to test whether users are able to reference Namespaced Issuers
551apiVersion: rbac.authorization.k8s.io/v1
552kind: ClusterRole
553metadata:
554 name: {{ template "cert-manager.fullname" . }}-controller-certificatesigningrequests
555 labels:
556 app: {{ include "cert-manager.name" . }}
557 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
558 app.kubernetes.io/instance: {{ .Release.Name }}
559 app.kubernetes.io/component: "cert-manager"
560 {{- include "labels" . | nindent 4 }}
561rules:
562 - apiGroups: ["certificates.k8s.io"]
563 resources: ["certificatesigningrequests"]
564 verbs: ["get", "list", "watch", "update"]
565 - apiGroups: ["certificates.k8s.io"]
566 resources: ["certificatesigningrequests/status"]
567 verbs: ["update", "patch"]
568 - apiGroups: ["certificates.k8s.io"]
569 resources: ["signers"]
570 resourceNames: ["issuers.cert-manager.io/*", "clusterissuers.cert-manager.io/*"]
571 verbs: ["sign"]
572 - apiGroups: ["authorization.k8s.io"]
573 resources: ["subjectaccessreviews"]
574 verbs: ["create"]
575
576---
577
578apiVersion: rbac.authorization.k8s.io/v1
579kind: ClusterRoleBinding
580metadata:
581 name: {{ template "cert-manager.fullname" . }}-controller-certificatesigningrequests
582 labels:
583 app: {{ include "cert-manager.name" . }}
584 app.kubernetes.io/name: {{ include "cert-manager.name" . }}
585 app.kubernetes.io/instance: {{ .Release.Name }}
586 app.kubernetes.io/component: "cert-manager"
587 {{- include "labels" . | nindent 4 }}
588roleRef:
589 apiGroup: rbac.authorization.k8s.io
590 kind: ClusterRole
591 name: {{ template "cert-manager.fullname" . }}-controller-certificatesigningrequests
592subjects:
593 - name: {{ template "cert-manager.serviceAccountName" . }}
594 namespace: {{ include "cert-manager.namespace" . }}
595 kind: ServiceAccount
596{{- end }}