All Policies
Require StorageClass in CEL expressions
PersistentVolumeClaims (PVCs) and StatefulSets may optionally define a StorageClass to dynamically provision storage. In a multi-tenancy environment where StorageClasses are far more common, it is often better to require storage only be provisioned from these StorageClasses. This policy requires that PVCs and StatefulSets containing volumeClaimTemplates define the storageClassName field with some value.
Policy Definition
/other-cel/require-storageclass/require-storageclass.yaml
1apiVersion: kyverno.io/v1
2kind: ClusterPolicy
3metadata:
4 name: require-storageclass
5 annotations:
6 policies.kyverno.io/title: Require StorageClass in CEL expressions
7 policies.kyverno.io/category: Other, Multi-Tenancy in CEL
8 policies.kyverno.io/severity: medium
9 policies.kyverno.io/subject: PersistentVolumeClaim, StatefulSet
10 kyverno.io/kyverno-version: 1.11.0
11 kyverno.io/kubernetes-version: "1.26-1.27"
12 policies.kyverno.io/description: >-
13 PersistentVolumeClaims (PVCs) and StatefulSets may optionally define a StorageClass
14 to dynamically provision storage. In a multi-tenancy environment where StorageClasses are
15 far more common, it is often better to require storage only be provisioned from these
16 StorageClasses. This policy requires that PVCs and StatefulSets containing
17 volumeClaimTemplates define the storageClassName field with some value.
18spec:
19 validationFailureAction: Audit
20 background: true
21 rules:
22 - name: pvc-storageclass
23 match:
24 any:
25 - resources:
26 kinds:
27 - PersistentVolumeClaim
28 operations:
29 - CREATE
30 - UPDATE
31 validate:
32 cel:
33 expressions:
34 - expression: "object.spec.?storageClassName.orValue('') != ''"
35 message: "PersistentVolumeClaims must define a storageClassName."
36 - name: ss-storageclass
37 match:
38 any:
39 - resources:
40 kinds:
41 - StatefulSet
42 operations:
43 - CREATE
44 - UPDATE
45 validate:
46 cel:
47 expressions:
48 - expression: >-
49 !has(object.spec.volumeClaimTemplates) ||
50 object.spec.volumeClaimTemplates.all(volumeClaimTemplate,
51 volumeClaimTemplate.spec.?storageClassName.orValue('') != '')
52 message: "StatefulSets must define a storageClassName."