Security with a custom keystore for Dynamic Engine environment services
Use a custom keystore for your Dynamic Engine environment to verify signed data integration Job artifacts.
For details about generating and managing keystores in Talend Studio, see Configuring custom Java KeyStore for Job artifact signature.About this task
By default, a Dynamic Engine environment uses the default keystore for artifact signature verification. To verify data integration Job artifacts signed with your own keystore, you must provide the custom keystore and its password when you deploy or upgrade the environment.
You only need to include the public certificate of the root certificate authority (CA) in your custom keystore. The private keys or intermediate certificates are not necessary.
Procedure
Results
Once done successfully, the Dynamic Engine environment services are installed with the custom keystore in your cluster and connect to the Dynamic Engine.
In Talend Management Console, the status of this environment becomes Ready, confirming that it is ready to run tasks or plans.
When a data integration task runs, the artifact signature is verified against the custom keystore first, then the default one. If neither can authenticate the signature, execution does not start and the task appears as failed in Talend Management Console.
- Create the values file for this test pod. In this example, the file is called
check-custom-keystore.yaml.
cat <<EOF > check-custom-keystore.yaml apiVersion: v1 kind: Pod metadata: labels: app.kubernetes.io/managed-by: kubectl name: check-custom-keystore spec: securityContext: runAsNonRoot: true runAsUser: 61000 seccompProfile: type: RuntimeDefault containers: - name: runner image: ghcr.io/talend/jre21-base-minimal:4.0.32 command: - cat tty: true securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL resources: requests: cpu: '0.3' memory: 256Mi limits: cpu: '0.5' memory: 256Mi volumeMounts: - mountPath: /tmp/signature/keystores/default name: signature-check-secret-volume readOnly: true - mountPath: /tmp/signature/keystores/custom name: custom-signature-check-secret-volume readOnly: true volumes: - name: signature-check-secret-volume secret: defaultMode: 420 secretName: signature-check-secret - name: custom-signature-check-secret-volume secret: defaultMode: 420 secretName: custom-signature-check-secret EOF
- Apply the test Pod template:
kubectl apply -n qlik-processing-env-<environment-id> -f check-custom-keystore.yaml
- List keystore contents with keytool:
kubectl exec -it check-custom-keystore -n qlik-processing-env-<environment-id> \ -- /usr/lib/jvm/jdk-21.0.5+11-jre/bin/keytool -list -v -keystore /tmp/signature/keystores/custom/custom-code-verify.jks \ -storepass \$(cat /tmp/signature/keystores/custom/custom-code-verify-jks-password)
This command confirms the custom keystore is mounted and readable in the environment.
- Delete the test Pod when finished:
kubectl delete -n qlik-processing-env-<environment-id> -f check-custom-keystore.yaml