Les secrets sont des objets Kubernetes qui permettent de stocker des informations confidentielles.

Une bonne gestion des secrets est essentielle pour maintenir la sécurité de votre SystemLink Enterprise déploiement. Vous devez créer des secrets avant de déployer SystemLink Enterprise. Vous devez gérer les secrets conformément aux politiques de sécurité de votre organisation.

Cette section décrit les besoins secrets SystemLink Enterprise et fournit des conseils sur la gestion sécurisée des secretsSystemLink Enterprise.

Les secrets mentionnés dans cette rubrique sont requis et sont de type Opaque (sauf indication contraire).

Gestion sécurisée des secrets

Vous pouvez gérer les secrets en utilisant deux approches principales :

  • Helm-Managed Secrets: Définissez des secrets dans le fichier systemlink-secrets.yaml. Vous déployez des secrets sur le cluster Kubernetes dans le cadre de l'installation Helm. Cette approche est plus simple à configurer mais nécessite des étapes supplémentaires pour crypter le fichier des secrets pour un stockage sécurisé dans le contrôle de version.
  • Gestion des secrets externes : stockez et gérez les secrets dans un système de gestion des secrets externe tel que HashiCorp Vault, AWS Secrets Manager ou Azure Key Vault. Les secrets sont synchronisés au cluster Kubernetes en utilisant des outils tels que l'opérateur de secrets externes. Cette approche permet une gestion centralisée des secrets.
Remarque Lorsque vous faites pivoter des secrets, les pods Kubernetes qui utilisent des secrets comme variables d'environnement risquent de ne pas utiliser automatiquement les dernières valeurs de secrets. Vous devez redémarrer les pods pour récupérer les variables d'environnement mises à jour. Les secrets montés en volume se mettront automatiquement à jour mais risquent d'avoir un délai de propagation.

Secrets gérés par Helm avec fichiers de valeurs chiffrées

Lorsque vous utilisez Helm pour gérer des secrets, configurez le paramètre global.deploySecrets à vrai dans systemlink-values.yaml. Définissez les secrets dans le fichier systemlink-secrets.yaml et déployez-les sur le cluster pendant l'installation ou la mise à niveau Helm.

Pour stocker en toute sécurité le fichier systemlink-secrets.yaml dans le contrôle de version, vous devez le crypter. Une approche consiste à utiliser le plug-in Helm Secrets avec Mozilla SOPS (Secrets OPerationS).

Utilisation de Helm Secrets et Mozilla SOPS :

Le plug-in Helm Secrets s’intègre à Mozilla SOPS pour crypter et décrypter les fichiers de valeurs Helm. SOPS prend en charge plusieurs backends de cryptage, y compris AWS KMS, Azure Key Vault, Google Cloud KMS et PGP.

Pour utiliser Helm Secrets :

  1. Installez le plug-in Helm Secrets :
    helm plugin install https://github.com/jkroepke/helm-secrets --version <version>
  2. Installez Mozilla SOPS en suivant les instructions d'installation SOPS.
  3. Configurez votre backend de cryptage (AWS KMS, Azure Key Vault, GCP KMS ou PGP). Reportez-vous à la documentation SOPS pour plus de détails sur la configuration.
  4. Cryptez votre fichier systemlink-secrets.yaml :
    helm secrets encrypt systemlink-secrets.yaml
  5. Déployez SystemLink Enterprise en utilisant mise-à-niveau de helm secrets plutôt que des commandes mise-à-niveau de helm. Le plug-in Helm Secrets décrypte automatiquement le fichier de valeurs chiffrées pendant le déploiement.

Vous pouvez valider le fichier systemlink-secrets.yaml chiffré en toute sécurité dans le contrôle de version.

Remarque Lorsque vous utilisez des secrets gérés par Helm, les secrets décryptés sont stockés comme objets Kubernetes Secret dans le cluster. Envisagez d'activer le chiffrement Kubernetes au repos pour protéger les secrets stockés dans etcd.

Outils de gestion de secrets externes

Les outils de gestion de secrets externes fournissent un stockage et une gestion centralisés des secrets en dehors du cluster Kubernetes. Les secrets sont synchronisés avec Kubernetes en utilisant des opérateurs ou des agents. Lorsque vous utilisez la gestion de secrets externes, définissez le paramètre global.deploySecrets à faux dans systemlink-values.yaml pour empêcher Helm de déployer des secrets.

Remarque Définissez le paramètre global.deploySecrets à faux si vous voulez gérer manuellement les secrets sur le cluster en dehors de l'installation Helm. Changer cette valeur de vrai à faux pendant une mise à niveau supprimera les secrets existants.
Opérateur de secrets externes :

