# Injizieren von Umgebungsvariablen über Kubernetes Secret

Injizieren Sie sensible Daten (Passwörter, API-Schlüssel, Token) aus Kubernetes Secret als Umgebungsvariablen in Ihren Job-Tasks (Datenintegration, Big Data und Datenservices) und Routen-Tasks, damit sie leicht und sicher auf Anmeldedaten zugreifen können.

InformationshinweisWichtig: Ihre sensiblen Daten werden im Kubernetes Secret gespeichert und von der Sicherheitsrichtlinie Ihrer Organisation verwaltet. Das Dynamic Engine-Anpassungsmuster stellt nur den Zugriff auf diese Informationen für die Tasks bereit, die in Ihren Dynamic Engine-Umgebungen implementiert sind. Qlik verwaltet Ihre sensiblen Daten nicht.

## Vorbereitungen

Weitere Informationen finden Sie unter „[Voraussetzungen und wichtige Überlegungen](https://help.qlik.com/talend/de-DE/dynamic-engine-configuration-guide/Cloud/custom-kubernetes-resource-mounting)“.

## Prozedur

1. Erstellen Sie eine Kubernetes Secret-Ressourcendatei mit sensiblen Daten.

   Erstellen Sie eine Datei mit dem Namen external-secret-as-env.yaml, die Ihre sensiblen Daten enthält:
   ```
   cat <<EOF > external-secret-as-env.yaml
   apiVersion: v1
   kind: Secret
   metadata:
     name: external-secret-as-env
     namespace: qlik-processing-env-$DYNAMIC_ENGINE_ENVIRONMENT_ID
   type: Opaque
   stringData:
     DATABASE_PASSWORD: "mySecurePassword123"
     API_KEY: "your_key"
     AUTH_TOKEN: "Bearer your_token"
   EOF
   ```

   Ersetzen Sie die Beispiel-Anmeldedaten durch Ihre tatsächlichen sensiblen Daten.

   Dynamic Engine verwaltet Ihre sensiblen Daten nicht. Weitere Informationen dazu, wie Daten in einem Kubernetes Secret codiert werden, finden Sie unter [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) in der Kubernetes-Dokumentation.
2. Erstellen Sie eine Helm-Wertedatei, die das Secret referenziert.

   Erstellen Sie eine Datei, z. B. mit dem Namen secret-values.yaml. Wählen Sie den Ansatz, der zu Ihrem Anwendungsfall passt:
   * Injizieren Sie alle Secret-Schlüssel als Umgebungsvariablen mit additionalSpec.envFrom (Masseninjektion):

     ```
     configuration:
       jobDeployment:
         additionalSpec:
           enabled: true
           envFrom:
             - secretRef:
                 name: external-secret-as-env
     ```

     Bei diesem Ansatz werden alle Schlüssel aus dem Secret als Umgebungsvariablen geladen: DATABASE\_PASSWORD, API\_KEY und AUTH\_TOKEN.

   * Injizieren Sie selektiv bestimmte Secret-Schlüssel mit additionalSpec.env (detaillierte Steuerung):

     ```
     configuration:
       jobDeployment:
         additionalSpec:
           enabled: true
           env:
             - name: DATABASE_PASSWORD
               valueFrom:
                 secretKeyRef:
                   name: external-secret-as-env
                   key: DATABASE_PASSWORD
             - name: API_KEY
               valueFrom:
                 secretKeyRef:
                   name: external-secret-as-env
                   key: API_KEY
     ```

     Bei diesem Ansatz werden selektiv nur die benötigten Schlüssel injiziert, und alle anderen Secret-Schlüssel bleiben für den Pod nicht erreichbar.
3. Implementieren oder aktualisieren Sie Ihre Dynamic Engine-Umgebung, um den erforderlichen Namespace zu erstellen.
   ```
   helm upgrade --install dynamic-engine-environment-$DYNAMIC_ENGINE_ENVIRONMENT_ID \
     oci://ghcr.io/talend/helm/dynamic-engine-environment \
     --version ${DYNAMIC_ENGINE_VERSION} \
     -f $DYNAMIC_ENGINE_ENVIRONMENT_ID-values.yaml
   ```

   Ersetzen Sie ${DYNAMIC\_ENGINE\_VERSION} mit der Version Ihrer Umgebung.

   Mit diesem Befehl werden die Dynamic Engine-Umgebung und ihr zugeordneter Namespace qlik-processing-env-$DYNAMIC\_ENGINE\_ENVIRONMENT\_ID erstellt.
4. Erstellen Sie das Secret im Namespace Ihrer Dynamic Engine-Umgebung.
   ```
   kubectl apply -f external-secret-as-env.yaml
   ```

   Mit diesem Befehl wird die Secret-Ressource in Ihrem Kubernetes-Cluster erstellt. Das Secret kann jetzt von allen Pods im Namespace der Umgebung verwendet werden.
5. Aktualisieren Sie Ihre Dynamic Engine-Umgebung mit der Secret-Konfiguration.
   ```
   helm upgrade dynamic-engine-environment-$DYNAMIC_ENGINE_ENVIRONMENT_ID \
     oci://ghcr.io/talend/helm/dynamic-engine-environment \
     --version ${DYNAMIC_ENGINE_VERSION} \
     -f $DYNAMIC_ENGINE_ENVIRONMENT_ID-values.yaml \
     -f secret-values.yaml
   ```

   Ersetzen Sie ${DYNAMIC\_ENGINE\_VERSION} mit der Version Ihrer Umgebung.

   Mit diesem Befehl wird Ihre Secret-Konfiguration auf die Dynamic Engine-Umgebung angewendet. Sensible Daten sind jetzt als Umgebungsvariablen in allen implementierten Tasks verfügbar.
6. Überprüfen Sie, ob die Secret-Umgebungsvariablen in laufenden Pods verfügbar sind.

   Überprüfen Sie, ob das Secret korrekt injiziert wurde, indem Sie den Befehl entsprechend der gewählten Injektionsmethode verwenden:

   Wenn Sie Masseninjektion mit envFrom verwendet haben:
   ```
   kubectl get pod -n qlik-processing-env-$DYNAMIC_ENGINE_ENVIRONMENT_ID <pod-name> \
     -o jsonpath='{.spec.containers[*].envFrom}'
   ```

   Die erwartete Ausgabe bestätigt die Secret-Referenz:
   ```
   [{"secretRef":{"name":"external-secret-as-env"}}]
   ```

   Wenn Sie selektive Injektion mit env verwendet haben:
   ```
   kubectl get pod -n qlik-processing-env-$DYNAMIC_ENGINE_ENVIRONMENT_ID <pod-name> \
     -o jsonpath='{.spec.containers[*].env}'
   ```

   Die erwartete Ausgabe zeigt, dass Ihre ausgewählten Secret-Schlüssel als Umgebungsvariablen gemountet sind.

## Ergebnisse

Tasks in der Dynamic Engine-Umgebung haben jetzt sicheren Zugriff auf sensible Anmeldedaten von Kubernetes Secrets. Sie können Anmeldedaten rotieren, indem Sie das Secret aktualisieren. Die Änderungen werden wie folgt angewendet:

* Datenintegrations-Tasks (einschließlich Big Data-Tasks) sind einmalige Tasks. Die aktualisierten Werte werden gelesen, wenn die nächste Task-Ausführung beginnt.
* Routen und Datenservices sind dauerhaft aktive Tasks; sie laden die Secret-Änderungen nicht automatisch. [Aktualisieren Sie die Task in Talend Management Console](https://help.qlik.com/talend/de-DE/dynamic-engine-configuration-guide/Cloud/updating-data-service-and-route-tasks-in-dee "Sie können ohne Ausfallzeit die Artefakt-Version einer in einer Dynamic Engine-Umgebung implementierten Datenservices- oder Routen-Task aktualisieren oder deren Konfiguration ändern."), um eine erneute Implementierung in Ihrer Dynamic Engine-Umgebung auszulösen.