diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl index ab423e16f5310c6877bca73c6653625d4b3a5d92..7c94e6cfd9851532d35296171f68cff8ba0e46b2 100644 --- a/src/main/helm/templates/_helpers.tpl +++ b/src/main/helm/templates/_helpers.tpl @@ -73,14 +73,6 @@ app.kubernetes.io/namespace: {{ include "app.namespace" . }} {{ printf "dns://%s.%s:9090" .Values.vorgangmanagerName .Release.Namespace }} {{- end -}} -{{- define "app.databaseTlsCert" -}} -{{- if ((.Values.database).tls).secretName -}} -{{ .Values.database.tls.secretName }} -{{- else -}} -{{ printf "ozg-mongodb-tls-cert" }} -{{- end -}} -{{- end -}} - {{- define "app.databaseSecretName" -}} {{- if (.Values.database).secretName -}} {{ .Values.database.secretName }} diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml index a214474306bab66d3938489b9d640cff05320762..6d03c88dcda954769c7fab112d81621e91f4d6fa 100644 --- a/src/main/helm/templates/deployment.yaml +++ b/src/main/helm/templates/deployment.yaml @@ -218,6 +218,12 @@ spec: {{- end}} {{- end }} {{- end}} + + {{- if .Values.disableGrpcTls }} + - name: grpc_server_security_enabled + value: false + {{- end }} + {{- if or (.Values.database).useExternal (.Values.ozgcloudProxyApi).apikey }} envFrom: {{- if (.Values.database).useExternal }} @@ -303,16 +309,18 @@ spec: subPath: ca.crt readOnly: true {{- end }} - - name: mongodb-root-ca - mountPath: "/bindings/ca-certificates/mongodb-root-ca.pem" - subPath: ca.crt - readOnly: true {{- if not .Values.disableUserManagerGrpcTls }} - name: user-manager-tls-certificate mountPath: "/bindings/ca-certificates/user-manager-tls-ca.pem" subPath: ca.crt readOnly: true {{- end }} + - name: namespace-ca-cert + mountPath: "/bindings/namespace-certificate" + readOnly: true + - name: vorgang-manager-grpc-tls-cert + mountPath: "/grpc-tls" + readOnly: true volumes: - name: bindings configMap: @@ -323,15 +331,26 @@ spec: secretName: {{ .Values.elasticsearch.certificateSecretName }} optional: false {{- end }} - - name: mongodb-root-ca - secret: - secretName: {{ include "app.databaseTlsCert" . }} - optional: true {{- if not .Values.disableUserManagerGrpcTls }} - name: user-manager-tls-certificate secret: secretName: user-manager-tls-cert {{- end }} + - name: vorgang-manager-grpc-tls-cert + secret: + secretName: vorgang-manager-grpc-tls-cert + optional: true + - name: namespace-ca-cert + projected: + sources: + - secret: + name: {{ include "app.namespace" . }}-ca-cert + optional: true + items: + - key: ca.crt + path: ca.crt + - configMap: + name: bindings-type dnsConfig: {} dnsPolicy: ClusterFirst imagePullSecrets: diff --git a/src/main/helm/templates/grpc_certificate.yaml b/src/main/helm/templates/grpc_certificate.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3dea75430d07ba387affc6c3578e175156b07c9a --- /dev/null +++ b/src/main/helm/templates/grpc_certificate.yaml @@ -0,0 +1,49 @@ +# +# 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.disableGrpcTls }} +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: vorgang-manager-grpc-tls-certificate + namespace: {{ .Release.Namespace }} +spec: + secretName: vorgang-manager-grpc-tls-cert + issuerRef: + name: {{ .Release.Namespace }}-ca-issuer + kind: Issuer + duration: 8760h0m0s # 1 Jahr + renewBefore: 5840h0m0s # 8 Monate + commonName: {{ .Release.Name }} + privateKey: + algorithm: RSA + encoding: PKCS8 + dnsNames: + - "*.{{ .Release.Name }}.{{ .Release.Namespace }}.svc.cluster.local" + - "{{ .Release.Name }}.{{ .Release.Namespace }}.svc.cluster.local" + - "{{ .Release.Name }}.{{ .Release.Namespace }}.svc.cluster" + - "{{ .Release.Name }}.{{ .Release.Namespace }}.svc" + - "{{ .Release.Name }}.{{ .Release.Namespace }}" + - "{{ .Release.Name }}" +{{- end }} \ No newline at end of file diff --git a/src/test/helm/certificate_grpc_tls_test.yaml b/src/test/helm/certificate_grpc_tls_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..292630bc3b43810a6567e448bb7954721632cebf --- /dev/null +++ b/src/test/helm/certificate_grpc_tls_test.yaml @@ -0,0 +1,113 @@ +# +# 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: grpc tls certificate +release: + name: vorgang-manager + namespace: sh-helm-test +templates: + - templates/grpc_certificate.yaml +tests: + - it: should contains header data + asserts: + - isAPIVersion: + of: cert-manager.io/v1 + - isKind: + of: Certificate + - it: should have metadata + asserts: + - equal: + path: metadata.name + value: vorgang-manager-grpc-tls-certificate + - equal: + path: metadata.namespace + value: sh-helm-test + - it: should have secretName + asserts: + - equal: + path: spec.secretName + value: vorgang-manager-grpc-tls-cert + - it: should have issuerRef + asserts: + - equal: + path: spec.issuerRef.name + value: sh-helm-test-ca-issuer + - equal: + path: spec.issuerRef.kind + value: Issuer + - it: should have duration + asserts: + - equal: + path: spec.duration + value: 8760h0m0s + - it: should have renewBefore + asserts: + - equal: + path: spec.renewBefore + value: 5840h0m0s + - it: should have commonName + asserts: + - equal: + path: spec.commonName + value: "vorgang-manager" + + - it: should privateKey algorith + asserts: + - equal: + path: spec.privateKey.algorithm + value: RSA + + - it: should privateKey encoding + asserts: + - equal: + path: spec.privateKey.encoding + value: PKCS8 + + - it: should have dnsNames + asserts: + - equal: + path: spec.dnsNames[0] + value: "*.vorgang-manager.sh-helm-test.svc.cluster.local" + - equal: + path: spec.dnsNames[1] + value: "vorgang-manager.sh-helm-test.svc.cluster.local" + - equal: + path: spec.dnsNames[2] + value: "vorgang-manager.sh-helm-test.svc.cluster" + - equal: + path: spec.dnsNames[3] + value: "vorgang-manager.sh-helm-test.svc" + - equal: + path: spec.dnsNames[4] + value: "vorgang-manager.sh-helm-test" + - equal: + path: spec.dnsNames[5] + value: "vorgang-manager" + + - it: Secret should not exist + set: + disableGrpcTls: true + asserts: + - hasDocuments: + count: 0 \ No newline at end of file diff --git a/src/test/helm/deployment_grpc_tls_test.yaml b/src/test/helm/deployment_grpc_tls_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..91494cfe62d56ef514d6446fa88271ef437079a1 --- /dev/null +++ b/src/test/helm/deployment_grpc_tls_test.yaml @@ -0,0 +1,96 @@ +# +# 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: deployment grpc tls +release: + name: vorgang-manager + namespace: sh-helm-test +templates: + - templates/deployment.yaml +set: + ozgcloud: + environment: test + imagePullSecret: test-image-pull-secret +tests: + - it: should have volume for grpc-tls-cert + template: deployment.yaml + asserts: + - contains: + path: spec.template.spec.volumes + content: + name: vorgang-manager-grpc-tls-cert + secret: + secretName: vorgang-manager-grpc-tls-cert + optional: true + - it: should have volume mount for grpc-tls-cert certificate + template: deployment.yaml + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: vorgang-manager-grpc-tls-cert + mountPath: /grpc-tls + readOnly: true + - it: should have volume for namespace ca-cert + template: deployment.yaml + asserts: + - contains: + path: spec.template.spec.volumes + content: + name: namespace-ca-cert + projected: + sources: + - secret: + items: + - key: ca.crt + path: ca.crt + name: sh-helm-test-ca-cert + optional: true + - configMap: + name: bindings-type + - it: should have volume mount for namespace ca-cert + template: deployment.yaml + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: namespace-ca-cert + mountPath: "/bindings/namespace-certificate" + readOnly: true + - it: should not contain grpc_server_security_enabled env + asserts: + - notContains: + path: spec.template.spec.containers[0].env + content: + name: grpc_server_security_enabled + any: true + - it: should contain grpc_server_security_enabled env + set: + disableGrpcTls: true + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: grpc_server_security_enabled + value: false \ No newline at end of file diff --git a/src/test/helm/deployment_mongodb_test.yaml b/src/test/helm/deployment_mongodb_test.yaml index f63e3bb80bfce479451601935979dab04a63975d..7daf5d3196bd7c34413c8aff2741a9159c3a1fdd 100644 --- a/src/test/helm/deployment_mongodb_test.yaml +++ b/src/test/helm/deployment_mongodb_test.yaml @@ -48,13 +48,6 @@ tests: content: name: spring_data_mongodb_database value: vorgang-manager-database - - contains: - path: spec.template.spec.volumes - content: - name: mongodb-root-ca - secret: - secretName: ozg-mongodb-tls-cert - optional: true - it: check external mongodb release: @@ -100,46 +93,3 @@ tests: content: name: spring_data_mongodb_database value: vorgang-manager-database - - - it: check mongodb root ca mount - release: - name: vorgang-manager - asserts: - - contains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: mongodb-root-ca - mountPath: "/bindings/ca-certificates/mongodb-root-ca.pem" - subPath: ca.crt - readOnly: true - - contains: - path: spec.template.spec.volumes - content: - name: mongodb-root-ca - secret: - secretName: ozg-mongodb-tls-cert - optional: true - - - it: check mongodb tls set tls cert name - release: - name: vorgang-manager - set: - database: - tls: - enabled: true - secretName: secret-tls-cert - asserts: - - contains: - path: spec.template.spec.containers[0].volumeMounts - content: - name: mongodb-root-ca - mountPath: "/bindings/ca-certificates/mongodb-root-ca.pem" - subPath: ca.crt - readOnly: true - - contains: - path: spec.template.spec.volumes - content: - name: mongodb-root-ca - secret: - secretName: secret-tls-cert - optional: true \ No newline at end of file diff --git a/vorgang-manager-server/src/main/resources/application-local.yml b/vorgang-manager-server/src/main/resources/application-local.yml index f575ac6f04eaec08c1ea13a5f28d849eebe0576c..15d41145cd61a3361eed5d6dbee23eab53abcc88 100644 --- a/vorgang-manager-server/src/main/resources/application-local.yml +++ b/vorgang-manager-server/src/main/resources/application-local.yml @@ -26,6 +26,13 @@ grpc: zufi-manager: address: static://127.0.0.1:9190 negotiationType: PLAINTEXT + pluto: + negotiationType: PLAINTEXT + email: + negotiationType: PLAINTEXT + server: + security: + enabled: false spring: data: diff --git a/vorgang-manager-server/src/main/resources/application.yml b/vorgang-manager-server/src/main/resources/application.yml index 1c96d03c86950e43426a68826593bcfb73efbeb0..199ca973f38f2efa7bc7a93b79c20cf21c0d21e0 100644 --- a/vorgang-manager-server/src/main/resources/application.yml +++ b/vorgang-manager-server/src/main/resources/application.yml @@ -23,24 +23,30 @@ grpc: client: pluto: address: self:self - negotiationType: PLAINTEXT + negotiationType: TLS vorgang-manager: address: self:self - negotiationType: PLAINTEXT + negotiationType: TLS user-manager: negotiationType: TLS email: address: self:self - negotiationType: PLAINTEXT + negotiationType: TLS nachrichten-manager: address: self:self - negotiationType: PLAINTEXT + negotiationType: TLS info-manager: negotiationType: TLS command-manager: address: self:self negotiationType: PLAINTEXT + server: + security: + enabled: true + certificate-chain: file:/grpc-tls/tls.crt + private-key: file:/grpc-tls/tls.key + management: server: port: 8081