L'opérateur de secrets externes est un opérateur Kubernetes qui synchronise les secrets des systèmes de gestion de secrets externes avec les objets Kubernetes Secret. L'opérateur supporte plusieurs backends, notamment HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, Google Cloud Secret Manager, etc.

Pour utiliser l'opérateur de secrets externes :

  1. Installez External Secrets Operator dans votre cluster Kubernetes en suivant le guide d'installation.
  2. Configurez une ressource SecretStore ou ClusterSecretStore qui définit la connexion à votre système de gestion de secrets externe. Reportez-vous à la documentation spécifique au gestionnaire pour plus de détails sur la configuration.
  3. Créez des ressources ExternalSecret pour chaque SystemLink Enterprise secret. L'opérateur synchronisera les secrets de votre système externe avec Kubernetes.
  4. Définissez global.deploySecrets: false dans systemlink-values.yaml.
  5. Déployez SystemLink Enterprise en utilisant Helm.

Meilleures pratiques de sécurité

Pour en savoir plus sur les secrets et la sécurité Kubernetes, reportez-vous à la documentation Kubernetes Secrets et aux Kubernetes Good Practices for Secrets.

Exemples de format de secret

Cette section fournit des exemples de génération et de visualisation de secrets dans Kubernetes. Les secrets sont stockés au format base64 dans le cluster.

Génération de clés de chiffrement :

Utilisez OpenSSL ou des outils similaires pour générer des clés aléatoires sûres cryptographiquement.

  • Clés AES-256 (32 octets) :
    openssl rand -base64 32

    Exemple de sortie :

    h8F3mK9pL2nQ7vR4tY6uE1wX5zA8bC0dD2fG4hJ6k=
  • Clés AES-128 (16 octets) :
    openssl rand -base64 16
    

    Exemple de sortie :

    mK9pL2nQ7vR4tY6u
  • Clés AEAD (32 octets) :
    openssl rand -base64 32
    

    Exemple de sortie :

    p2sT4uV5wX8yA9bC0dD2fG4hJ6kL7mN9qR2sT5vW8=
  • Clés de signature SHA-256 (32-64 octets) :
    openssl rand -base64 48
    

    Exemple de sortie :

    G4hJ6kL7mN9qR2sT4uV5wX8yA9bC0dD2fG4hJ6kL7mN9qR2sT4uV5wX8yA9b
  • Clés API whitelistées (42 octets) :
    openssl rand -base64 42
    

    Exemple de sortie :

    kL7mN9qR2sT4uV5wX8yA9bC0dD2fG4hJ6kL7mN9qR2sT4uV5w=
  • MongoDB Replica Set Key :

    Les clés du jeu de réplicas MongoDB sont utilisées pour authentifier les pods dans le cluster de base de données. Reportez-vous à la documentation MongoDB pour obtenir des instructions de génération de clés.

  • RabbitMQ Erlang Cookie:
    openssl rand -hex 32
    

    Exemple de sortie :

    a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2
  • Clés RSA pour Salt Master :

    Utilisées pour la communication Salt Master avec les minions. Doivent être au format PKCS1.

    # Generate RSA private key (4096-bit)
    openssl genrsa 4096
    # Generate RSA public key from private key
    openssl rsa -in private_key.pem -pubout -outform PEM
    

    Exemple de clé privée :

    -----BEGIN RSA PRIVATE KEY-----
    MIIJKAIBAAKCAgEA1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL
    ...
    -----END RSA PRIVATE KEY-----
    

    Exemple de clé publique :

    -----BEGIN PUBLIC KEY-----
    MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1234567890abcdefgh
    ...
    -----END PUBLIC KEY-----
  • Format de chaîne de connexion MongoDB :

    Reportez-vous à Configuring MongoDB for SystemLink Enterprise pour obtenir des exemples et des formats de chaînes de connexion.

  • Format de chaîne de connexion PostgreSQL :

    Reportez-vous à PostgreSQL pour obtenir des exemples de chaînes de connexion et des détails de configuration.

  • Affichage des secrets dans Kubernetes :

    Utilisez kubectl pour afficher les secrets déployés sur le cluster. Les données secrètes sont encodées en base64 :

    # View a secret in YAML format
    kubectl get secret webserver-session -n systemlink -o yaml
    

    Exemple de sortie :

    apiVersion: v1
    kind: Secret
    metadata:
      name: webserver-apikey
      namespace: systemlink
    type: Opaque
    data:
      encryptionKey: aDhGM21LOXBMMm5RN3ZSNHRZNnVFMXdYNXpBOGJDMGQ=
      signatureKey: RDJmRzRoSjZrN21MOHBOOXFSMnNUNHVWNXdYOHlBOWI=
    

    Décodage d'une valeur secrète :

    kubectl get secret webserver-session -n systemlink -o jsonpath='{.data.encryptionKey}' | base64 -d
  • Création manuelle de secrets :

    Si vous n'utilisez pas de secrets gérés par Helm, créez des secrets directement avec kubectl :

    # Create a secret with multiple fields
    kubectl create secret generic oidc-secret \
      --from-literal=clientId='my-client-id' \
      --from-literal=clientSecret='my-client-secret' \
      --from-literal=jwks='' \
      -n systemlink

