Skip to content

Commit de600fa

Browse files
authored
Merge pull request #15 from suhasgumma/C-0057
ValidatingAdmissionPolicy for C-0057
2 parents b855979 + 60e79d4 commit de600fa

File tree

4 files changed

+136
-0
lines changed

4 files changed

+136
-0
lines changed

controls/C-0057/policy.yaml

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
apiVersion: admissionregistration.k8s.io/v1alpha1
2+
kind: ValidatingAdmissionPolicy
3+
metadata:
4+
name: "kubescape-c-0057-privileged-container-denied"
5+
spec:
6+
failurePolicy: Fail
7+
matchConstraints:
8+
resourceRules:
9+
- apiGroups: [""]
10+
apiVersions: ["v1"]
11+
operations: ["CREATE", "UPDATE"]
12+
resources: ["pods"]
13+
- apiGroups: ["apps"]
14+
apiVersions: ["v1"]
15+
operations: ["CREATE", "UPDATE"]
16+
resources: ["deployments","replicasets","daemonsets","statefulsets"]
17+
- apiGroups: ["batch"]
18+
apiVersions: ["v1"]
19+
operations: ["CREATE", "UPDATE"]
20+
resources: ["jobs","cronjobs"]
21+
validations:
22+
- expression: >
23+
object.kind != 'Pod' || object.spec.containers.all(container,
24+
!(has(container.securityContext)) ||
25+
(
26+
(!(has(container.securityContext.privileged)) || container.securityContext.privileged != true) &&
27+
(!(has(container.securityContext.capabilities)) || !(has(container.securityContext.capabilities.add)) ||
28+
container.securityContext.capabilities.add.all(cap, cap != 'SYS_ADM')))
29+
)
30+
message: "Pod has one or more privileged container.(see more at https://hub.armosec.io/docs/c-0057)"
31+
- expression: >
32+
['Deployment','ReplicaSet','DaemonSet','StatefulSet', 'Job'].all(kind, object.kind != kind) || object.spec.template.spec.containers.all(container,
33+
!(has(container.securityContext)) ||
34+
(
35+
(!(has(container.securityContext.priviliged)) || container.securityContext.privileged != true) &&
36+
(!(has(container.securityContext.capabilities)) || !(has(container.securityContext.capabilities.add)) ||
37+
container.securityContext.capabilities.add.all(cap, cap != 'SYS_ADM')))
38+
)
39+
message: "Workloads has one or more privileged container.(see more at https://hub.armosec.io/docs/c-0057)"
40+
- expression: >
41+
object.kind != 'CronJob' || object.spec.jobTemplate.spec.template.spec.containers.all(container,
42+
!(has(container.securityContext)) ||
43+
(
44+
(!(has(container.securityContext.priviliged)) || container.securityContext.privileged != true) &&
45+
(!(has(container.securityContext.capabilities)) || !(has(container.securityContext.capabilities.add)) ||
46+
container.securityContext.capabilities.add.all(cap, cap != 'SYS_ADM')))
47+
)
48+
message: "CronJob has one or more privileged container.(see more at https://hub.armosec.io/docs/c-0057)"

controls/C-0057/tests.json

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
[
2+
{
3+
"name": "Pod having container having securityContext.privileged set to true is denied",
4+
"template": "pod.yaml",
5+
"expected": "fail",
6+
"field_change_list": [
7+
"spec.containers.[0].securityContext.privileged=true"
8+
]
9+
},
10+
{
11+
"name": "Pod having container with \"SYS_ADM\" capability is denied",
12+
"template": "pod-for-list-items.yaml",
13+
"expected": "fail",
14+
"field_change_list": [
15+
]
16+
},
17+
{
18+
"name": "Pod having container having securityContext.privileged set to true and with \"SYS_ADM\" capability is denied",
19+
"template": "pod-for-list-items.yaml",
20+
"expected": "fail",
21+
"field_change_list": [
22+
"spec.containers.[0].securityContext.privileged=true"
23+
]
24+
},
25+
{
26+
"name": "Pod having container not having securityContext.privileged set to true and without \"SYS_ADM\" capability is allowed",
27+
"template": "pod.yaml",
28+
"expected": "pass",
29+
"field_change_list": [
30+
]
31+
},
32+
{
33+
"name": "Deployment having container having securityContext.privileged set to true and with \"SYS_ADM\" capability is denied",
34+
"template": "deployment-for-list-items.yaml",
35+
"expected": "fail",
36+
"field_change_list": [
37+
"spec.template.spec.containers.[0].securityContext.privileged=true"
38+
]
39+
},
40+
{
41+
"name": "Deployment having container not having securityContext.privileged set to true and without \"SYS_ADM\" capability is allowed",
42+
"template": "deployment.yaml",
43+
"expected": "pass",
44+
"field_change_list": [
45+
]
46+
}
47+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: test-deployment
5+
labels:
6+
admission-policy-test: abc
7+
spec:
8+
replicas: 1
9+
selector:
10+
matchLabels:
11+
app: test-deployment
12+
template:
13+
metadata:
14+
labels:
15+
app: test-deployment
16+
spec:
17+
containers:
18+
- name: sleep
19+
image: alpine
20+
command: ["sh"]
21+
args: ["-c", "while true; do sleep 1; done"]
22+
securityContext:
23+
capabilities:
24+
add:
25+
- SYS_ADM
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: test-pod
5+
labels:
6+
admission-policy-test: abc
7+
spec:
8+
containers:
9+
- name: sleep
10+
image: alpine
11+
command: ["sh"]
12+
args: ["-c", "while true; do sleep 1; done"]
13+
securityContext:
14+
capabilities:
15+
add:
16+
- SYS_ADM

0 commit comments

Comments
 (0)