Activer les connexions TLS¶
La sécurité de niveau de transport (TLS) garantit que la communication entre les points de terminaison est chiffrée. Ce guide décrit comment établir des SuperLink ↔ SuperNodes et User ↔ SuperLink connections sécurisés par TLS, ainsi que comment activer la sécurité sur les connexions AppIo internes utilisées par SuperExec, ServerApp processus et ClientApp processus.
Note
Ce guide s’appuie sur la mise en place de l’application Flower présentée dans le guide Exécuter Flower avec le Deployment Runtime et l’étend pour remplacer l’utilisation de --insecure au profit de TLS.
Astuce
Consultez l’exemple Flower Authentication pour un exemple complet autonome sur la mise en place de la sécurité TLS (et facultativement l’authentification des nœuds). Consultez le guide Authentifier les SuperNodes pour en savoir plus sur l’ajout d’une couche d’authentification aux connexions SuperLink ↔ SuperNode.
Certificats¶
L’utilisation des connexions TLS nécessite certaines certificats générés et transmis lors du démarrage de la SuperLink, des SuperNodes et lorsqu’un utilisateur (par exemple, un scientifique des données qui souhaite soumettre une Run) interagit avec la fédération via l’application flwr CLI. Les mêmes certificats peuvent être utilisés pour la prototypage local lorsque vous activez TLS sur les connexions AppIo internes.
Nous avons préparé un script qui peut être utilisé pour générer de tels ensembles de certificats. Même si l’utilisation de ces derniers est acceptable pour la prototypage, nous vous recommandons de suivre les normes établies dans votre équipe/organisation et de générer les certificats et de les partager avec les parties correspondantes. Référez-vous à la section Générer des certificats TLS dans l’exemple lié en haut de ce guide.
# In the example directory, generate the certificates
$ python generate_creds.py
Cela générera les certificats TLS dans un nouveau répertoire certificates/. Copiez ce répertoire dans le répertoire de votre application (par exemple, un répertoire généré plus tôt via flwr new).
Avertissement
L’approche pour la génération de certificats TLS dans le contexte de cet exemple peut servir d’inspiration et de point de départ, mais elle ne doit pas être utilisée comme référence pour les environnements de production. Veuillez vous référer à d’autres sources concernant l’issue de la génération correcte des certificats pour les environnements de production. Pour les prototypages non critiques ou les projets de recherche, il peut suffire d’utiliser les certificats auto-signés générés en utilisant les scripts mentionnés dans ce guide. En production, n’ayez pas recours au même certificat serveur et à la clé privée pour plusieurs services. Une meilleure pratique est d’utiliser une paire de clés unique pour chaque service, par exemple l’API SuperLink Fleet, l’API ServerAppIo SuperLink et chaque API ClientAppIo SuperNode.
Lancement du SuperLink avec TLS¶
Cette section décrit comment lancer un SuperLink qui fonctionne sur des connexions TLS activées. Le code snippet ci-dessous suppose que le répertoire certificates/ est dans le même répertoire où vous exécutez la commande. Modifiez les chemins en conséquence si ce n’est pas le cas. Lorsque vous fournissez des certificats pour l’API Fleet et l’API de contrôle, SuperLink s’attend à une liste de trois chemins de certificat : certificat CA, certificat serveur et clé privée serveur. Le même commande peut également fournir des certificats AppIo pour l’API ServerAppIo interne.
$ flower-superlink \
--ssl-ca-certfile certificates/ca.crt \
--ssl-certfile certificates/server.pem \
--ssl-keyfile certificates/server.key \
--appio-ssl-ca-certfile certificates/ca.crt \
--appio-ssl-certfile certificates/server.pem \
--appio-ssl-keyfile certificates/server.key
Comprendre la commande
--ssl-ca-certfile: Spécifiez l’emplacement du fichier de certificat CA dans votre fichier. Ce fichier est un certificat utilisé pour vérifier l’identité du SuperLink--ssl-certfile: Spécifiez l’emplacement du fichier de certificat TLS du SuperLink. Ce fichier est utilisé pour identifier le SuperLink et chiffrer les paquets transmis sur le réseau.--ssl-keyfile: Spécifiez l’emplacement du fichier de clé privée TLS du SuperLink. Ce fichier est utilisé pour déchiffrer les paquets transmis sur le réseau.--appio-ssl-ca-certfile: Spécifiez l’emplacement du fichier de certificat CA utilisé par SuperExec pour vérifier le certificat serveur API ServerAppIo du SuperLink.--appio-ssl-certfile: Spécifiez l’emplacement du fichier de certificat TLS ServerAppIo API serveur. Le certificat doit inclure des noms alternatifs de sujet (SAN) pour l’adresse AppIo API utilisée par SuperExec. Lorsque vous utilisez une adresse IP telle que127.0.0.1, le certificat doit inclure un SAN correspondant.--appio-ssl-keyfile: Spécifiez l’emplacement du fichier de clé privée TLS ServerAppIo API serveur.
Connexion des SuperNodes avec TLS¶
Cette section décrit comment lancer un SuperNode qui fonctionne sur des connexions TLS activées. Le code snippet ci-dessous suppose que le répertoire certificates/ est dans le même répertoire où vous exécutez la commande. Pour sécuriser la connexion SuperNode ↔ SuperLink, remplacez --insecure par --root-certificates. Le même commande peut également fournir des certificats AppIo pour l’API ClientAppIo interne.
$ flower-supernode \
--root-certificates certificates/ca.crt \
--appio-ssl-ca-certfile certificates/ca.crt \
--appio-ssl-certfile certificates/server.pem \
--appio-ssl-keyfile certificates/server.key \
--superlink 127.0.0.1:9092 \
--clientappio-api-address 127.0.0.1:9094 \
--node-config="partition-id=0 num-partitions=2"
Comprendre la commande
--root-certificates: Cela spécifie l’emplacement du fichier de certificat CA. Leca.crtfichier est utilisé pour vérifier l’identité de SuperLink.--appio-ssl-ca-certfile: Spécifiez l’emplacement du fichier de certificat CA utilisé par SuperExec pour vérifier le certificat serveur API ClientAppIo du SuperNode.--appio-ssl-certfile: Spécifiez l’emplacement du fichier de certificat TLS ClientAppIo API serveur. Le certificat doit inclure des noms alternatifs de sujet (SAN) pour l’adresse AppIo API utilisée par SuperExec. Lorsque vous utilisez une adresse IP telle que127.0.0.1, le certificat doit inclure un SAN correspondant.--appio-ssl-keyfile: Spécifiez l’emplacement du fichier de clé privée TLS ClientAppIo API serveur.
Suivez la même procédure, c’est-à-dire en remplaçant --insecure par --root-certificates, pour lancer le deuxième SuperNode.
$ flower-supernode \
--root-certificates certificates/ca.crt \
--appio-ssl-ca-certfile certificates/ca.crt \
--appio-ssl-certfile certificates/server.pem \
--appio-ssl-keyfile certificates/server.key \
--superlink 127.0.0.1:9092 \
--clientappio-api-address 127.0.0.1:9095 \
--node-config="partition-id=1 num-partitions=2"
À ce stade, vous avez réussi à lancer un SuperLink et deux SuperNodes avec des connexions TLS activées.
Note
L’option TLS AppIo configure les connexions authentifiées par le serveur. Elles ne configureraient pas la mutualisation de TLS. Le fichier --appio-ssl-ca-certfile est utilisé par SuperExec et processus d’applications pour vérifier le certificat du serveur AppIo, et non comme un certificat client. Si l’option TLS AppIo n’est pas configurée, les connexions internes AppIo restent non chiffrées et devraient rester à l’intérieur d’un réseau de confiance.
TLS pour les Connexions AppIo dans « Process » Isolation Mode¶
Pour plus de détails sur SuperExec, le mode d’isolement « process », et le mode d’isolement « subprocess », voir Communication réseau de Flower.
Jusqu’à présent, nous vous avons montré comment activer TLS pour les connexions AppIo en utilisant le mode d’isolement par défaut « subprocess ». Dans ce mode, SuperLink et SuperNode démarreront automatiquement leurs SuperExecs avec les options TLS AppIo correctes. Cependant, si vous souhaitez exécuter SuperExec séparément dans le mode d’isolement « process », vous devez faire quelques choses différemment pour activer TLS pour les connexions AppIo.
Tout d’abord, nous devons lancer le SuperLink et SuperNode avec --isolation=process et avec les options TLS AppIo. Cela indique au SuperLink et SuperNode que les SuperExecs seront lancés séparément, par exemple par un opérateur ou un système d’orchestration. Ensuite, afin que les SuperExecs puissent établir des connexions TLS avec les API AppIo, nous devons fournir les options TLS AppIo lors du lancement des SuperExecs. Voici un exemple de commande pour lancer une SuperExec qui peut établir des connexions TLS avec le ServerAppIo API du SuperLink:
$ flower-superexec \
--root-certificates certificates/ca.crt \
--appio-api-address 127.0.0.1:9091 \
--plugin-type serverapp
Comprendre la commande
--root-certificates: Spécifiez l’emplacement du fichier de certificat CA. Le fichierca.crtest utilisé par SuperExec pour vérifier le certificat du serveur AppIo API.--appio-api-address: Spécifiez l’adresse de l’API AppIo que SuperExec doit se connecter à. Dans cet exemple,127.0.0.1:9091est l’API ServerAppIo du SuperLink.--plugin-type: Spécifiez le type de processus d’applications que SuperExec doit lancer. Utilisezserverapppour unServerAppSuperExec.
Ensuite, utilisez la même procédure pour un ClientApp SuperExec, mais passez l’adresse API ClientAppIo du SuperNode, par exemple 127.0.0.1:9094, et définissez --plugin-type clientapp.
Maintenant, vos SuperLink-side SuperExec et SuperNode-side SuperExec peuvent établir des connexions TLS vers leurs API AppIo respectives. Lorsque vous utilisez le mode d’isolement « process », il est de la responsabilité du lanceur de processus (par exemple, l’utilisateur ou l’orchestrateur) de lancer les SuperExecs avec les options TLS AppIo correctes. Si vous utilisez un système d’orchestration pour lancer les SuperExecs, assurez-vous d’inclure les options TLS AppIo dans les commandes ou la configuration utilisées par votre système d’orchestration.
Flower CLI avec TLS activé¶
Le Flower CLI (par exemple, la commande flwr run) est la façon dont un utilisateur (par exemple, un scientifique des données) peut interagir avec une fédération déployée. Les commandes Flower et CLI sont traitées par le SuperLink et donc, si elle a été configurée pour ne fonctionner que sur des connexions TLS, les requêtes envoyées par Flower CLI doivent faire usage d’un certificat TLS. Pour ce faire, remplacez le champ insecure = true dans votre fichier de configuration TOML Flower avec un nouveau champ qui lit le certificat:
[superlink.local-deployment]
address = "127.0.0.1:9093"
root-certificates = "/absolute/path/to/certificates/ca.crt"
Notez que le chemin vers le root-certificates est relatif à la racine du projet. Vous pouvez maintenant exécuter l’exemple en exécutant flwr run:
$ flwr run . local-deployment --stream
Astuce
Vous pouvez configurer votre profil local-deployment en tant que défaut afin de ne pas avoir à spécifier explicitement ce dernier dans chaque commande CLI Flower qui nécessite une connexion avec le SuperLink. Pour cela et plus d’informations sur la configuration de Flower, veuillez consulter le guide the Flower Configuration.
Conclusion¶
Vous devriez maintenant avoir appris comment générer des certificats auto-signés à l’aide de l’écriture fournie, démarrer un serveur TLS et faire établir deux clients des connexions sécurisées vers lui. Vous devriez également avoir appris comment exécuter votre projet Flower en utilisant flwr run avec TLS activé et comment sécuriser les connexions internes AppIo. Toutes les autres commandes dans le Flower CLI seront également TLS-activées.
Note
Veuillez consulter le Exécuter Flower à l’aide de Docker documentation pour apprendre à configurer une fédération où chaque composant s’exécute dans son propre conteneur Docker. Vous pouvez également utiliser TLS et d’autres fonctionnalités de sécurité dans Flower telles que l’implémentation d’un mécanisme d’authentification des SuperNodes.
Ressources supplémentaires¶
Ces sources supplémentaires peuvent être pertinentes si tu souhaites approfondir le sujet des certificats :