Policy Patterns
Common policy patterns provide reusable templates for enforcing security and compliance standards. These patterns address the most common security requirements in Kubernetes.
Security Patterns
Non-Root Containers
Require all containers to run as non-root:
Kyverno:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-non-root
spec:
validationFailureAction: enforce
rules:
- name: check-non-root
match:
resources:
kinds: ["Pod"]
validate:
message: "Containers must run as non-root"
pattern:
spec:
securityContext:
runAsNonRoot: true
Resource Limits
Require resource limits on all containers:
Kyverno:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-resource-limits
spec:
validationFailureAction: enforce
rules:
- name: check-limits
match:
resources:
kinds: ["Pod"]
validate:
message: "All containers must have resource limits"
pattern:
spec:
containers:
- name: "*"
resources:
limits:
memory: "?*"
cpu: "?*"
Block Privileged Containers
Prevent privileged containers:
Kyverno:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: block-privileged
spec:
validationFailureAction: enforce
rules:
- name: check-privileged
match:
resources:
kinds: ["Pod"]
validate:
message: "Privileged containers are not allowed"
deny:
conditions:
- key: "{{ request.object.spec.containers[?contains(@.securityContext.privileged, `true`)] }}"
operator: AnyIn
value: ["true"]
Compliance Patterns
Required Labels
Enforce required labels:
Kyverno:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-labels
spec:
validationFailureAction: enforce
rules:
- name: check-labels
match:
resources:
kinds: ["Deployment", "Service"]
validate:
message: "Resources must have 'team' and 'environment' labels"
pattern:
metadata:
labels:
team: "?*"
environment: "?*"
Naming Conventions
Enforce naming conventions:
Kyverno:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: enforce-naming
spec:
validationFailureAction: enforce
rules:
- name: check-naming
match:
resources:
kinds: ["Namespace"]
validate:
message: "Namespace names must start with 'prod-' or 'dev-'"
pattern:
metadata:
name: "prod-* | dev-*"
Best Practice Patterns
Health Checks
Require health checks:
Kyverno:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-health-checks
spec:
validationFailureAction: enforce
rules:
- name: check-health-checks
match:
resources:
kinds: ["Deployment"]
validate:
message: "Deployments must have liveness and readiness probes"
pattern:
spec:
template:
spec:
containers:
- name: "*"
livenessProbe: "?*"
readinessProbe: "?*"
Image Pull Policy
Enforce image pull policies:
Kyverno:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-image-pull-policy
spec:
validationFailureAction: enforce
rules:
- name: check-pull-policy
match:
resources:
kinds: ["Pod"]
validate:
message: "Containers must use 'Always' or 'IfNotPresent' image pull policy"
pattern:
spec:
containers:
- name: "*"
imagePullPolicy: "Always | IfNotPresent"
Mutation Patterns
Add Default Resources
Automatically add resource limits:
Kyverno:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: add-default-resources
spec:
rules:
- name: add-resources
match:
resources:
kinds: ["Pod"]
mutate:
patchStrategicMerge:
spec:
containers:
- (name): "*"
resources:
limits:
memory: "512Mi"
cpu: "500m"
requests:
memory: "256Mi"
cpu: "250m"
Add Security Context
Automatically add security context:
Kyverno:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: add-security-context
spec:
rules:
- name: add-context
match:
resources:
kinds: ["Pod"]
mutate:
patchStrategicMerge:
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
containers:
- (name): "*"
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
Best Practices
- Start with validation - Enforce rules before adding mutations
- Use audit mode first - Test policies before enforcing
- Combine patterns - Use multiple policies for defense in depth
- Document exceptions - Explain why certain resources are exempt
- Version control - Store policies in Git
- Regular reviews - Update policies as requirements change
See Also
- Policy Enforcement - Overview of policy enforcement
- OPA/Gatekeeper - OPA policy engine
- Kyverno - Kubernetes-native policy engine