All Policies

Require runAsNonRoot in CEL

Containers must be required to run as non-root. This policy ensures `runAsNonRoot` is set to true.

Policy Definition

/pod-security-cel/restricted/require-run-as-nonroot/require-run-as-nonroot.yaml

 1apiVersion: kyverno.io/v1
 2kind: ClusterPolicy
 3metadata:
 4  name: require-run-as-nonroot
 5  annotations:
 6    policies.kyverno.io/title: Require runAsNonRoot in CEL
 7    policies.kyverno.io/category: Pod Security Standards (Restricted) in CEL
 8    policies.kyverno.io/severity: medium
 9    policies.kyverno.io/subject: Pod
10    policies.kyverno.io/minversion: 1.11.0
11    kyverno.io/kyverno-version: 1.11.0
12    kyverno.io/kubernetes-version: "1.26-1.27"
13    policies.kyverno.io/description: >-
14      Containers must be required to run as non-root. This policy ensures
15      `runAsNonRoot` is set to true.
16spec:
17  validationFailureAction: Audit
18  background: true
19  rules:
20    - name: run-as-non-root
21      match:
22        any:
23        - resources:
24            kinds:
25              - Pod
26            operations:
27            - CREATE
28            - UPDATE
29      validate:
30        cel:
31          expressions:
32            - expression: >-
33                (
34                    (
35                      has(object.spec.securityContext) &&
36                      has(object.spec.securityContext.runAsNonRoot) &&
37                      object.spec.securityContext.runAsNonRoot == true
38                    ) && (
39                      (
40                          object.spec.containers +
41                          (has(object.spec.initContainers) ? object.spec.initContainers : []) +
42                          (has(object.spec.ephemeralContainers) ? object.spec.ephemeralContainers : [])
43                      ).all(container,
44                          !has(container.securityContext) ||
45                          !has(container.securityContext.runAsNonRoot) ||
46                          container.securityContext.runAsNonRoot == true)
47                    )
48                ) || (
49                    (
50                        object.spec.containers +
51                        (has(object.spec.initContainers) ? object.spec.initContainers : []) +
52                        (has(object.spec.ephemeralContainers) ? object.spec.ephemeralContainers : [])
53                    ).all(container,
54                        has(container.securityContext) &&
55                        has(container.securityContext.runAsNonRoot) &&
56                        container.securityContext.runAsNonRoot == true)
57                )
58              message: >-
59                Running as root is not allowed. Either the field spec.securityContext.runAsNonRoot or all of
60                spec.containers[*].securityContext.runAsNonRoot, spec.initContainers[*].securityContext.runAsNonRoot and
61                spec.ephemeralContainers[*].securityContext.runAsNonRoot, must be set to true.
62