# Injecter des variables d'environnement depuis le Secret Kubernetes

Injectez des données sensibles (mots de passe, clés API, jetons) du Secret Kubernetes comme variables d'environnement dans vos tâches de Jobs (Intégration de données, Big Data et services de données) et de Routes pour qu'elles puissent accéder simplement et de manière sécurisée aux identifiants.

Note InformationsImportant : Vos données sensibles sont stockées dans votre Secret Kubernetes et gérées par la politique de sécurité de votre entreprise. Le modèle de personnalisation de Dynamic Engine fournit uniquement l'accès à ces informations aux tâches déployées dans vos environnements de Dynamic Engine. Qlik ne gère pas vos données sensibles.

## Avant de commencer

Pour plus d'informations, consultez [Prérequis et considérations à prendre en compte](https://help.qlik.com/talend/fr-FR/dynamic-engine-configuration-guide/Cloud/custom-kubernetes-resource-mounting).

## Procédure

1. Créez un fichier de ressources Secret Kubernetes avec des données sensibles.

   Créez un fichier nommé external-secret-as-env.yaml contenant vos données sensibles :
   ```
   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
   ```

   Remplacez les identifiants d'exemple par vos données réelles et sensibles.

   Le Dynamic Engine ne gère pas vos données sensibles. Pour plus d'informations concernant l'encodage des données dans le Secret Kubernetes, consultez [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) (en anglais) dans la documentation Kubernetes.
2. Créez un fichier de valeurs Helm référençant le Secret.

   Créez un fichier nommé, par exemple, secret-values.yaml. Choisissez l'approche correspondant à votre cas d'utilisation :
   * Injectez toutes les clés Secret comme variables d'environnement à l'aide de additionalSpec.envFrom (injection de masse) :

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

     Cette approche charge toutes les clés de Secret comme variables d'environnement : DATABASE\_PASSWORD, API\_KEY et AUTH\_TOKEN.

   * Injectez, de manière sélective, les clés de Secret spécifiques à l'aide de additionalSpec.env (contrôle granulaire fin) :

     ```
     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
     ```

     Cette approche injecte, de manière sélective, les seules clés dont vous avez besoin, laissant les autres clés de Secret inaccessibles pour le pod.
3. Déployez ou mettez à niveau votre environnement de Dynamic Engine pour créer l'espace de noms requis.
   ```
   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
   ```

   Remplacez ${DYNAMIC\_ENGINE\_VERSION} par la version de votre environnement.

   Cette commande crée l'environnement de Dynamic Engine et son espace de noms associé qlik-processing-env-$DYNAMIC\_ENGINE\_ENVIRONMENT\_ID.
4. Créez le Secret dans l'espace de nom de votre environnement de Dynamic Engine.
   ```
   kubectl apply -f external-secret-as-env.yaml
   ```

   Cette commande crée la ressource Secret dans votre cluster Kubernetes. La ressource Secret est disponible pour utilisation par tous les pods de l'espace de noms de l'environnement.
5. Mettez à niveau votre environnement de Dynamic Engine avec la configuration de Secret.
   ```
   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
   ```

   Remplacez ${DYNAMIC\_ENGINE\_VERSION} par la version de votre environnement.

   Cette commande applique votre configuration Secret à l'environnement de Dynamic Engine. Les données sensibles sont à présent disponibles en tant que variables d'environnement dans toutes les tâches déployées.
6. Vérifiez que les variables d'environnement de Secret sont disponibles dans les pods en cours d'exécution.

   Vérifiez que le Secret est bien injecté à l'aide de la commande correspondant à la méthode d'injection :

   Si vous avez utilisé une injection de masse avec envFrom :
   ```
   kubectl get pod -n qlik-processing-env-$DYNAMIC_ENGINE_ENVIRONMENT_ID <pod-name> \
     -o jsonpath='{.spec.containers[*].envFrom}'
   ```

   La sortie attendue confirme la référence du Secret :
   ```
   [{"secretRef":{"name":"external-secret-as-env"}}]
   ```

   Si vous avez utilisé une injection spécifique avec env :
   ```
   kubectl get pod -n qlik-processing-env-$DYNAMIC_ENGINE_ENVIRONMENT_ID <pod-name> \
     -o jsonpath='{.spec.containers[*].env}'
   ```

   La sortie attendue affiche vos clés Secret sélectionnées montées comme variables d'environnement.

## Résultats

Les tâches de votre environnement de Dynamic Engine ont à présent un accès sécurisé aux identifiants sensibles provenant du Secret Kubernetes. Vous pouvez effectuer une rotation des identifiants en mettant à jour le Secret. Les modifications sont appliquées comme suit :

* Les tâches d'Intégration de données, y compris Big Data, sont des tâches ponctuelles. Les valeurs mises à jour sont lues lorsque l'exécution de la tâche suivante démarre.
* Les Routes et les services de données sont des tâches AlwaysOn. Ces tâches ne chargent pas automatiquement les modifications apportées au Secret. [Mettez à jour la tâche dans Talend Management Console](https://help.qlik.com/talend/fr-FR/dynamic-engine-configuration-guide/Cloud/updating-data-service-and-route-tasks-in-dee "Vous pouvez mettre à jour la version de vos artefacts ou modifier la configuration d'une tâche de service de données ou de Route déployée dans un environnement de Dynamic Engine sans interrompre vos activités.") pour déclencher un nouveau déploiement dans votre environnement de Dynamic Engine.