Secrets Image Pull

Le dépôt de conteneurs NI qui héberge SystemLink Enterprise est privé et requiert un accès par authentification. Les informations d'identification à SystemLink Enterprise doivent vous avoir été communiquées. Configurez les secrets d'extraction d'image pour SystemLink Enterprise à l'aide du tableau global.imagePullSecrets dans systemlink-values.yaml et systemlink-admin-values.yaml. Les secrets Image Pull doivent être conformes au format kubernetes.io/dockerconfigjson.

Tableau 10. Secrets Image Pull
Secret Détails
niartifacts-secret

Secrets d'authentification

Tableau 11. Secrets d'authentification
Secret Détails
oidc-secret Identifie SystemLink Enterprise auprès de votre fournisseur d'authentification OpenID Connect (OIDC) et comprend les champs suivants.
  • clientId : un ID de client OIDC.
  • clientSecret : secret correspondant à clientId.
  • Jwks : ensemble de clés Web JSON. Si aucun n'est requis, laissez la valeur de chaîne vide.

Clés API sur liste d’autorisation

SystemLink Enterprise utilise des clés API Whitelisted pour authentifier les communications service à service entre clusters. Les clés API Whitelisted sont utilisées pour les opérations qui ne s'exécutent pas dans le contexte d'un utilisateur spécifique. Ce secret contient un champ unique.
  • apiKey : séquence de 42 octets de chiffres aléatoires encodée en base64.
Si vous gérez des secrets avec Helm, utilisez la valeur userservices.secrets.whitelistedApiKeys dans systemlink-secrets.yaml pour définir chaque secret et son hachage associé. Servez-vous du script generate_whitelisted_key.sh pour simplifier la génération de clés.
Tableau 12. Clés API sur liste d’autorisation
Secret Détails
alarmservice-apikey
alarmserviceroutineexecutor-apikey
assetservice-apikey
comments-apikey
dashboardhost-apikey
jupyterhub-apikey
nbexec-argo-workflow-apikey
routineeventtrigger-apikey
routineexecutor-apikey
routinescheduletrigger-apikey
saltmaster-init-apikey
sessionmanagerservice-apikey
systemsmanagement-service-apikey
tageventprocessor-apikey
testmonitor-apikey
webserver-apikey
workorder-apikey

Hachages de clés API sur liste d’autorisation

Tableau 13. Hachages de clés API sur liste d’autorisation
Secret Détails
userservices-apikey-whitelist Permet de gérer la liste des clés API approuvées, sur liste d’autorisation. Ce secret contient un champ unique.
  • whitelistedApiKeyHashes : tableau de hachages héxadécimaux SHA-512, séparés par des virgules, sans espace blanc ni séparateur de fin.

Clés de cryptage

Tableau 14. Clés de cryptage
Secret Détails
fileingestionservices-encryption-key

Champ : encryptionKey

Type de clé : AES-256

Encodage : Base64

fileingestionservices-download-encryption-key

Champ : encryptionKey

Type de clé : AES-256

Encodage : Base64

saltmaster-rsa-keys

Champ : saltmaster-private-key

Type : RSA

Format : PKCS

Champ : saltmaster-private-key

Type : RSA

Format : PKCS1

systemsmanagementservice-dataprotection

Champ : aesKey

Type de clé : AES-128

Encodage : Base64

systemsstateservice-dataprotection

Champ : aesKey

Type de clé : AES-128

Encodage : Base64

taghistorian-continuation-token

Champ : encryptionKey

Type de clé : AEAD

Longueur de clé : 32 octets

Encodage : Base64

userservices-continuation-token

Champ : encryptionKey

Type de clé : AEAD

Longueur de clé : 32 octets

Encodage : Base64

webappservices-continuation-token

Champ : encryptionKey

Type de clé : AEAD

