diff --git a/applications/openshift/networking/routes_rate_limit/rule.yml b/applications/openshift/networking/routes_rate_limit/rule.yml index e7f233819c4..a4c5a2dd9a1 100644 --- a/applications/openshift/networking/routes_rate_limit/rule.yml +++ b/applications/openshift/networking/routes_rate_limit/rule.yml @@ -3,10 +3,10 @@ title: Ensure that all Routes has rate limit enabled description: |- OpenShift has an option to set the rate limit for Routes [1] when creating new Routes. - All routes outside the openshift namespaces and the kube namespaces should use the - rate-limiting annotations. + All routes outside the excluded namespaces (as defined by the variable + ocp4-var-routes-excluded-namespaces-regex) should use the rate-limiting annotations. - [1] https://docs.openshift.com/container-platform/4.9/networking/routes/route-configuration.html#nw-route-specific-annotations_route-configuration + [1] https://docs.openshift.com/container-platform/latest/networking/routes/route-configuration.html#nw-route-specific-annotations_route-configuration rationale: |- The usage of rate limit for Routes provides basic protection against distributed denial-of-service (DDoS) attacks. @@ -19,14 +19,17 @@ references: nist: SC-5,SC-5(1),SC-5(2) srg: SRG-APP-000246-CTR-000605,SRG-APP-000435-CTR-001070 -{{% set jqfilter = '[.items[] | select(.metadata.namespace | startswith("kube-") or startswith("openshift-") | not) | select(.metadata.annotations["haproxy.router.openshift.io/rate-limit-connections"] == "true" | not) | .metadata.name]' %}} +{{% set jqfilter = '[.items[] | select(.metadata.namespace | test("{{.var_routes_excluded_namespaces_regex}}"; "") | not) | select(.metadata.annotations["haproxy.router.openshift.io/rate-limit-connections"] == "true" | not) | .metadata.name]' %}} -ocil_clause: 'Rate limit is not enabled for all routes outside the openshift namespaces' +ocil_clause: 'Rate limit is not enabled for all routes outside the excluded namespaces' ocil: |- - Run the following command to retrieve a list routes that does not have rate limit enabled: -
$ oc get routes --all-namespaces -o json | jq '{{{ jqfilter }}}'
- Make sure that there is output nothing in the result.
+ This rule checks routes that do not have rate limiting enabled and fails if there are
+ routes outside the excluded namespaces (as defined by the variable
+ ocp4-var-routes-excluded-namespaces-regex) without rate limiting annotations.
+ Use following command to list the routes that would fail the test:
+ {{{ ocil_oc_pipe_jq_filter('routes --all-namespaces', jqfilter) }}}
+
severity: medium
diff --git a/applications/openshift/networking/var_routes_excluded_namespaces_regex.var b/applications/openshift/networking/var_routes_excluded_namespaces_regex.var
new file mode 100644
index 00000000000..72a06d44979
--- /dev/null
+++ b/applications/openshift/networking/var_routes_excluded_namespaces_regex.var
@@ -0,0 +1,18 @@
+documentation_complete: true
+
+title: 'Excluded Namespaces for Routes Rate Limit Check'
+
+description: |-
+ A regular expression that lists all namespaces that should be excluded
+ from the routes rate limit compliance check. This is particularly useful
+ for namespaces managed by operators where direct route modifications
+ are not recommended.
+
+type: string
+
+operator: equals
+
+interactive: false
+
+options:
+ default: "^kube-.*|openshift-.*"