Skip to content

Commit c6fc553

Browse files
committed
Refactor workload connection checks to use pod specifications in exposure rules
1 parent f9a862f commit c6fc553

File tree

4 files changed

+46
-10
lines changed

4 files changed

+46
-10
lines changed

rules/exposure-to-internet-via-istio-ingress/raw.rego

+21-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ deny[msga] {
4545
is_same_namespace(connected_service, wl)
4646
spec_template_spec_patterns := {"Deployment", "ReplicaSet", "DaemonSet", "StatefulSet", "Pod", "Job", "CronJob"}
4747
spec_template_spec_patterns[wl.kind]
48-
wl_connected_to_service(wl, connected_service)
48+
pod := get_pod_spec(wl)["spec"]
49+
wl_connected_to_service(pod, connected_service)
4950

5051
# print("Found the workload that the service is connected to", wl)
5152

@@ -177,3 +178,22 @@ get_fqsn(ns, dest_host) = fqsn {
177178
}
178179

179180

181+
182+
# get_volume - get resource spec paths for {"Deployment","ReplicaSet","DaemonSet","StatefulSet","Job"}
183+
get_pod_spec(resources) := result {
184+
resources_kinds := {"Deployment","ReplicaSet","DaemonSet","StatefulSet","Job"}
185+
resources_kinds[resources.kind]
186+
result = {"spec": resources.spec.template, "start_of_path": "spec.template."}
187+
}
188+
189+
# get_volume - get resource spec paths for "Pod"
190+
get_pod_spec(resources) := result {
191+
resources.kind == "Pod"
192+
result = {"spec": resources, "start_of_path": ""}
193+
}
194+
195+
# get_volume - get resource spec paths for "CronJob"
196+
get_pod_spec(resources) := result {
197+
resources.kind == "CronJob"
198+
result = {"spec": resources.spec.jobTemplate.spec.template.spec, "start_of_path": "spec.jobTemplate.spec.template.spec."}
199+
}

rules/exposure-to-internet-via-istio-ingress/test/failed_with_beta/expected.json

+1-4
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,7 @@
171171
}
172172
],
173173
"selector": {
174-
"app": "int-0721",
175-
"context": "default",
176-
"name": "int-0721",
177-
"role": "app"
174+
"app": "nginx"
178175
},
179176
"sessionAffinity": "None",
180177
"type": "ClusterIP"

rules/exposure-to-internet-via-istio-ingress/test/failed_with_beta/input/service.yaml

+1-4
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,7 @@ spec:
3434
protocol: TCP
3535
targetPort: 8080
3636
selector:
37-
app: int-0721
38-
context: default
39-
name: int-0721
40-
role: app
37+
app: nginx
4138
sessionAffinity: None
4239
type: ClusterIP
4340
status:

rules/exposure-to-internet/raw.rego

+23-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ deny[msga] {
99
wl := input[_]
1010
spec_template_spec_patterns := {"Deployment", "ReplicaSet", "DaemonSet", "StatefulSet", "Pod", "Job", "CronJob"}
1111
spec_template_spec_patterns[wl.kind]
12-
wl_connected_to_service(wl, service)
12+
pod := get_pod_spec(wl)["spec"]
13+
wl_connected_to_service(pod, service)
1314
failPath := ["spec.type"]
1415
msga := {
1516
"alertMessage": sprintf("workload '%v' is exposed through service '%v'", [wl.metadata.name, service.metadata.name]),
@@ -124,3 +125,24 @@ is_same_namespace(metadata1, metadata2) {
124125
not metadata1.namespace
125126
metadata2.namespace == "default"
126127
}
128+
129+
130+
131+
# get_volume - get resource spec paths for {"Deployment","ReplicaSet","DaemonSet","StatefulSet","Job"}
132+
get_pod_spec(resources) := result {
133+
resources_kinds := {"Deployment","ReplicaSet","DaemonSet","StatefulSet","Job"}
134+
resources_kinds[resources.kind]
135+
result = {"spec": resources.spec.template, "start_of_path": "spec.template."}
136+
}
137+
138+
# get_volume - get resource spec paths for "Pod"
139+
get_pod_spec(resources) := result {
140+
resources.kind == "Pod"
141+
result = {"spec": resources, "start_of_path": ""}
142+
}
143+
144+
# get_volume - get resource spec paths for "CronJob"
145+
get_pod_spec(resources) := result {
146+
resources.kind == "CronJob"
147+
result = {"spec": resources.spec.jobTemplate.spec.template.spec, "start_of_path": "spec.jobTemplate.spec.template.spec."}
148+
}

0 commit comments

Comments
 (0)