OperationPolicy
Scope: Cluster
Version: v1alpha1
Describes an operation policy for a cluster.
Each CustomResource OperationPolicy describes rules for objects in a cluster.
- objectspec
Required value
- stringspec.enforcementAction
The enforcement action to control what to do with the result of the constraint.
Deny— Deny action.Dryrun— No action. It is used when debugging. Information about the event can be viewed in Grafana in dashboardSecurity/Admission policy engine.Warn— Same asDryrun. In addition to the event information, it provides some info on why that constraint would have been denied if you had setDenyinstead ofWarn.
Default:
DenyAllowed values:
Warn,Deny,Dryrun - objectspec.match
Required value
- objectspec.match.labelSelector
Specifies the label selector to filter Pods with.
You can get more into here.
- array of objectsspec.match.labelSelector.matchExpressions
List of label expressions for Pods.
Example:
matchExpressions: - key: tier operator: In values: - production - staging- stringspec.match.labelSelector.matchExpressions.key
Required value
- stringspec.match.labelSelector.matchExpressions.operator
Required value
Allowed values:
In,NotIn,Exists,DoesNotExist - array of stringsspec.match.labelSelector.matchExpressions.values
- objectspec.match.labelSelector.matchLabels
List of labels which Pod should have.
Example:
matchLabels: foo: bar baz: who
- objectspec.match.namespaceSelector
Specifies the Namespace selector to filter objects with.
- array of stringsspec.match.namespaceSelector.excludeNames
Include all namespaces except a particular set. Support glob pattern.
- objectspec.match.namespaceSelector.labelSelector
Specifies the label selector to filter namespaces.
You can get more info in the documentation.
- array of objectsspec.match.namespaceSelector.labelSelector.matchExpressions
List of label expressions for namespaces.
Example:
matchExpressions: - key: tier operator: In values: - production - staging- stringspec.match.namespaceSelector.labelSelector.matchExpressions.key
Required value
- stringspec.match.namespaceSelector.labelSelector.matchExpressions.operator
Required value
Allowed values:
In,NotIn,Exists,DoesNotExist - array of stringsspec.match.namespaceSelector.labelSelector.matchExpressions.values
- objectspec.match.namespaceSelector.labelSelector.matchLabels
List of labels which a namespace should have.
Example:
matchLabels: foo: bar baz: who
- array of stringsspec.match.namespaceSelector.matchNames
Include only a particular set of namespaces. Supports glob pattern.
- objectspec.policies
Required value
- array of stringsspec.policies.allowedRepos
The list of prefixes a container image is allowed to have.
- stringElement of the array
Example:
registry.deckhouse.io
- booleanspec.policies.checkContainerDuplicates
Check container names and env variables for duplicates.
- booleanspec.policies.checkHostNetworkDNSPolicy
Check
ClusterFirstWithHostNetdnsPolicy is set for Pods withhostNetwork: true. - array of strings
Requires container images to have an image tag different from the ones in the specified list.
Example:
disallowedImageTags: latest - array of objectsspec.policies.disallowedTolerations
Deny Pods that have tolerations from the ones in the specified list.
See more in the Kubernetes documentation.
- stringspec.policies.disallowedTolerations.effect
Allowed values:
NoSchedule,PreferNoSchedule,NoExecute - stringspec.policies.disallowedTolerations.key
- stringspec.policies.disallowedTolerations.operator
Allowed values:
Exists,Equal - stringspec.policies.disallowedTolerations.value
- stringspec.policies.imagePullPolicy
Required image pull policy for containers.
Allowed values:
Always,IfNotPresent - array of stringsspec.policies.ingressClassNames
List of allowed ingress class names.
- integerspec.policies.maxRevisionHistoryLimit
A maximum value for a revision history.
- array of stringsspec.policies.priorityClassNames
List of allowed priority class names.
- objectspec.policies.replicaLimits
A range of allowed replicas. Values are inclusive.
- integerspec.policies.replicaLimits.maxReplicas
The maximum number of replicas allowed, inclusive.
- integerspec.policies.replicaLimits.minReplicas
The minimum number of replicas allowed, inclusive.
- objectspec.policies.requiredAnnotations
A list of annotations and values the object must specify.
- array of objectsspec.policies.requiredAnnotations.annotations
- stringspec.policies.requiredAnnotations.annotations.allowedRegex
If specified, a regular expression, the annotation’s value must match. The value must contain at least one match for the regular expression.
- stringspec.policies.requiredAnnotations.annotations.key
The required annotation.
- array of stringsspec.policies.requiredAnnotations.watchKinds
The list of kubernetes objects in the format
$apiGroup/$kindto watch the annotations on.- stringElement of the array
Pattern:
^[a-z]*/[a-zA-Z]+$Examples:
apps/Deployment"/Pod"networking.k8s.io/Ingress
- objectspec.policies.requiredLabels
A list of labels and values the object must specify.
- array of objectsspec.policies.requiredLabels.labels
- stringspec.policies.requiredLabels.labels.allowedRegex
If specified, a regular expression, the label’s value must match. The value must contain at least one match for the regular expression.
- stringspec.policies.requiredLabels.labels.key
The required label.
- array of stringsspec.policies.requiredLabels.watchKinds
The list of kubernetes objects in the format
$apiGroup/$kindto watch the labels on.- stringElement of the array
Pattern:
^[a-z]*/[a-zA-Z]+$Examples:
apps/Deployment"/Pod"networking.k8s.io/Ingress
- array of stringsspec.policies.requiredProbes
The list of probes that are required (e.g.
readinessProbeandlivenessProbe)Example:
requiredProbes: - readinessProbe - livenessProbe- stringElement of the array
Allowed values:
livenessProbe,readinessProbe,startupProbe
- objectspec.policies.requiredResources
Requires containers to have defined resources set.
- array of stringsspec.policies.requiredResources.limits
A list of limits that should be enforced (CPU, memory, or both).
- stringElement of the array
Allowed values:
cpu,memory
- array of stringsspec.policies.requiredResources.requests
A list of requests that should be enforced (CPU, memory, or both).
- stringElement of the array
Allowed values:
cpu,memory
- array of stringsspec.policies.storageClassNames
List of allowed storage class names.
SecurityPolicy
Scope: Cluster
Version: v1alpha1
Describes a security policy for a cluster.
Each SecurityPolicy custom resource describes rules for the objects in the cluster.
- objectspec
Required value
- stringspec.enforcementAction
An enforcement action as a result of the constraint:
Deny— Deny action.Dryrun— No action. Used for debugging. Information about the event can be viewed in Grafana in dashboardSecurity/Admission policy engine.Warn— No action; similar toDryrun. Provides information about the constraint that would result in a denial if theDenyaction is used.
Default:
DenyAllowed values:
Warn,Deny,Dryrun - objectspec.match
Required value
Container filtering rules. Use selectors to specify the pods and containers to which you want to apply the policy.
- objectspec.match.labelSelector
Specifies the label selector to filter Pods with.
You can get more into here.
- array of objectsspec.match.labelSelector.matchExpressions
The list of label expressions for Pods.
Example:
matchExpressions: - key: tier operator: In values: - production - staging- stringspec.match.labelSelector.matchExpressions.key
Required value
- stringspec.match.labelSelector.matchExpressions.operator
Required value
Allowed values:
In,NotIn,Exists,DoesNotExist - array of stringsspec.match.labelSelector.matchExpressions.values
- objectspec.match.labelSelector.matchLabels
The list of the labels that the Pod should have.
Example:
matchLabels: foo: bar baz: who
- objectspec.match.namespaceSelector
Specifies the Namespace selector to filter objects with.
- array of stringsspec.match.namespaceSelector.excludeNames
Includes all namespaces except a particular set. Support glob pattern.
- objectspec.match.namespaceSelector.labelSelector
Specifies the label selector to filter namespaces.
You can get more info in the documentation.
- array of objectsspec.match.namespaceSelector.labelSelector.matchExpressions
The list of label expressions for namespaces.
Example:
matchExpressions: - key: tier operator: In values: - production - staging- stringspec.match.namespaceSelector.labelSelector.matchExpressions.key
Required value
- stringspec.match.namespaceSelector.labelSelector.matchExpressions.operator
Required value
Allowed values:
In,NotIn,Exists,DoesNotExist - array of stringsspec.match.namespaceSelector.labelSelector.matchExpressions.values
- objectspec.match.namespaceSelector.labelSelector.matchLabels
The list of the labels that the namespace should have.
Example:
matchLabels: foo: bar baz: who
- array of stringsspec.match.namespaceSelector.matchNames
Includes only a particular set of namespaces. Supports glob pattern.
- objectspec.policies
Required value
Policies that pods and containers must comply with.
- booleanspec.policies.allowHostIPC
Allows sharing the host’s IPC namespace with containers.
- booleanspec.policies.allowHostNetwork
Allows containers to use the host’s network.
- booleanspec.policies.allowHostPID
Allows sharing the host’s PID namespace with containers.
- booleanspec.policies.allowPrivilegeEscalation
Allows container processes to gain more privileges than its parent process.
By default (if not specified) —
false. This means that if the field is omitted or explicitly set tofalse, the container is denied any privilege escalation. If you want to allow elevated privileges, set this parameter totrue. - booleanspec.policies.allowPrivileged
Allows running containers in a privileged mode.
By default (if not specified) —
false. This means that if the field is omitted or explicitly set tofalse, the container is denied any privilege escalation. If you want to allow elevated privileges, set this parameter totrue. - booleanspec.policies.allowRbacWildcards
Allows using wildcards (
*) in namespaced Role and RoleBinding resources.ClusterRole and ClusterRoleBinding are not validated by SecurityPolicy.
By default (if not specified) —
true. This means that if the field is omitted or explicitly set totrue, using wildcards is allowed. If you want to deny wildcards, set this parameter tofalse.Default:
true - array of stringsspec.policies.allowedAppArmor
The list of AppArmor profiles the containers are permitted to use.
Example:
allowedAppArmor: - runtime/default - unconfined- stringElement of the array
An AppArmor profile.
- array of stringsspec.policies.allowedCapabilities
The list of capabilities that the containers are permitted to use.
To allow all capabilities, use
ALL.Example:
allowedCapabilities: - SETGID - SETUID - NET_BIND_SERVICE- stringElement of the array
A linux capability.
Allowed values:
ALL,SETPCAP,SYS_MODULE,SYS_RAWIO,SYS_PACCT,SYS_ADMIN,SYS_NICE,SYS_RESOURCE,SYS_TIME,SYS_TTY_CONFIG,MKNOD,AUDIT_WRITE,AUDIT_CONTROL,MAC_OVERRIDE,MAC_ADMIN,NET_ADMIN,SYSLOG,CHOWN,NET_RAW,DAC_OVERRIDE,FOWNER,DAC_READ_SEARCH,FSETID,KILL,SETGID,SETUID,LINUX_IMMUTABLE,NET_BIND_SERVICE,NET_BROADCAST,IPC_LOCK,IPC_OWNER,SYS_CHROOT,SYS_PTRACE,SYS_BOOT,LEASE,SETFCAP,WAKE_ALARM,BLOCK_SUSPEND
- array of stringsspec.policies.allowedClusterRoles
A list of allowed cluster roles to bind to users.
- array of objectsspec.policies.allowedFlexVolumes
The list of Flex Volume drivers the containers are permitted to use.
- stringspec.policies.allowedFlexVolumes.driver
A driver name.
- array of objectsspec.policies.allowedHostPaths
The list of allowed hostpath prefixes. An empty list means any path can be used.
Example:
allowedHostPaths: - pathPrefix: "/dev" readOnly: true- stringspec.policies.allowedHostPaths.pathPrefix
Required value
The path prefix to match against the host volume.
It does not support the
*mask. Trailing slashes are trimmed when validating the path prefix with a host path.For example, the
/fooprefix allows/foo,/foo/and/foo/barpath, but doesn’t allow/foodor/etc/foopath. - booleanspec.policies.allowedHostPaths.readOnly
When set to true, allows host volumes to be matched against the pathPrefix only if all the volume mounts are read-only.
Default:
false
- array of objectsspec.policies.allowedHostPorts
The list of
hostPortranges allowed by the rule.- integerspec.policies.allowedHostPorts.max
Max value for the
hostPort. - integerspec.policies.allowedHostPorts.min
Min value for the
hostPort.
- stringspec.policies.allowedProcMount
Allows
/procmount type for containers.Allowed values:
Default,UnmaskedExample:
allowedProcMount: Unmasked. - array of stringsspec.policies.allowedServiceTypes
The list of allowed service types.
Example:
allowedServiceTypes: - LoadBalancer - ClusterIP- stringElement of the array
Allowed values:
ClusterIP,NodePort,LoadBalancer,ExternalName
- array of stringsspec.policies.allowedUnsafeSysctls
The list of explicitly allowed unsafe sysctls.
To allow all unsafe sysctls, use
*.Example:
allowedUnsafeSysctls: - kernel.msg* - net.core.somaxconn - array of stringsspec.policies.allowedVolumes
The set of the permitted volume plugins.
Example:
allowedVolumes: - hostPath - persistentVolumeClaim- stringElement of the array
Allowed values:
*,none,awsElasticBlockStore,azureDisk,azureFile,cephFS,cinder,configMap,csi,downwardAPI,emptyDir,ephemeral,fc,flexVolume,flocker,gcePersistentDisk,gitRepo,glusterfs,hostPath,iscsi,nfs,persistentVolumeClaim,photonPersistentDisk,portworxVolume,projected,quobyte,rbd,scaleIO,secret,storageos,vsphereVolume
- booleanspec.policies.automountServiceAccountToken
Allows pods to run with
automountServiceAccountTokenenabled. - booleanspec.policies.blockWildcardDomains
Block creation of Ingress objects with
*in DNS domains. - array of stringsspec.policies.forbiddenSysctls
The list of forbidden sysctls.
Takes precedence over allowed unsafe sysctls (allowedUnsafeSysctls).
Example:
forbiddenSysctls: - kernel.msg* - net.core.somaxconn - objectspec.policies.fsGroup
Specifies which
fsGroupvalues the security context is permitted to use.- array of objectsspec.policies.fsGroup.ranges
The list of
fsGroupID ranges that are allowed in `MustRunAs’ mode.- integerspec.policies.fsGroup.ranges.max
Max ID value.
- integerspec.policies.fsGroup.ranges.min
Min ID value.
- stringspec.policies.fsGroup.rule
Required value
Specifies the strategy of the
fsGroupselection.Allowed values:
MustRunAs,MayRunAs,RunAsAny
- booleanspec.policies.readOnlyRootFilesystem
If set to true, only the pods with the read-only root filesystem across all containers will be permitted to run. See the Kubernetes documentation for more details.
- array of stringsspec.policies.requiredDropCapabilities
The list of capabilities that have to be dropped from the containers.
To exclude all capabilities, use
ALL’.Example:
requiredDropCapabilities: - SETGID - SETUID - NET_BIND_SERVICE- stringElement of the array
A linux capability to drop from the containers’ specs.
Allowed values:
ALL,SETPCAP,SYS_MODULE,SYS_RAWIO,SYS_PACCT,SYS_ADMIN,SYS_NICE,SYS_RESOURCE,SYS_TIME,SYS_TTY_CONFIG,MKNOD,AUDIT_WRITE,AUDIT_CONTROL,MAC_OVERRIDE,MAC_ADMIN,NET_ADMIN,SYSLOG,CHOWN,NET_RAW,DAC_OVERRIDE,FOWNER,DAC_READ_SEARCH,FSETID,KILL,SETGID,SETUID,LINUX_IMMUTABLE,NET_BIND_SERVICE,NET_BROADCAST,IPC_LOCK,IPC_OWNER,SYS_CHROOT,SYS_PTRACE,SYS_BOOT,LEASE,SETFCAP,WAKE_ALARM,BLOCK_SUSPEND
- objectspec.policies.runAsGroup
Specifies which
runAsGroupvalues the security context is permitted to use.- array of objectsspec.policies.runAsGroup.ranges
The list of group ID ranges that are allowed in `MustRunAs’ mode.
- integerspec.policies.runAsGroup.ranges.max
Max ID value.
- integerspec.policies.runAsGroup.ranges.min
Min ID value.
- stringspec.policies.runAsGroup.rule
Required value
Specifies the strategy of the group ID selection.
Allowed values:
MustRunAs,MayRunAs,RunAsAny
- objectspec.policies.runAsUser
Specifies which
runAsUservalues the security context is permitted to use.- array of objectsspec.policies.runAsUser.ranges
The list of user ID ranges that are allowed in `MustRunAs’ mode.
- integerspec.policies.runAsUser.ranges.max
Max ID value.
- integerspec.policies.runAsUser.ranges.min
Min ID value.
- stringspec.policies.runAsUser.rule
Required value
Specifies the strategy of the user ID selection.
Allowed values:
MustRunAs,MustRunAsNonRoot,RunAsAny
- array of objectsspec.policies.seLinux
Specifies which SElinux labels the security context is permitted to use.
- stringspec.policies.seLinux.level
A SELinux level label that applies to the container.
- stringspec.policies.seLinux.role
A SELinux role label that applies to the container.
- stringspec.policies.seLinux.type
A SELinux type label that applies to the container.
- stringspec.policies.seLinux.user
A SELinux user label that applies to the container.
- objectspec.policies.seccompProfiles
Specifies the list of allowed profiles that can be set for the Pod or container’s seccomp annotations.
- array of stringsspec.policies.seccompProfiles.allowedLocalhostFiles
Defines the local seccomp profiles (in JSON format) that can be used if
Localhostis set in theallowedProfilesparameter.An empty list prohibits the use of any local profiles.
- array of stringsspec.policies.seccompProfiles.allowedProfiles
The list of allowed profile values for seccomp on Pods/containers.
Both formats are supported:
- Via annotations:
runtime/default,docker/default,unconfined,localhost/some-profile.json.localhost/*allows any local profile. - Via securityContext:
RuntimeDefault,Unconfined,Localhost. ForLocalhost, specify the allowed profiles using theallowedLocalhostFilesparameter.
Profile types:
Unconfined— no restrictions (not recommended for security reasons).RuntimeDefault— the default profile provided by the container runtime (e.g., Docker, CRI-O).Localhost— a custom profile defined on the host (flexible and tailored to the application).
Using
*allows all profiles. It’s not necessary to specify both formats — they are automatically mapped to each other. - Via annotations:
- objectspec.policies.supplementalGroups
Specifies what supplemental groups are allowed to be used by the security context.
- array of objectsspec.policies.supplementalGroups.ranges
The list of supplemental group ID ranges that are allowed in `MustRunAs’ mode.
- integerspec.policies.supplementalGroups.ranges.max
Max ID value.
- integerspec.policies.supplementalGroups.ranges.min
Min ID value.
- stringspec.policies.supplementalGroups.rule
Required value
Specifies the strategy of the supplemental group ID selection.
Allowed values:
MustRunAs,MayRunAs,RunAsAny
- array of objectsspec.policies.verifyImageSignatures
Available in editions: SE+, EE
List of policies to verify container images signatures.
Container images must be signed using Cosign.
Example:
verifyImageSignatures: - reference: docker.io/myrepo/* publicKeys: - |- -----BEGIN PUBLIC KEY----- ..... -----END PUBLIC KEY----- - reference: company.registry.com/* dockerCfg: "<Base64_dockerCfg>" publicKeys: - |- -----BEGIN PUBLIC KEY----- ..... -----END PUBLIC KEY------ stringspec.policies.verifyImageSignatures.ca
A custom certificate authority to use when connecting to the container image repository.
- stringspec.policies.verifyImageSignatures.dockerCfg
A string in Base64 with authentication data for the container image repository.
If the container images are available anonymously, it is not specified.
- array of stringsspec.policies.verifyImageSignatures.publicKeys
Required value
The list of Cosign compliant public keys.
- stringspec.policies.verifyImageSignatures.reference
Required value
Absolute address or template for container images.
If it contains the
*symbol, it is considered a template for container image addresses. The*symbol can only appear once and only at the end. For example, for the valuecompany.registry.com/*, any container images from the repositorycompany.registry.comwill be checked with the specified keys and access parameters.If it does not contain the
*symbol, it is considered an absolute address for a container image. For example, for the valuecompany.registry.com/nginx, only the nginx image from the repositorycompany.registry.comwill be checked with the specified keys and access parameters.Pattern:
^[a-z0-9\.\-:@\/]*\*?$Examples:
reference: docker.io/myuser/*reference: "*"