policyDefinitions/Kubernetes/allowed-volume-types/template.yaml (32 lines of code) (raw):

apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8sazurevolumetypes spec: crd: spec: names: kind: K8sAzureVolumeTypes validation: # Schema for the `parameters` field openAPIV3Schema: properties: volumes: type: array items: type: string targets: - target: admission.k8s.gatekeeper.sh rego: | package k8sazurevolumetypes violation[{"msg": msg, "details": {}}] { volume_fields := {x | input.review.object.spec.volumes[_][x]; x != "name"} field := volume_fields[_] not input_volume_type_allowed(field) msg := sprintf("The volume type %v is not allowed, pod: %v. Allowed volume types: %v", [field, input.review.object.metadata.name, input.parameters.volumes]) } # * may be used to allow all volume types input_volume_type_allowed(field) { input.parameters.volumes[_] == "*" } input_volume_type_allowed(field) { field == input.parameters.volumes[_] }