Longueur de clé : 32 octets

Encodage : Base64

webserver-session

Champ : encryptionKey

Type de clé : AES-128

Encodage : Base64

Champ : signatureKey

Type de clé : SHA-256

Encodage : Base64

Informations d'identification de tiers

Utilisez les secrets Kubernetes pour authentifier des services tiers, notamment MongoDB, PostgreSQL, Elasticsearch, Dremio et RabbitMQ.

Informations d'identification Elasticsearch

Remarque Le secret suivant n'est requis que lors du déploiement d'Elasticsearch dans le cadre de l'installation de SystemLink Enterprise.
Tableau 15. Informations d'identification Elasticsearch
Secret Détails
sl-elasticsearch-filescdc-secret Identifiants pour l'authentification avec l'instance Elasticsearch. Utilisé par les services fileingestion et fileingestioncdc. Ce secret contient le champ suivant :
  • password: Mot de passe pour l'utilisateur filescdc Elasticsearch.

Identifiants Dremio

Tableau 16. Identifiants Dremio
Secret Détails
nidataframe-dremio-credentials Contient les champs suivants :
  • username : nom d'utilisateur utilisé pour accéder à l'instance Dremio.
  • password : mot de passe pour l'accès à l'instance Dremio.
nidataframe-nessie-credentials Jeton porteur pour l'authentification Dremio avec Nessie. Ce secret contient le champ suivant :
  • bearerToken: jeton porteur pour l'authentification avec l'API Nessie. Peut être n'importe quelle valeur aléatoire.

Identifiants Grafana

Tableau 17. Identifiants Grafana
Secret Détails
grafana-login Permet de définir un administrateur pour Grafana avec les champs suivants :
  • admin-user : nom d'utilisateur.
  • admin-password: mot de passe pour admin-user.

Identifiants MongoDB

Toutes les instances MongoDB stockent les informations d'identification dans un secret contenant les champs suivants :

Remarque Si vous avez votre propre instance MongoDB, il vous suffit de remplir mongodb-connection-string.
  • mongodb-root-password : mot de passe octroyant des droits superutilisateur au cluster de base de données.
  • mongodb-passwords : tableau de mots de passe octroyant tous un accès complet à une base de données individuelle. Ces mots de passe ne peuvent pas comprendre de virgules ou autres caractères réservés, comme défini par la spécification URL IETF.
    Remarque Séparez les mots de passe par des virgules. N'utilisez pas d'espace blanc ni de séparateur de fin. Par exemple : motdepasse1,motdepasse2. Tous les secrets correspondant à des identifiants MongoDB, à l'exception de userservices-mongodb-credentials et saltmaster-mongodb-credentials, nécessitent un mot de passe.
  • mongodb-replica-set-key : clé pour l'authentification des nœuds dans un jeu de réplicas MongoDB.
  • mongodb-connection-string: la chaîne de connexion, y compris les informations d'identification, pour l'authentification à la base de données MongoDB.
Tableau 18. Identifiants MongoDB
Secret Détails
assetservice-mongodb-credentials
locationservice-mongodb-credentials
fileingestionservices-mongodb-credentials
nbexecservice-mongodb-credentials
nicomments-mongodb-credentials
nidataframe-mongodb-credentials
nispecificationmanagement-mongodb-credentials Installation facultative
niworkorder-mongodb-credentials Installation facultative
notification-mongodb-credentials
repositoryservice-mongodb-credentials
routines-mongodb-credentials
routinescheduletrigger-mongodb-credentials
systemsmanagementservice-mongodb-credentials
systemsstateservice-mongodb-credentials
saltmaster-mongodb-credentials Nécessite deux mots de passe mongodb-passwords : l'un pour la base de données des minions et l'autre pour la base de données des pillars (dans cet ordre).
taghistoriandb-mongodb-credentials
tags-mongodb-credentials
userdata-mongodb-credentials
userservices-mongodb-credentials Nécessite deux mongodb-passwords : l'un mot de passe pour la base de données des utilisateurs et l'autre mot de passe pour la base de données des clés (dans cet ordre).
webappservices-mongodb-credentials

Identifiants PostgreSQL

Tableau 19. Identifiants PostgreSQL
Secret Détails
dashboardhost-postgres-secrets Contient les champs suivants :
  • host : nom d'hôte associé au serveur PostgreSQL.
  • user : nom d'utilisateur PostgreSQL.
  • password: mot de passe pour l'utilisateur.
