Skip to content

Commit 1cd23ff

Browse files
authored
Merge pull request #24 from suhasgumma/C-0046
ValidatingAdmissionPolicy for C-0046
2 parents 3b3ffb7 + ddae198 commit 1cd23ff

File tree

4 files changed

+101
-1
lines changed

4 files changed

+101
-1
lines changed

controls/C-0046/policy.yaml

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

controls/C-0046/tests.json

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
[
2+
{
3+
"name": "Pod having container with capabilities not set is allowed",
4+
"template": "pod.yaml",
5+
"expected": "pass",
6+
"field_change_list": [
7+
]
8+
},
9+
{
10+
"name": "Pod having container with NET_RAW capability is blocked",
11+
"template": "pod-capabilities.yaml",
12+
"expected": "fail",
13+
"field_change_list": [
14+
]
15+
},
16+
{
17+
"name": "Pod having containers with capabilities set but not from insecure capabilities list is allowed",
18+
"template": "pod-for-list-items.yaml",
19+
"expected": "pass",
20+
"field_change_list": [
21+
]
22+
},
23+
{
24+
"name": "Deployment having container with capabilities not set is allowed",
25+
"template": "deployment.yaml",
26+
"expected": "pass",
27+
"field_change_list": [
28+
]
29+
},
30+
{
31+
"name": "Deployment having container with NET_RAW capability is blocked",
32+
"template": "deployment-for-list-items.yaml",
33+
"expected": "fail",
34+
"field_change_list": [
35+
]
36+
}
37+
]

test-resources/deployment-for-list-items.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ spec:
2222
securityContext:
2323
capabilities:
2424
add:
25-
- SYS_ADM
25+
- SYS_ADM
26+
- NET_RAW

test-resources/pod-capabilities.yaml

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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: ["sudo", sh"]
12+
args: ["-c", "while true; do sleep 1; done"]
13+
securityContext:
14+
capabilities:
15+
add:
16+
- SYS_ADM
17+
- NET_RAW

0 commit comments

Comments
 (0)