diff --git a/src/main/helm/templates/client_certificates.yaml b/src/main/helm/templates/client_certificates.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c52df70969a97c9327146158073b516d0e31cb2a --- /dev/null +++ b/src/main/helm/templates/client_certificates.yaml @@ -0,0 +1,47 @@ +{{- range $idx, $cn := .Values.clientCertificateCommonNames }} +{{- with $ -}} +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ .Release.Name }}-{{ $cn | lower }}-tls-certificate + namespace: {{ include "app.namespace" . }} + labels: + {{- include "app.defaultLabels" . | indent 4 }} +spec: + isCA: false + secretName: {{ .Release.Name }}-{{ $cn | lower }}-tls-secret + privateKey: + algorithm: ECDSA + size: 256 + issuerRef: + name: {{ include "app.namespace" . }}-ca-issuer + kind: Issuer + duration: 8760h0m0s # 1 Jahr + renewBefore: 5840h0m0s # 8 Monate + commonName: {{ $cn }} + subject: + organizations: + - "XtaTestOrga" + countries: + - DE + organizationalUnits: + - "XtaTestUnit{{ $idx }}" + localities: + - Kiel + provinces: + - Schleswig-Holstein + streetAddresses: + - "Test-Str. {{ $idx }}" + postalCodes: + - "22222" + # critical, digitalSignature, nonRepudiation, keyEncipherment, keyAgreement + usages: + - client auth + - digital signature + - content commitment # https://cryptography.io/en/latest/x509/reference/#cryptography.x509.KeyUsage.content_commitment + - key encipherment + - key agreement + +--- +{{ end -}} +{{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/network_policy.yaml b/src/main/helm/templates/network_policy.yaml index 8c490c4f1baa31bfd31d00285e868b43d88a8a60..deac83a9c9a567c2b50f14ae4d59f8925577fea0 100644 --- a/src/main/helm/templates/network_policy.yaml +++ b/src/main/helm/templates/network_policy.yaml @@ -2,16 +2,18 @@ apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: - name: network-policy-xta-test-server + name: {{ .Release.Name }}-network-policy namespace: {{ include "app.namespace" . }} spec: podSelector: matchLabels: - component: xta-test-server + {{- include "app.matchLabels" . | indent 6 }} policyTypes: - Ingress - Egress ingress: + - ports: + - port: 8443 - from: - namespaceSelector: matchLabels: @@ -19,13 +21,6 @@ spec: ports: - protocol: TCP port: 8081 - - from: - - podSelector: - matchLabels: - component: vorgang-manager - ports: - - protocol: TCP - port: 8080 {{- with (.Values.networkPolicy).additionalIngressConfigLocal }} {{ toYaml . | indent 2 }} {{- end }} diff --git a/src/main/helm/values.yaml b/src/main/helm/values.yaml index 072e1c91e8bc3c35b8007d0ec3a76c34da6bbe11..9fe80af86bf6f295bcd48273f6e6bdd63c411568 100644 --- a/src/main/helm/values.yaml +++ b/src/main/helm/values.yaml @@ -29,3 +29,7 @@ image: name: xta-test-server tag: latest +clientCertificateCommonNames: + - clientA + - clientB + - clientC diff --git a/src/test/helm/certificate_test.yaml b/src/test/helm/certificate_test.yaml index 54c44014602749e8d539008e68d7b79fb8477eeb..b91e5d2c9bdd01542b0f44ca938308e46db76d7c 100644 --- a/src/test/helm/certificate_test.yaml +++ b/src/test/helm/certificate_test.yaml @@ -53,6 +53,11 @@ tests: - equal: path: spec.commonName value: xta-test-server-release-name + - it: should use cluster ca as issuer + asserts: + - equal: + path: spec.issuerRef.name + value: sh-helm-test-ca-issuer - it: should set dns names asserts: - equal: diff --git a/src/test/helm/client_certificates_test.yaml b/src/test/helm/client_certificates_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2ae85cae3bb8ed2701267936f5a39977c7085080 --- /dev/null +++ b/src/test/helm/client_certificates_test.yaml @@ -0,0 +1,74 @@ +# +# 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: test client_certificates.yaml +release: + name: xta-test-server-release-name + namespace: sh-helm-test +templates: + - templates/client_certificates.yaml +set: + ozgcloud: + bezeichner: helm + baseUrl: test.by.ozg-cloud.de + +tests: + - it: should configure three certificates by default + asserts: + - hasDocuments: + count: 3 + - it: should contain a Certificate document + set: + clientCertificateCommonNames: + - CommonName + asserts: + - containsDocument: + kind: Certificate + apiVersion: cert-manager.io/v1 + name: xta-test-server-release-name-commonname-tls-certificate + namespace: sh-helm-test + - it: should set common name + set: + clientCertificateCommonNames: + - CommonName + asserts: + - equal: + path: spec.commonName + value: CommonName + - it: should set secret name + set: + clientCertificateCommonNames: + - CommonName + asserts: + - equal: + path: spec.secretName + value: xta-test-server-release-name-commonname-tls-secret + - it: should use cluster ca as issuer + set: + clientCertificateCommonNames: + - CommonName + asserts: + - equal: + path: spec.issuerRef.name + value: sh-helm-test-ca-issuer diff --git a/src/test/helm/network_policy_test.yaml b/src/test/helm/network_policy_test.yaml index ff25d1850ac14fcf073efcf34ee88b08cd43ba72..5a00166bd6872bde24534bf803308b076604f340 100644 --- a/src/test/helm/network_policy_test.yaml +++ b/src/test/helm/network_policy_test.yaml @@ -28,7 +28,6 @@ release: namespace: by-helm-test templates: - templates/network_policy.yaml - tests: - it: should match apiVersion set: @@ -52,52 +51,18 @@ tests: - equal: path: metadata value: - name: network-policy-xta-test-server + name: xta-test-server-network-policy namespace: by-helm-test - it: validate spec set: networkPolicy: dnsServerNamespace: kube-system asserts: - - equal: - path: spec - value: - egress: - - ports: - - port: 53 - protocol: UDP - - port: 53 - protocol: TCP - - port: 5353 - protocol: UDP - - port: 5353 - protocol: TCP - to: - - namespaceSelector: - matchLabels: - kubernetes.io/metadata.name: kube-system - ingress: - - from: - - namespaceSelector: - matchLabels: - name: openshift-user-workload-monitoring - ports: - - port: 8081 - protocol: TCP - - from: - - podSelector: - matchLabels: - component: vorgang-manager - ports: - - port: 8080 - protocol: TCP - podSelector: - matchLabels: - component: xta-test-server - policyTypes: - - Ingress - - Egress - + - contains: + path: spec.ingress + content: + ports: + - port: 8443 - it: add ingress rule by values local set: