Skip to content

Commit

Permalink
Merge pull request #6889 from Checkmarx/joaom/kics-1218
Browse files Browse the repository at this point in the history
fix(query): improve queries Container Memory Requests Not Equal To It's Limits  and Container CPU Requests Not Equal To It's Limits
  • Loading branch information
asofsilva committed Mar 20, 2024
2 parents a69d801 + a072de6 commit df49c58
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"id": "9d43040e-e703-4e16-8bfe-8d4da10fa7e6",
"queryName": "Container CPU Requests Not Equal To It's Limits",
"queryName": "Container CPU Requests Not Equal To Its Limits",
"severity": "LOW",
"category": "Resource Management",
"category": "Best Practices",
"descriptionText": "A Pod's Containers must have the same CPU requests as limits set, which is recommended to avoid resource DDOS of the node during spikes. This means the 'requests.cpu' must equal 'limits.cpu', and both be defined.",
"descriptionUrl": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
"platform": "Kubernetes",
"descriptionID": "3e1c6d16",
"cwe": ""
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@ import data.generic.common as common_lib
import data.generic.k8s as k8sLib

types := {"initContainers", "containers"}
rec := {"requests", "limits"}

CxPolicy[result] {
document := input.document[i]
document.kind == k8sLib.valid_pod_spec_kind_list[_]
specInfo := k8sLib.getSpecInfo(document)
container := specInfo.spec[types[x]][c]
rec := {"requests", "limits"}

has_request_or_limits(container)
not common_lib.valid_key(container.resources[rec[t]], "cpu")

result := {
Expand Down Expand Up @@ -45,3 +46,9 @@ CxPolicy[result] {
"searchLine": common_lib.build_search_line(split(specInfo.path, "."), [types[x], c, "resources"]),
}
}

has_request_or_limits(x){
common_lib.valid_key(x.resources[rec["requests"]],"cpu")
}else{
common_lib.valid_key(x.resources[rec["limits"]],"cpu")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#this code is a correct code for which the query should not find any result
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: images.my-company.example/app:v4
resources:
requests:
memory: "128Mi"
limits:
memory: "128Mi"
- name: log-aggregator
image: images.my-company.example/log-aggregator:v6
resources:
requests:
memory: "128Mi"
limits:
memory: "128Mi"
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
[
{
"queryName": "Container CPU Requests Not Equal To It's Limits",
"queryName": "Container CPU Requests Not Equal To Its Limits",
"severity": "LOW",
"line": 11,
"fileName": "positive.yaml"
},
{
"queryName": "Container CPU Requests Not Equal To It's Limits",
"queryName": "Container CPU Requests Not Equal To Its Limits",
"severity": "LOW",
"line": 22,
"fileName": "positive.yaml"
},
{
"queryName": "Container CPU Requests Not Equal To It's Limits",
"queryName": "Container CPU Requests Not Equal To Its Limits",
"severity": "LOW",
"line": 26,
"fileName": "positive.yaml"
},
{
"queryName": "Container CPU Requests Not Equal To It's Limits",
"queryName": "Container CPU Requests Not Equal To Its Limits",
"severity": "LOW",
"line": 10,
"fileName": "positive2.yaml"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"id": "aafa7d94-62de-4fbf-8838-b69ee217b0e6",
"queryName": "Container Memory Requests Not Equal To It's Limits",
"queryName": "Container Memory Requests Not Equal To Its Limits",
"severity": "LOW",
"category": "Resource Management",
"descriptionText": "A Pod's Containers must have the same Memory requests as limits set, which is recommended to avoid resource DDOS of the node during spikes. This means the 'requests.memory' must equal 'limits.memory', and both be defined.",
"descriptionUrl": "https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
"platform": "Kubernetes",
"descriptionID": "0c15063c",
"cwe": ""
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@ import data.generic.common as common_lib
import data.generic.k8s as k8sLib

types := {"initContainers", "containers"}
rec := {"requests", "limits"}

CxPolicy[result] {
document := input.document[i]
document.kind == k8sLib.valid_pod_spec_kind_list[_]
specInfo := k8sLib.getSpecInfo(document)
container := specInfo.spec[types[x]][c]
rec := {"requests", "limits"}

has_request_or_limits(container)
not common_lib.valid_key(container.resources[rec[t]], "memory")

result := {
Expand Down Expand Up @@ -48,3 +49,9 @@ CxPolicy[result] {
"searchLine": common_lib.build_search_line(split(specInfo.path, "."), [types[x], c, "resources"])
}
}

has_request_or_limits(x){
common_lib.valid_key(x.resources[rec["requests"]],"memory")
}else{
common_lib.valid_key(x.resources[rec["limits"]],"memory")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: images.my-company.example/app:v4
resources:
requests:
cpu: "500m"
limits:
cpu: "500m"
- name: log-aggregator
image: images.my-company.example/log-aggregator:v6
resources:
requests:
cpu: "500m"
limits:
cpu: "500m"
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
[
{
"queryName": "Container Memory Requests Not Equal To It's Limits",
"queryName": "Container Memory Requests Not Equal To Its Limits",
"severity": "LOW",
"line": 11,
"fileName": "positive.yaml"
},
{
"queryName": "Container Memory Requests Not Equal To It's Limits",
"queryName": "Container Memory Requests Not Equal To Its Limits",
"severity": "LOW",
"line": 22,
"fileName": "positive.yaml"
},
{
"queryName": "Container Memory Requests Not Equal To It's Limits",
"queryName": "Container Memory Requests Not Equal To Its Limits",
"severity": "LOW",
"line": 26,
"fileName": "positive.yaml"
},
{
"queryName": "Container Memory Requests Not Equal To It's Limits",
"queryName": "Container Memory Requests Not Equal To Its Limits",
"severity": "LOW",
"line": 11,
"fileName": "positive2.yaml"
Expand Down

0 comments on commit df49c58

Please sign in to comment.