From 978c1f4d77867fa5167330c879206e88510150fc Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Mon, 17 Jun 2024 17:03:03 +0200
Subject: [PATCH] ozg-3938 add truststore network policy

---
 .../truststore/init_truststore_job.yaml       |  1 +
 .../truststore/truststore_cronjob.yaml        |  1 +
 .../truststore/truststore_network_policy.yaml | 46 +++++++++++
 .../truststore/init_truststore_job_test.yaml  |  3 +
 .../truststore/truststore_cronjob_test.yaml   |  3 +
 .../truststore_network_policy_test.yaml       | 78 +++++++++++++++++++
 6 files changed, 132 insertions(+)
 create mode 100644 src/main/helm/templates/truststore/truststore_network_policy.yaml
 create mode 100644 src/test/helm/truststore/truststore_network_policy_test.yaml

diff --git a/src/main/helm/templates/truststore/init_truststore_job.yaml b/src/main/helm/templates/truststore/init_truststore_job.yaml
index 6285cf7b..6a25bfd6 100644
--- a/src/main/helm/templates/truststore/init_truststore_job.yaml
+++ b/src/main/helm/templates/truststore/init_truststore_job.yaml
@@ -39,6 +39,7 @@ spec:
       name: init-user-manager-truststore-job
       labels:
         {{- include "app.defaultLabels" . | indent 8 }}
+        component: user-manager-create-truststore
     spec:
       serviceAccountName: truststore-init-service-account
       initContainers:
diff --git a/src/main/helm/templates/truststore/truststore_cronjob.yaml b/src/main/helm/templates/truststore/truststore_cronjob.yaml
index 34e2f1fe..11b378e5 100644
--- a/src/main/helm/templates/truststore/truststore_cronjob.yaml
+++ b/src/main/helm/templates/truststore/truststore_cronjob.yaml
@@ -39,6 +39,7 @@ spec:
           name: renew-user-manager-truststore-cronjob
           labels:
             {{- include "app.defaultLabels" . | indent 12 }}
+            component: user-manager-create-truststore
         spec:
           serviceAccountName: truststore-secret-service-account
           initContainers:
diff --git a/src/main/helm/templates/truststore/truststore_network_policy.yaml b/src/main/helm/templates/truststore/truststore_network_policy.yaml
new file mode 100644
index 00000000..e82f3161
--- /dev/null
+++ b/src/main/helm/templates/truststore/truststore_network_policy.yaml
@@ -0,0 +1,46 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+{{- if not (.Values.networkPolicy).disabled }} 
+apiVersion: networking.k8s.io/v1
+kind: NetworkPolicy
+metadata:
+  name: network-policy-user-manager-create-truststore
+  namespace: {{ .Release.Namespace }} 
+spec:
+  podSelector:
+    matchLabels:
+      component: user-manager-create-truststore
+  policyTypes:
+    - Egress
+  egress:
+  # kube api
+  - to:
+    - ipBlock: 
+        cidr: 172.18.0.1/32
+    - ipBlock: 
+        cidr: 10.0.0.0/8
+    ports:
+    - port: 6443
+    - port: 443
+{{- end }} 
diff --git a/src/test/helm/truststore/init_truststore_job_test.yaml b/src/test/helm/truststore/init_truststore_job_test.yaml
index 1a764f60..eee4e660 100644
--- a/src/test/helm/truststore/init_truststore_job_test.yaml
+++ b/src/test/helm/truststore/init_truststore_job_test.yaml
@@ -115,6 +115,9 @@ tests:
       - equal:
           path: spec.template.metadata.labels["ozgcloud-mongodb-client"]
           value: "true"
+      - equal:
+          path: spec.template.metadata.labels["component"]
+          value: "user-manager-create-truststore"
 
   - it: check job serviceaccountname
     asserts:
diff --git a/src/test/helm/truststore/truststore_cronjob_test.yaml b/src/test/helm/truststore/truststore_cronjob_test.yaml
index 1329ae06..14135866 100644
--- a/src/test/helm/truststore/truststore_cronjob_test.yaml
+++ b/src/test/helm/truststore/truststore_cronjob_test.yaml
@@ -115,6 +115,9 @@ tests:
       - equal:
           path: spec.jobTemplate.spec.template.metadata.labels["ozgcloud-mongodb-client"]
           value: "true"
+      - equal:
+          path: spec.jobTemplate.spec.template.metadata.labels["component"]
+          value: "user-manager-create-truststore"
 
   - it: check cronJob serviceaccountname
     asserts:
diff --git a/src/test/helm/truststore/truststore_network_policy_test.yaml b/src/test/helm/truststore/truststore_network_policy_test.yaml
new file mode 100644
index 00000000..b751093b
--- /dev/null
+++ b/src/test/helm/truststore/truststore_network_policy_test.yaml
@@ -0,0 +1,78 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: truststore network policy test
+release:
+  namespace: by-helm-test
+templates:
+  - templates/truststore/truststore_network_policy.yaml
+tests:
+  - it: should match apiVersion
+    asserts:
+      - isAPIVersion:
+          of: networking.k8s.io/v1
+  - it: should match kind
+    asserts:
+      - isKind:
+          of: NetworkPolicy
+  - it: validate metadata
+    asserts:
+      - equal:
+          path: metadata
+          value:
+            name: network-policy-user-manager-create-truststore
+            namespace: by-helm-test
+  - it: should have podSelector component user-manager-create-truststore
+    asserts:
+      - equal:
+          path: spec.podSelector
+          value:
+              matchLabels:
+                component: user-manager-create-truststore
+  - it: should have policyTypes egress
+    asserts:
+      - equal:
+          path: spec.policyTypes
+          value:
+              - Egress
+  - it: validate egress policy
+    asserts:
+      - contains:
+          path: spec.egress
+          content:
+              to:
+              - ipBlock: 
+                  cidr: 172.18.0.1/32
+              - ipBlock: 
+                  cidr: 10.0.0.0/8
+              ports:
+              - port: 6443
+              - port: 443
+  - it: test network policy disabled
+    set:
+      networkPolicy:
+        disabled: true
+    asserts:
+      - hasDocuments:
+          count: 0
\ No newline at end of file
-- 
GitLab