28
loading...
This website collects cookies to deliver better user experience
package spinnaker.execution.stages.before.deployManifest
deny [“You cannot create unencrypted storage classes”] {
some i
input.stage.context.manifests[i].kind==”StorageClass”
params := object.get(input.stage.context.manifests[i],”parameters”,null)
object.get(params,”encrypted”,”false”)!=”true”
}
deny [“You must use an approved encrypted storage class”]{
some i
input.stage.context.manifests[i].kind=”PersistentVolumeClaim”
storageClass := object.get(input.stage.context.manifests[i].spec,”storageClassName”,null)
not isApprovedStorageClass(storageClass)
}
isApprovedStorageClass(storageClass){
(storageClass == data.approvedStorageClasses[_])
}
package spinnaker.deployment.tasks.before.deployManifest
blockedPorts :=[20,21,23,80,110,119,143,389,587,8080,8088,8888]
deny[“You cannot leverage unencrypted network protocols. A port typically used by an unencrypted protocol was detected.”] {
manifest := input.deploy.manifests[_]
manifest.kind == “Service”
port := manifest.spec.ports[_]
any([object.get(port,”port”,null) == blockedPorts[_],
object.get(port,”targetPort”,null) == blockedPorts[_]])
} {
input.deploy.manifests[_].spec.containers[_].ports[_].containerPort=blockedPorts[_]
} {
input.deploy.manifests[_].spec.template.spec.containers[_].ports[_].containerPort=blockedPorts[_]
}
package opa.pipelines
production_accounts := [“prod1″,”prod2”]
deny[“production deploy stage must follow a manual judgement stage”] {
some j
input.pipeline.stages[j].type==”deployManifest”
input.pipeline.stages[j].account==production_accounts[_]
approvers := [i | input.pipeline.stages[i].type==”manualJudgment”; i<j]
count(approvers)==0
}
package spinnaker.deployment.tasks.before.deployManifest
deny[“Your manifest creates a pod from an image that has not been approved by the security scanning process.”] {
isImageUnApproved(input.deploy.manifests[_].spec.template.spec.containers[_].image)
} {
isImageUnApproved(input.deploy.manifests[_].spec.containers[_].image)
}
{
isImageUnApproved(input.deploy.manifests[_].spec.template.spec.initContainers[_].image)
}
{
isImageUnApproved(input.deploy.manifests[_].spec.initContainers[_].image)
}
isImageUnApproved(image){
not isImageApproved(image)
}
isImageApproved(image){
image==data.approvedImages[_]
}
28