Pods should define an AppArmor profile to restrict container capabilities and enhance security.
apiVersion: rules.spotter.dev/v1alpha1
kind: SpotterRule
metadata:
name: spotter-workload-011
labels:
severity: "medium"
category: "workload"
annotations:
rules.spotter.dev/title: "Missing AppArmor Profile"
rules.spotter.dev/version: "1.0.0"
rules.spotter.dev/cwe: "CWE-284"
rules.spotter.dev/description: "Pods should define an AppArmor profile to restrict container capabilities and enhance security."
spec:
match:
resources:
kubernetes:
apiGroups:
- ""
- "apps"
versions:
- "v1"
kinds:
- Pod
- Deployment
- StatefulSet
- DaemonSet
namespaces:
include: ["*"]
exclude: ["kube-system", "kube-public"]
labels:
exclude:
rules.spotter.dev/ignore: ["true"]
cel: |
(object.kind == 'Pod' && (
!has(object.metadata.annotations) ||
(has(object.spec.containers) && object.spec.containers.exists(c,
!('container.apparmor.security.beta.kubernetes.io/' + c.name in object.metadata.annotations) ||
object.metadata.annotations['container.apparmor.security.beta.kubernetes.io/' + c.name] == 'dummy'
)) ||
(has(object.spec.initContainers) && object.spec.initContainers.exists(c,
!('container.apparmor.security.beta.kubernetes.io/' + c.name in object.metadata.annotations) ||
object.metadata.annotations['container.apparmor.security.beta.kubernetes.io/' + c.name] == 'dummy'
))
)) ||
(object.kind != 'Pod' && (
!has(object.spec.template.metadata.annotations) ||
(has(object.spec.template.spec.containers) && object.spec.template.spec.containers.exists(c,
!('container.apparmor.security.beta.kubernetes.io/' + c.name in object.spec.template.metadata.annotations) ||
object.spec.template.metadata.annotations['container.apparmor.security.beta.kubernetes.io/' + c.name] == 'dummy'
)) ||
(has(object.spec.template.spec.initContainers) && object.spec.template.spec.initContainers.exists(c,
!('container.apparmor.security.beta.kubernetes.io/' + c.name in object.spec.template.metadata.annotations) ||
object.spec.template.metadata.annotations['container.apparmor.security.beta.kubernetes.io/' + c.name] == 'dummy'
))
))
remediation:
manual: "Add an AppArmor annotation to the pod or pod template, specifying a profile (e.g., `container.apparmor.security.beta.kubernetes.io/my-container: runtime/default`)."
references:
- title: "Kubernetes AppArmor"
url: "https://kubernetes.io/docs/tutorials/security/apparmor/"