Kyverno Policies vs. Gatekeeper Policies in Big Bang📜
The following table shows the policies implemented in Big Bang under Gatekeeper and the corresponding policy in Kyverno.
GK = Gatekeeper KY = Kyverno
| Name | Category | Description | Gatekeeper | Kyverno | Notes |
|---|---|---|---|---|---|
| AppArmor | Pod Security Standards (Baseline) | Restrict AppArmor profiles to allowed list | allowedAppArmorProfiles |
restrict-apparmor |
Disabled in GK |
| Default Service Account | Unknown | Disallow use of default service account | noDefaultServiceAccount |
Will not implement | Kubernetes assigns the default service account to all pods that do not specify a service account. Policy value is below threshold for implementation. KY policy update-token-automount likely covers what this policy was intended to do. |
| Docker Registries | Best Practices (Security) | Restrict image registries to allowed list | allowedDockerRegistries |
restrict-image-registries |
|
| External IPs | Vulnerability Mitigation | Restrict service’s external IPs to allowed list | allowedIPs |
restrict-external-ips |
GK uses CIDR range. KY uses regex. |
| Group IDs - Non-root | Pod Security Standards (Restricted) | Require groups to be non-root | allowedUsers |
require-non-root-group |
|
| Group IDs - Range | Best Practices (Security) | Restrict group IDs to a specified range | allowedUsers |
restrict-group-id |
|
| Host Namespace | Pod Security Standards (Baseline) | Disallow access to the host PID and IPC | noHostNamespace |
disallow-host-namespaces |
|
| Host Networking | Pod Security Standards (Baseline) | Disallow sharing the host network | hostNetworking |
disallow-host-namespaces |
|
| Host Path | Best Practices (Security) | Restrict volumes that map host paths to allowed list and require the volume mount to be read-only | allowedHostFilesystem |
restrict-host-path-mount; restrict-host-path-write |
|
| Host Ports | Pod Security Standards (Baseline) | Restrict host ports to a specified range | hostNetworking |
restrict-host-ports |
|
| Image Digest | Best Practices (Security) | Require images to use image digests instead of tags | imageDigest |
Will not implement | Iron Bank images require tags for nightly image builds. Policy value is below threshold for implementation. |
| Image Tags | Best Practices | Allow image tags not on banned list | bannedImageTags |
disallow-image-tags |
|
| Ingress - HTTPS Only | Best Practices (Security) | Require ingresses to be HTTPS only | httpsOnly |
Will not implement | Big Bang uses Istio instead of Ingresses. Policy value is below threshold for implementation. |
| Ingress - Unique | Best Practice | Disallows multiple Ingresses with the same host | uniqueIngressHost |
Will not implement | Big Bang uses Istio instead of Ingresses. Policy value is below threshold for implementation. |
| Istio Sidecar Injection - Namespace | Best Practices | Require namespaces to be annotated for automatic Istio sidecar injection | namespacesHaveIstio |
require-istio-on-namespaces |
|
| Istio Sidecar Injection - Pod | Best Practices | Require pods don’t disable automatic Istio sidecar injection | podsHaveIstio |
disallow-istio-injection-bypass |
|
| Labels | Best Practices | Require specified labels to be on resources | requiredLabels |
require-labels |
KY removed component, part-of, and managed-by from default required list. |
| Linux Capabilities | Pod Security Standards (Restricted) | Require all capabilities to be dropped and restrict added capabilities to allowed list | allowedCapabilities |
require-drop-all-capabilities; restrict-capabilities |
KY adds NET_BIND_SERVICE to the default allowed list |
| Node Ports | Best Practices (Security) | Disallow NodePort services | blockNodePort |
disallow-nodeport-services |
|
| Privileged Containers | Pod Security Standards (Baseline) | Disallow containers that run as privileged | noPrivilegedContainers |
disallow-privileged-containers |
|
| Privileged Escalation | Pod Security Standards (Restricted) | Disallow privilege escalation permissions | noPrivilegedEscalation |
disallow-privilege-escalation |
|
| Probes | Best Practices | Require probes on pods | requiredProbes |
require-probes |
KY removes validation of probe types (e.g. tcpSocket, httpGet, exec) |
| Proc Mount | Pod Security Standards (Baseline) | Restrict proc mount to allowed list | allowedProcMount |
restrict-proc-mount |
|
| Read-only Root Filesystem | Best Practices (Security) | Require root file systems to be read only | readOnlyRoot |
require-ro-rootfs |
|
| Resources - Large | Best Practices | Require CPU and memory limits and disallow extremely large values | noBigContainers |
require-cpu-limit; require-memory-limit |
|
| Resources - Ratio | Best Practices | Ensure CPU and memory limits are not disproportionate to requests | containerRatio |
Will not implement | No use case. Policy value is below threshold for implementation. |
| SecComp | Pod Security Standards (Baseline) | Restrict SecComp profiles to allowed list | allowedSecCompProfiles |
restrict-seccomp |
KY adds Localhost to the default allowed list |
| SELinux | Pod Security Standards (Baseline) | Restrict SELinux options to allowed list | seLinuxPolicy |
disallow-selinux-options; restrict-selinux-type |
KY adds additional allowed values to the default allowed list |
| SysCtl | Pod Security Standards (Baseline) | Restrict SysCtls to allowed list | noSysctls |
restrict-sysctls |
KY adds additional sysctl values to the default allowed list |
| Tolerations | Best Practices (Security) | Tolerations must not match specified list of taints | restrictedTaint |
disallow-tolerations |
KY also prevents tolerations on RuntimeClasses |
| User IDs - Non-root | Pod Security Standards (Restricted) | Require user to run as non-root | allowedUsers |
require-non-root-user |
|
| User IDs - Range | Best Practices (Security) | Restrict user IDs to a specified range | allowedUsers |
restrict-user-id |
|
| Volumes - Flex | Historical | Restrict flex volume drivers to allowed list | allowedFlexVolumes |
restrict-volume-types |
Flex Volume drivers are deprecated. In KY, Flex Volumes are not allowed. |
| Volumes - Types | Pod Security Standards (Restricted) | Restrict volume types to allowed list | volumeTypes |
restrict-volume-types |
KY adds csiand ephemeral to the default allowed list. |