diff --git a/bayernid-proxy-impl/src/main/resources/application-local.yml b/bayernid-proxy-impl/src/main/resources/application-local.yml index f048bc1e34b576c9d95d558300db721823dc58f5..45b76d40d06af3f1110aeb9695f2d91d58724d31 100644 --- a/bayernid-proxy-impl/src/main/resources/application-local.yml +++ b/bayernid-proxy-impl/src/main/resources/application-local.yml @@ -9,3 +9,5 @@ management: grpc: server: port: 9099 + security: + enabled: false \ No newline at end of file diff --git a/bayernid-proxy-impl/src/main/resources/application.yml b/bayernid-proxy-impl/src/main/resources/application.yml index 585def10fad6a8159ba09bfb0edc9e03331a503e..d8bddcd96b4cc50da04548672fb7c4682124b851 100644 --- a/bayernid-proxy-impl/src/main/resources/application.yml +++ b/bayernid-proxy-impl/src/main/resources/application.yml @@ -25,3 +25,10 @@ management: web: exposure: include: "*" + +grpc: + server: + security: + enabled: true + certificate-chain: file:/grpc-tls/tls.crt + private-key: file:/grpc-tls/tls.key \ No newline at end of file diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml index fa602a671a3282c8109f2f2cf671a02aea464be6..89923f7398d52a48fcf04bd168ab784626709b92 100644 --- a/src/main/helm/templates/deployment.yaml +++ b/src/main/helm/templates/deployment.yaml @@ -80,7 +80,10 @@ spec: name: {{ required "ozgcloud.bayernid.certificateSecretName must be set" ((.Values.ozgcloud).bayernid).certificateSecretName }} key: password optional: false - + {{- if .Values.disableGrpcTls }} + - name: grpc_server_security_enabled + value: false + {{- end }} image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}" imagePullPolicy: Always name: bayernid-proxy @@ -140,7 +143,9 @@ spec: readOnly: true - name: temp-dir mountPath: "/tmp" - + - name: bayernid-proxy-grpc-tls-cert + mountPath: "/grpc-tls/" + readOnly: true volumes: - name: bindings configMap: @@ -149,6 +154,10 @@ spec: secret: secretName: {{ required "ozgcloud.bayernid.certificateSecretName must be set" ((.Values.ozgcloud).bayernid).certificateSecretName }} optional: false + - name: bayernid-proxy-grpc-tls-cert + secret: + secretName: bayernid-proxy-grpc-tls-certificate + optional: true - name: temp-dir emptyDir: {} dnsConfig: {} diff --git a/src/main/helm/templates/grpc_certificate.yaml b/src/main/helm/templates/grpc_certificate.yaml new file mode 100644 index 0000000000000000000000000000000000000000..94943b038637c582e735426af31c27de51ec0a47 --- /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: bayernid-proxy-grpc-tls-certificate + namespace: {{ .Release.Namespace }} +spec: + secretName: bayernid-proxy-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/deployment_grpc_tls_test.yaml b/src/test/helm/deployment_grpc_tls_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..fab6810679aab9e1dd6114cd64a5f25fae5c822d --- /dev/null +++ b/src/test/helm/deployment_grpc_tls_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: deployment grpc tls +release: + name: bayernid-proxy + namespace: by-helm-test +templates: + - templates/deployment.yaml +set: + ozgcloud: + environment: test + bayernid: + server: "http://test" + certificateSecretName: "bayernidCertificat" +tests: + - it: should have volume for grpc-tls-cert + asserts: + - contains: + path: spec.template.spec.volumes + content: + name: bayernid-proxy-grpc-tls-cert + secret: + secretName: bayernid-proxy-grpc-tls-certificate + optional: true + - it: should have volume mount for grpc-tls-cert certificate + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: bayernid-proxy-grpc-tls-cert + mountPath: "/grpc-tls/" + readOnly: true + - it: should have volume mount for grpc-tls-cert key + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: bayernid-proxy-grpc-tls-cert + mountPath: "/grpc-tls/" + 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/grpc_certificate_test.yaml b/src/test/helm/grpc_certificate_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..723c35f7433e37a4e2fab2fc0fcfe2e956a2a23e --- /dev/null +++ b/src/test/helm/grpc_certificate_test.yaml @@ -0,0 +1,113 @@ +# +# Copyright (C) 2024 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: bayernid-proxy + namespace: by-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: bayernid-proxy-grpc-tls-certificate + - equal: + path: metadata.namespace + value: by-helm-test + - it: should have secretName + asserts: + - equal: + path: spec.secretName + value: bayernid-proxy-grpc-tls-cert + - it: should have issuerRef + asserts: + - equal: + path: spec.issuerRef.name + value: by-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: "bayernid-proxy" + + - 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: "*.bayernid-proxy.by-helm-test.svc.cluster.local" + - equal: + path: spec.dnsNames[1] + value: "bayernid-proxy.by-helm-test.svc.cluster.local" + - equal: + path: spec.dnsNames[2] + value: "bayernid-proxy.by-helm-test.svc.cluster" + - equal: + path: spec.dnsNames[3] + value: "bayernid-proxy.by-helm-test.svc" + - equal: + path: spec.dnsNames[4] + value: "bayernid-proxy.by-helm-test" + - equal: + path: spec.dnsNames[5] + value: "bayernid-proxy" + + - it: Secret should not exist + set: + disableGrpcTls: true + asserts: + - hasDocuments: + count: 0 \ No newline at end of file