1
+ apiVersion : admissionregistration.k8s.io/v1alpha1
2
+ kind : ValidatingAdmissionPolicy
3
+ metadata :
4
+ name : " kubescape-c-0050-deny-resources-with-cpu-limit-or-request-not-set"
5
+ spec :
6
+ failurePolicy : Fail
7
+ paramKind :
8
+ apiVersion : kubescape.io/v1
9
+ kind : ControlConfiguration
10
+ matchConstraints :
11
+ resourceRules :
12
+ - apiGroups : [""]
13
+ apiVersions : ["v1"]
14
+ operations : ["CREATE", "UPDATE"]
15
+ resources : ["pods"]
16
+ - apiGroups : ["apps"]
17
+ apiVersions : ["v1"]
18
+ operations : ["CREATE", "UPDATE"]
19
+ resources : ["deployments","replicasets","daemonsets","statefulsets"]
20
+ - apiGroups : ["batch"]
21
+ apiVersions : ["v1"]
22
+ operations : ["CREATE", "UPDATE"]
23
+ resources : ["jobs","cronjobs"]
24
+ validations :
25
+ - expression : >
26
+ object.kind != 'Pod' || object.spec.containers.all(container, (!(!(has(container.resources)) || !(has(container.resources.requests)) || !(has(container.resources.requests.cpu))) &&
27
+ params.settings.cpuLimitMin <= int(container.resources.requests.cpu) &&
28
+ params.settings.cpuLimitMax >= int(container.resources.requests.cpu)) &&
29
+ (!(!(has(container.resources.limits)) || !(has(container.resources.limits.cpu))) &&
30
+ params.settings.cpuLimitMin <= int(container.resources.limits.cpu) &&
31
+ params.settings.cpuLimitMax >= int(container.resources.limits.cpu)))
32
+ message: "Pods contains container/s with cpu limit or request not set or they are not in the specified range! (see more at https://hub.armosec.io/docs/c-0050)"
33
+
34
+ - expression : >
35
+ ['Deployment','ReplicaSet','DaemonSet','StatefulSet','Job'].all(kind, object.kind != kind) || object.spec.template.spec.containers.all(container, (!(!(has(container.resources)) || !(has(container.resources.requests)) || !(has(container.resources.requests.cpu))) &&
36
+ params.settings.cpuLimitMin <= int(container.resources.requests.cpu) &&
37
+ params.settings.cpuLimitMax >= int(container.resources.requests.cpu)) &&
38
+ (!(!(has(container.resources.limits)) || !(has(container.resources.limits.cpu))) &&
39
+ params.settings.cpuLimitMin <= int(container.resources.limits.cpu) &&
40
+ params.settings.cpuLimitMax >= int(container.resources.limits.cpu)))
41
+ message: "Workloads contains container/s with cpu limit or request not set or they are not in the specified range! (see more at https://hub.armosec.io/docs/c-0050)"
42
+
43
+ - expression : >
44
+ object.kind != 'CronJob' || object.spec.jobTemplate.spec.containers.all(container, (!(!(has(container.resources)) || !(has(container.resources.requests)) || !(has(container.resources.requests.cpu))) &&
45
+ params.settings.cpuLimitMin <= int(container.resources.requests.cpu) &&
46
+ params.settings.cpuLimitMax >= int(container.resources.requests.cpu)) &&
47
+ (!(!(has(container.resources.limits)) || !(has(container.resources.limits.cpu))) &&
48
+ params.settings.cpuLimitMin <= int(container.resources.limits.cpu) &&
49
+ params.settings.cpuLimitMax >= int(container.resources.limits.cpu)))
50
+ message: "CronJob contains container/s with cpu limit or request not set or they are not in the specified range! (see more at https://hub.armosec.io/docs/c-0050)"
0 commit comments