policyDefinitions/Kubernetes/forbidden-sysctl-interfaces/template.yaml (34 lines of code) (raw):
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8sazureforbiddensysctls
spec:
crd:
spec:
names:
kind: K8sAzureForbiddenSysctls
validation:
# Schema for the `parameters` field
openAPIV3Schema:
properties:
forbiddenSysctls:
type: array
items:
type: string
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8sazureforbiddensysctls
violation[{"msg": msg, "details": {}}] {
sysctl := input.review.object.spec.securityContext.sysctls[_].name
forbidden_sysctl(sysctl)
msg := sprintf("The sysctl %v is not allowed, pod: %v. Forbidden sysctls: %v", [sysctl, input.review.object.metadata.name, input.parameters.forbiddenSysctls])
}
# * may be used to forbid all sysctls
forbidden_sysctl(sysctl) {
input.parameters.forbiddenSysctls[_] == "*"
}
forbidden_sysctl(sysctl) {
input.parameters.forbiddenSysctls[_] == sysctl
}
forbidden_sysctl(sysctl) {
startswith(sysctl, trim(input.parameters.forbiddenSysctls[_], "*"))
}