testmonitorservicedb-connection Présente deux formes avec les champs suivants, selon que la connexion à la base de données a été définie avec une chaîne de connexion ou en tant que paramètres. La chaîne de connexion comprend le champ suivant :
  • connection-string : chaîne de connexion PostgreSQL.
Les paramètres de connexion comprennent le champ suivant :
  • password : mot de passe pour l'utilisateur défini avec la valeur testmonitorservice.database.connectionInfo.user.
dynamicformfields-postgres-connection Présente deux formes avec les champs suivants, selon que la connexion à la base de données a été définie avec une chaîne de connexion ou en tant que paramètres. La chaîne de connexion comprend le champ suivant :
  • connection-string : chaîne de connexion PostgreSQL.
Les paramètres de connexion comprennent le champ suivant :
  • password: mot de passe pour l'utilisateur défini avec la valeur dynamicformfields.database.connectionInfo.user.

Informations d'identification du serveur proxy

Tableau 20. Informations d'identification du serveur proxy
Secret Détails
webserver-proxy-credentials Identifiants pour l'authentification avec un serveur proxy afin d'accéder à un fournisseur OIDC. Ce secret contient les champs suivants :
  • username : nom d'utilisateur du serveur proxy.
  • password: Le mot de passe du nom d'utilisateur.

Identifiants RabbitMQ

Tableau 21. Identifiants RabbitMQ
Secret Détails
rabbitmq-user Identifiants pour l'authentification avec l'instance RabbitMQ. Ce secret contient les champs suivants :
  • rabbitmq-user : nom d'utilisateur.
  • rabbitmq-password : mot de passe associé à rabbitmq-user.
rabbitmq-erlang-cookie Valeur de cookie Erlang. Ce secret contient un champ unique :
  • rabbitmq-erlang-cookie : valeur de cookie Erlang.

Identifiants Redis

Tableau 22. Identifiants Redis
Secret Détails
webserver-redis-credentials Contient le champ suivant :
  • password : mot de passe pour l'accès à la base de données Redis.

Amazon S3 Credentials

Remarque

Une configuration SystemLink Enterprise requiert les secrets suivants lorsque vous utilisez un fournisseur de stockage de fichiers Amazon S3 ou compatible Amazon S3.

Tableau 23. Amazon S3 Credentials
Secret Détails
feeds-s3-credentials Contient les champs suivants :
  • aws-access-key-id : nom d'utilisateur ou ID de clé d'accès S3 pour l'accès S3.
  • aws-secret-access-key : mot de passe ou ID de clé d'accès S3 pour l'accès S3.
fileingestion-s3-credentials Contient les champs suivants :
  • aws-access-key-id : nom d'utilisateur ou ID de clé d'accès S3 pour l'accès S3.
  • aws-secret-access-key : mot de passe ou ID de clé d'accès S3 pour l'accès S3.
nbexecservice-s3-credentials Contient les champs suivants :
  • aws-access-key-id : nom d'utilisateur ou ID de clé d'accès S3 pour l'accès S3.
  • aws-secret-access-key : mot de passe ou ID de clé d'accès S3 pour l'accès S3.
nidataframe-s3-credentials Contient les champs suivants :
  • access-key-id : nom d'utilisateur ou ID de clé d'accès S3 pour l'accès S3.
  • secret-access-key : mot de passe ou ID de clé d'accès S3 pour l'accès S3.

Identifiants de stockage Azure

Remarque Une configuration SystemLink Enterprise requiert les secrets suivants lorsque vous utilisez un fournisseur de stockage de fichiers Azure Storage.
Tableau 24. Identifiants de stockage Azure
Secret Détails
feeds-azure-credentials Contient les champs suivants :
  • azure-secret-access-key : clé d'accès partagée pour le compte Azure Storage associé au service de flux.
files-azure-credentials Contient les champs suivants :
  • azure-secret-access-key : clé d'accès partagée pour le compte Azure Storage associé au service d'ingestion de fichiers.
nbexecservice-azure-credentials Contient les champs suivants :
  • azure-secret-access-key : clé d'accès partagée pour le compte Azure Storage associé au service d'exécution de notebooks.
nidataframe-azure-credentials Contient les champs suivants :
  • azure-secret-access-key : clé d'accès partagée pour le compte Azure Storage associé au service DataFrame.

Identifiants SMTP

Tableau 25. Identifiants SMTP
Secret Détails
smtp-server-credentials Contient les champs suivants :
  • username : nom d'utilisateur pour le serveur SMTP.
  • password : mot de passe pour le serveur SMTP.
Requis uniquement si vous configurez smtp.smtpServer.host et que smtp.smtpServer.requireAuthentication est défini sur vrai.