apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: require-run-as-non-root annotations: policies.kyverno.io/title: "Запрет запуска от root" policies.kyverno.io/category: Pod Security Standards (Restricted) policies.kyverno.io/severity: high policies.kyverno.io/subject: Pod policies.kyverno.io/description: >- Контейнеры не должны запускаться от пользователя root (UID 0). Процесс от root может читать/писать файлы хоста через volume mounts даже без привилегированного режима. Установите runAsNonRoot: true или runAsUser >= 1000. spec: validationFailureAction: Enforce background: true rules: - name: check-runasnonroot-pod-level match: resources: kinds: - Pod exclude: resources: namespaces: - kube-system validate: message: >- Под '{{ request.object.metadata.name }}' должен иметь spec.securityContext.runAsNonRoot: true. Это гарантирует, что ни один контейнер не запустится от root. pattern: spec: securityContext: runAsNonRoot: true - name: check-runasuser-not-root match: resources: kinds: - Pod exclude: resources: namespaces: - kube-system validate: message: >- Контейнер '{{ element.name }}' использует runAsUser: 0 (root). Установите runAsUser >= 1000. foreach: - list: "request.object.spec.containers" deny: conditions: any: - key: "{{ element.securityContext.runAsUser }}" operator: Equals value: 0