Activer le TLS pour les connexions sécurisées¶
Lorsque vous opérez dans un environnement de production, il est fortement recommandé d’activer la sécurité de couche de transport (TLS) pour chaque composant de Flower afin d’assurer une communication sécurisée.
Note
Pour des fins de test, vous pouvez générer vos propres certificats auto-signés. La page Enable SSL connections contient une section qui vous guidera à travers le processus.
Note
Lorsque vous travaillez avec Docker sur Linux, il peut être nécessaire de changer la propriété du répertoire contenant les certificats pour s’assurer d’un accès et des permissions corrects.
Par défaut, les conteneurs Flower s’exécutent avec un utilisateur non-root app. Les fichiers et dossiers montés doivent avoir les permissions appropriées pour l’ID d’utilisateur 49999.
Par exemple, pour changer l’ID d’utilisateur de tous les fichiers dans le dossier certificates/, vous pouvez exécuter sudo chown -R 49999:49999 certificates/*.
Si vous souhaitez plus tard supprimer le répertoire, vous pouvez changer l’ID d’utilisateur en cours à l’aide de sudo chown -R $USER:$(id -gn) certificates.
Par défaut, l’application ServerApp est exécutée en tant que sous-processus dans le conteneur Docker SuperLink, et l’application ClientApp est lancée en tant que sous-processus dans le conteneur Docker SuperNode. Vous pouvez en savoir plus sur les différents modes de processus ici : Exécuter ServerApp ou ClientApp en tant que Sous-Processus.
Pour activer TLS entre SuperLink et SuperNode, ainsi que entre SuperLink et flwr CLI, vous aurez besoin d’un certificat racine PEM codé, clé privée et chaîne de certificats.
SuperLink
En supposant que tous les fichiers dont nous avons besoin se trouvent dans le dossier local superlink-certificates, nous pouvons utiliser la bannière --volume pour monter les dossiers locaux dans le conteneur SuperLink:
$ docker run --rm \
--volume ./superlink-certificates/:/app/certificates/:ro \
<superlink-image> \
--ssl-ca-certfile certificates/ca.crt \
--ssl-certfile certificates/server.pem \
--ssl-keyfile certificates/server.key \
<additional-args>
Comprendre la commande
docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.--rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.--volume ./superlink-certificates/:/app/certificates/:ro: Mount thesuperlink-certificatesRépertoire dans le répertoire de travail actuel de la machine hôte en tant que volume lecture seuledans le dossier/app/certificatesà l’intérieur du conteneur.Cela permet au conteneur d’accéder aux certificats TLS stockés dans les certificatsrépertoire.<superlink-image>: Le nom de votre image SuperLink à exécuter.--ssl-ca-certfile certificates/ca.crt: Spécifiez l’emplacement du fichier de certificat CAà l’intérieur du conteneur.Le fichiercertificates/ca.crtest un certificat utilisé pour vérifier l’identité duSuperLink.--ssl-certfile certificates/server.pem: Spécifiez l’emplacement des SuperLink’sFichier de certificat TLS à l’intérieur du conteneur.Le fichiercertificates/server.pemest utilisé pour identifier le SuperLink et chiffrer lesDonnées transmises sur le réseau.--ssl-keyfile certificates/server.key: Spécifiez l’emplacement du SuperLink’sFichier de clé privée TLS à l’intérieur du conteneur.Le fichiercertificates/server.keyest utilisé pour décrypter les données transmises surle réseau.
SuperNode
Note
Si vous génez des certificats auto-signés et que le fichier ca.crt n’existe pas sur le SuperNode, vous pouvez le copier après l’étape de génération.
$ docker run --rm \
--volume ./superlink-certificates/ca.crt:/app/ca.crt/:ro \
<supernode-image> \
--root-certificates ca.crt \
<additional-args>
Comprendre la commande
docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.--rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.--volume ./superlink-certificates/ca.crt:/app/ca.crt/:ro: Mount theca.crtfichier à partir du dossiersuperlink-certificatesde la machine hôte en tant que lecteur uniquementvolume dans le dossier/app/ca.crtà l’intérieur du conteneur.<supernode-image>: Le nom de votre image SuperNode à exécuter.--root-certificates ca.crt: Cela spécifie l’emplacement du fichier de certificat CAà l’intérieur du conteneur.Le fichierca.crtest utilisé pour vérifier l’identité du SuperLink.
En mode d’isolement process, l’application ServerApp et ClientApp s’exécutent dans leurs propres processus. Contrairement au mode d’isolement subprocess, le SuperLink ou SuperNode ne tente pas de créer les processus respectifs; au lieu de cela, ils doivent être créés à l’extérieur.
Il est possible de lancer uniquement le SuperLink en mode d’isolement subprocess et le SuperNode en mode d’isolement process, ou vice versa, ou même les deux avec un mode d’isolement process.
SuperLink et ServerApp
Pour activer TLS entre SuperLink et SuperNode, ainsi que entre SuperLink et flwr CLI, vous aurez besoin d’un certificat racine PEM codé, clé privée et chaîne de certificats.
En supposant que tous les fichiers dont nous avons besoin se trouvent dans le répertoire local superlink-certificates, nous pouvons utiliser la flague --volume pour monter le répertoire local dans le conteneur SuperLink:
$ docker run --rm \
--volume ./superlink-certificates/:/app/certificates/:ro \
flwr/superlink:1.31.0 \
--ssl-ca-certfile certificates/ca.crt \
--ssl-certfile certificates/server.pem \
--ssl-keyfile certificates/server.key \
--isolation process \
<additional-args>
Comprendre la commande
docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.--rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.--volume ./superlink-certificates/:/app/certificates/:ro: Monter lesuperlink-certificatesrépertoire dans le répertoire de travail actuel du hôtemachine en tant que volume lecture seule au répertoire/app/certificatesà l’intérieur du conteneur.Cela permet au conteneur d’accéder aux certificats TLS stockés dans les certificatsrépertoire.flwr/superlink:|stable_flwr_version|: nom de l’image à exécuter et version spécifiquetag de l’image. Le tag|stable_flwr_version|représente une version spécifique de l’image.--ssl-ca-certfile certificates/ca.crt: Spécifiez l’emplacement du fichier de certificat CAà l’intérieur du conteneur.Le fichiercertificates/ca.crtest un certificat utilisé pour vérifier l’identité duSuperLink.--ssl-certfile certificates/server.pem: Spécifiez l’emplacement des SuperLink’sFichier de certificat TLS à l’intérieur du conteneur.Le fichiercertificates/server.pemest utilisé pour identifier le SuperLink et chiffrer lesDonnées transmises sur le réseau.--ssl-keyfile certificates/server.key: Spécifiez l’emplacement du SuperLink’sFichier de clé privée TLS à l’intérieur du conteneur.Le fichiercertificates/server.keyest utilisé pour décrypter les données transmises surle réseau.--isolation process: Dit au SuperLink que le ServerApp est créé séparémentprocessus indépendant. Le SuperLink ne tente pas de le créer.
Lancer le conteneur ServerApp :
$ docker run --rm \
<serverapp-image> \
--insecure \
<additional-args>
Comprendre la commande
docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.--rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.<serverapp-image>: Le nom de votre image ServerApp à exécuter.--insecure: Cette étiquette dit au conteneur d’opérer dans un mode non sécurisé, permettantcommunication non chiffrée. Les connexions sécurisées seront ajoutées dans les futures versions.
SuperNode et ClientApp
Note
Si vous génez des certificats auto-signés et que le fichier ca.crt n’existe pas sur le SuperNode, vous pouvez le copier après l’étape de génération.
Lancez le conteneur SuperNode :
$ docker run --rm \
--volume ./superlink-certificates/ca.crt:/app/ca.crt/:ro \
flwr/supernode:1.31.0 \
--root-certificates ca.crt \
--isolation process \
<additional-args>
Comprendre la commande
docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.--rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.--volume ./superlink-certificates/ca.crt:/app/ca.crt/:ro: Montez le fichierca.crtdepuis lerépertoiresuperlink-certificatesde la machine hôte, monté en volume en lecture seule sur/app/ca.crtrépertoire à l’intérieur du conteneur.flwr/supernode:|stable_flwr_version|: nom de l’image à exécuter et version spécifiquetag de l’image. Le tag|stable_flwr_version|représente une version spécifique de l’image.--root-certificates ca.crt: Cela spécifie l’emplacement du fichier de certificat CAà l’intérieur du conteneur.Le fichierca.crtest utilisé pour vérifier l’identité du SuperLink.--isolation process: Dit au SuperNode que le ClientApp est créé séparémentprocessus indépendant. Le SuperNode ne tente pas de le créer.
Lancez le conteneur ClientApp :
$ docker run --rm \
<clientapp-image> \
--insecure \
<additional-args>
Comprendre la commande
docker run: Cela dit à Docker de lancer un conteneur à partir d’une image.--rm: Supprimez le conteneur une fois qu’il est arrêté ou que la commande s’est terminée.<clientapp-image>: Le nom de votre ClientApp image à lancer.--insecure: Cette étiquette dit au conteneur d’opérer dans un mode non sécurisé, permettantcommunication non chiffrée. Les connexions sécurisées seront ajoutées dans les futures versions.
Localisez le fichier de configuration Flower TOML sur votre machine.
$ flwr config list
Flower Config file: /path/to/.flwr/config.toml
SuperLink connections:
supergrid
local (default)
Ajoutez les lignes suivantes à la fin du fichier config.toml pour ajouter une nouvelle connexion SuperLink et la sauvegarder:
[superlink.local-deployment-tls]
address = "127.0.0.1:9093"
root-certificates = "/absolute/path/to/superlink-certificates/ca.crt"
Note
Vous pouvez personnaliser la chaîne qui suit superlink. pour répondre à vos besoins. Cependant, veuillez noter que la chaîne ne peut pas contenir un point (.).
Dans cet exemple, local-deployment a été utilisé. N’oubliez simplement de remplacer local-deployment par votre nom choisi dans les deux chaînes superlink. et le commande correspondant flwr run .. Référez-vous au Flower Configuration pour plus d’informations.