Skip to content

Commit c5bd9ca

Browse files
committed
Update memory resource validation in C-0004 control
- Modify memory resource validation to use `quantity().asInteger()` for correct parsing - Update test cases to use Kubernetes memory unit suffixes (Mi, Gi, Ki) - Expand memory resource configuration range in default and basic control configurations - Ensure consistent memory resource validation across Pod, Workload, and CronJob resources Signed-off-by: Ben <[email protected]>
1 parent 2841287 commit c5bd9ca

File tree

4 files changed

+30
-28
lines changed

4 files changed

+30
-28
lines changed

configuration/basic-control-configuration.yaml

+4-4
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ settings:
4545
- 5
4646
maxHighVulnerabilities:
4747
- 10
48-
memoryLimitMax: 256
49-
memoryLimitMin: 32
50-
memoryRequestMax: 256
51-
memoryRequestMin: 32
48+
memoryLimitMax: 4294967296
49+
memoryLimitMin: 0
50+
memoryRequestMax: 4294967296
51+
memoryRequestMin: 0
5252
publicRegistries:
5353
- docker.io
5454
- gcr.io

controls/C-0004/policy.yaml

+12-12
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,27 @@ spec:
2828
validations:
2929
- expression: >
3030
object.kind != 'Pod' || object.spec.containers.all(container, (!(!(has(container.resources)) || !(has(container.resources.requests)) || !(has(container.resources.requests.memory))) &&
31-
params.settings.memoryRequestMin <= int(container.resources.requests.memory) &&
32-
params.settings.memoryRequestMax >= int(container.resources.requests.memory)) &&
31+
params.settings.memoryRequestMin <= quantity(container.resources.requests.memory).asInteger() &&
32+
params.settings.memoryRequestMax >= quantity(container.resources.requests.memory).asInteger()) &&
3333
(!(!(has(container.resources.limits)) || !(has(container.resources.limits.memory))) &&
34-
params.settings.memoryLimitMin <= int(container.resources.limits.memory) &&
35-
params.settings.memoryLimitMax >= int(container.resources.limits.memory)))
34+
params.settings.memoryLimitMin <= quantity(container.resources.limits.memory).asInteger()&&
35+
params.settings.memoryLimitMax >= quantity(container.resources.limits.memory).asInteger()))
3636
message: "Pods contains container/s with memory limit or request not set or they are not in the specified range! (see more at https://hub.armosec.io/docs/c-0004)"
3737
3838
- expression: >
3939
['Deployment','ReplicaSet','DaemonSet','StatefulSet','Job'].all(kind, object.kind != kind) || object.spec.template.spec.containers.all(container, (!(!(has(container.resources)) || !(has(container.resources.requests)) || !(has(container.resources.requests.memory))) &&
40-
params.settings.memoryRequestMin <= int(container.resources.requests.memory) &&
41-
params.settings.memoryRequestMax >= int(container.resources.requests.memory)) &&
40+
params.settings.memoryRequestMin <= quantity(container.resources.requests.memory).asInteger() &&
41+
params.settings.memoryRequestMax >= quantity(container.resources.requests.memory).asInteger()) &&
4242
(!(!(has(container.resources.limits)) || !(has(container.resources.limits.memory))) &&
43-
params.settings.memoryLimitMin <= int(container.resources.limits.memory) &&
44-
params.settings.memoryLimitMax >= int(container.resources.limits.memory)))
43+
params.settings.memoryLimitMin <= quantity(container.resources.limits.memory).asInteger() &&
44+
params.settings.memoryLimitMax >= quantity(container.resources.limits.memory).asInteger()))
4545
message: "Workloads contains container/s with memory limit or request not set or they are not in the specified range! (see more at https://hub.armosec.io/docs/c-0004)"
4646
4747
- expression: >
4848
object.kind != 'CronJob' || object.spec.jobTemplate.spec.template.spec.containers.all(container, (!(!(has(container.resources)) || !(has(container.resources.requests)) || !(has(container.resources.requests.memory))) &&
49-
params.settings.memoryRequestMin <= int(container.resources.requests.memory) &&
50-
params.settings.memoryRequestMax >= int(container.resources.requests.memory)) &&
49+
params.settings.memoryRequestMin <= quantity(container.resources.requests.memory).asInteger() &&
50+
params.settings.memoryRequestMax >= quantity(container.resources.requests.memory).asInteger()) &&
5151
(!(!(has(container.resources.limits)) || !(has(container.resources.limits.memory))) &&
52-
params.settings.memoryLimitMin <= int(container.resources.limits.memory) &&
53-
params.settings.memoryLimitMax >= int(container.resources.limits.memory)))
52+
params.settings.memoryLimitMin <= quantity(container.resources.limits.memory).asInteger() &&
53+
params.settings.memoryLimitMax >= quantity(container.resources.limits.memory).asInteger()))
5454
message: "CronJob contains container/s with memory limit or request not set or they are not in the specified range! (see more at https://hub.armosec.io/docs/c-0004)"

