Skip to content

Commit

Permalink
add mutation pod security policies (#72)
Browse files Browse the repository at this point in the history
  • Loading branch information
sozercan committed May 28, 2021
1 parent d8a27d5 commit ea67a19
Show file tree
Hide file tree
Showing 20 changed files with 265 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: Pod
metadata:
name: nginx-default-privilege-escalation
labels:
app: nginx-default-privilege-escalation
spec:
containers:
- name: nginx
image: nginx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: mutations.gatekeeper.sh/v1alpha1
kind: Assign
metadata:
name: k8spspdefaultallowprivilegeescalation
spec:
applyTo:
- groups: [""]
kinds: ["Pod"]
versions: ["v1"]
location: "spec.containers[name:*].securityContext.allowPrivilegeEscalation"
parameters:
pathTests:
- subPath: "spec.containers[name:*].securityContext.allowPrivilegeEscalation"
condition: MustNotExist
assign:
value: false
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: Pod
metadata:
name: nginx-default-apparmor
labels:
app: nginx-default-apparmor
spec:
containers:
- name: nginx
image: nginx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: mutations.gatekeeper.sh/v1alpha1
kind: AssignMetadata
metadata:
name: k8spspapparmor
spec:
match:
scope: Namespaced
kinds:
- apiGroups: [""]
kinds: ["Pod"]
location: metadata.annotations."apparmor.security.beta.kubernetes.io/pod"
parameters:
assign:
value: runtime/default
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: Pod
metadata:
name: nginx-default-add-capabilities
labels:
app: nginx-default-add-capabilities
spec:
containers:
- name: nginx
image: nginx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: mutations.gatekeeper.sh/v1alpha1
kind: Assign
metadata:
name: k8spspcapabilities
spec:
applyTo:
- groups: [""]
kinds: ["Pod"]
versions: ["v1"]
location: "spec.containers[name:*].securityContext.capabilities.add"
parameters:
assign:
value: ["NEW_CAPABILITY"] # default add capability
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: mutations.gatekeeper.sh/v1alpha1
kind: Assign
metadata:
name: k8spspreadonlyrootfs
spec:
applyTo:
- groups: [""]
kinds: ["Pod"]
versions: ["v1"]
location: "spec.containers[name:*].securityContext.readOnlyRootFilesystem"
parameters:
pathTests:
- subPath: "spec.containers[name:*].securityContext.readOnlyRootFilesystem"
condition: MustNotExist
assign:
value: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: Pod
metadata:
name: nginx-readonlyrootfs
labels:
app: nginx-readonlyrootfs
spec:
containers:
- name: nginx
image: nginx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: Pod
metadata:
name: nginx-default-seccomp
labels:
app: nginx-default-seccomp
spec:
containers:
- name: nginx
image: nginx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
apiVersion: mutations.gatekeeper.sh/v1alpha1
kind: AssignMetadata
metadata:
name: k8spspseccomp
spec:
match:
scope: Namespaced
kinds:
- apiGroups: [""]
kinds: ["Pod"]
location: metadata.annotations."seccomp.security.alpha.kubernetes.io/pod"
parameters:
pathTests:
- subPath: metadata.annotations."seccomp.security.alpha.kubernetes.io/pod"
condition: MustNotExist
assign:
value: runtime/default
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: Pod
metadata:
name: nginx-default-selinux
labels:
app: nginx-default-selinux
spec:
containers:
- name: nginx
image: nginx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
apiVersion: mutations.gatekeeper.sh/v1alpha1
kind: Assign
metadata:
name: k8spspselinux
spec:
applyTo:
- groups: [""]
kinds: ["Pod"]
versions: ["v1"]
location: spec.containers[name:*].securityContext.seLinuxOptions
parameters:
pathTests:
- subPath: spec.containers[name:*].securityContext.seLinuxOptions
condition: MustNotExist
assign:
value:
level: s1:c234,c567
user: sysadm_u
role: sysadm_r
type: svirt_lxc_net_t
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: mutations.gatekeeper.sh/v1alpha1
kind: Assign
metadata:
name: k8spspfsGroup
spec:
applyTo:
- groups: [""]
kinds: ["Pod"]
versions: ["v1"]
location: "spec.securityContext.fsGroup"
parameters:
pathTests:
- subPath: "spec.securityContext.fsGroup"
condition: MustNotExist
assign:
value: 3000
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: mutations.gatekeeper.sh/v1alpha1
kind: Assign
metadata:
name: k8spsprunasnonroot
spec:
applyTo:
- groups: [""]
kinds: ["Pod"]
versions: ["v1"]
location: "spec.containers[name:*].securityContext.runAsNonRoot"
parameters:
pathTests:
- subPath: "spec.containers[name:*].securityContext.runAsNonRoot"
condition: MustNotExist
assign:
value: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: mutations.gatekeeper.sh/v1alpha1
kind: Assign
metadata:
name: k8spsprunasgroup
spec:
applyTo:
- groups: [""]
kinds: ["Pod"]
versions: ["v1"]
location: "spec.containers[name:*].securityContext.runAsGroup"
parameters:
pathTests:
- subPath: "spec.containers[name:*].securityContext.runAsGroup"
condition: MustNotExist
assign:
value: 2000
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: mutations.gatekeeper.sh/v1alpha1
kind: Assign
metadata:
name: k8spsprunasuser
spec:
applyTo:
- groups: [""]
kinds: ["Pod"]
versions: ["v1"]
location: "spec.containers[name:*].securityContext.runAsUser"
parameters:
pathTests:
- subPath: "spec.containers[name:*].securityContext.runAsUser"
condition: MustNotExist
assign:
value: 1000
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: mutations.gatekeeper.sh/v1alpha1
kind: Assign
metadata:
name: k8spspsupplementalgroups
spec:
applyTo:
- groups: [""]
kinds: ["Pod"]
versions: ["v1"]
location: "spec.securityContext.supplementalGroups"
parameters:
pathTests:
- subPath: "spec.securityContext.supplementalGroups"
condition: MustNotExist
assign:
value: [3000]
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Pods which have specified neither runAsNonRoot nor runAsUser settings will be mutated to set runAsNonRoot=true
# thus requiring a defined non-zero numeric USER directive in the container.
# https://kubernetes.io/docs/concepts/policy/pod-security-policy/#users-and-groups
apiVersion: v1
kind: Pod
metadata:
name: nginx-run-as-root
labels:
app: nginx-run-as-root
spec:
containers:
- name: nginx
image: nginx
securityContext:
runAsUser: 0
runAsNonRoot: false
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: Pod
metadata:
name: nginx-users
labels:
app: nginx-users
spec:
containers:
- name: nginx
image: nginx
3 changes: 3 additions & 0 deletions test/bats/test.bats
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ setup() {
if [ -d "$policy" ]; then
local policy_group=$(basename "$(dirname "$policy")")
local template_name=$(basename "$policy")
if [[ $policy_group == "experimental" ]]; then
continue
fi
echo "running integration test against policy group: $policy_group, constraint template: $template_name"
# apply template
wait_for_process ${WAIT_TIME} ${SLEEP_TIME} "kubectl apply -k $policy"
Expand Down

0 comments on commit ea67a19

Please sign in to comment.