controls/C-0004/tests.json

+10-8
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,25 @@
1111
"template": "pod.yaml",
1212
"expected": "fail",
1313
"field_change_list": [
14-
"spec.containers.[0].resources.requests.memory=128"
14+
"spec.containers.[0].resources.requests.memory=128Mi"
1515
]
1616
},
1717
{
1818
"name": "Pod with container having memory request and limits set and both values in the limit is allowed",
1919
"template": "pod.yaml",
2020
"expected": "pass",
2121
"field_change_list": [
22-
"spec.containers.[0].resources.requests.memory=128",
23-
"spec.containers.[0].resources.limits.memory=128"
22+
"spec.containers.[0].resources.requests.memory=128Mi",
23+
"spec.containers.[0].resources.limits.memory=128Mi"
2424
]
2525
},
2626
{
27-
"name": "Pod with container having memory request and limits set and values not in the limit is blocked",
27+
"name": "Pod with container having memory request and limits set and values out of the range is blocked",
2828
"template": "pod.yaml",
2929
"expected": "fail",
3030
"field_change_list": [
31-
"spec.containers.[0].resources.requests.memory=16",
32-
"spec.containers.[0].resources.limits.memory=512"
31+
"spec.containers.[0].resources.requests.memory=16Mi",
32+
"spec.containers.[0].resources.limits.memory=512Gi"
3333
]
3434
},
3535
{
@@ -44,15 +44,17 @@
4444
"template": "deployment.yaml",
4545
"expected": "pass",
4646
"field_change_list": [
47-
"spec.template.spec.containers.[0].resources.requests.memory=128",
48-
"spec.template.spec.containers.[0].resources.limits.memory=128"
47+
"spec.template.spec.containers.[0].resources.requests.memory=128Mi",
48+
"spec.template.spec.containers.[0].resources.limits.memory=128Mi"
4949
]
5050
},
5151
{
5252
"name": "CronJob with container having memory request and limits set and both values in the limit is allowed",
5353
"template": "cronjob.yaml",
5454
"expected": "pass",
5555
"field_change_list": [
56+
"spec.jobTemplate.spec.template.spec.containers.[0].resources.requests.memory=128Ki",
57+
"spec.jobTemplate.spec.template.spec.containers.[0].resources.limits.memory=128Ki"
5658
]
5759
}
5860
]

test-resources/default-control-configuration.yaml

+4-4
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ settings:
4646
- 5
4747
maxHighVulnerabilities:
4848
- 10
49-
memoryLimitMax: 256
50-
memoryLimitMin: 32
51-
memoryRequestMax: 256
52-
memoryRequestMin: 32
49+
memoryLimitMax: 4294967296
50+
memoryLimitMin: 0
51+
memoryRequestMax: 4294967296
52+
memoryRequestMin: 0
5353
publicRegistries:
5454
- docker.io
5555
- gcr.io

0 commit comments

Comments
 (0)