Mise en place de la sécurité
Objectif : Configurer la sécurité avec sros2
.
Niveau du didacticiel : Avancé
Durée : 15 minutes
Contenu
Arrière-plan
Le package sros2
fournit les outils et les instructions pour utiliser ROS2 en plus de DDS-Security. Les fonctionnalités de sécurité ont été testées sur plusieurs plates-formes (Linux, macOS et Windows) ainsi que dans différents langages (C++ et Python). Le SROS2 a été conçu pour fonctionner avec n’importe quel middleware sécurisé, bien que tous les middleware ne soient pas open source et que la prise en charge varie en fonction de la distribution ROS utilisée. Veuillez contacter le Groupe de travail sur la sécurité ROS 2 si vous rencontrez des problèmes d’assistance.
Installation
Généralement, la sécurité est disponible après l’installation à l’aide du Guide d’installation de ROS 2 et du guide de configuration. Toutefois, si vous avez l’intention d’installer à partir de la source ou de changer d’implémentation de middleware, tenez compte des mises en garde suivantes :
Installation à partir des sources
Avant d’installer à partir des sources, vous devez disposer d’une version récente d’openssl (1.0.2g ou ultérieure) :
sudo apt update
sudo apt install libssl-dev
brew install openssl
Vous aurez besoin d’OpenSSL sur votre chemin de bibliothèque pour exécuter des démos DDS-Security. Exécutez la commande suivante et envisagez d’ajouter à votre ~/.bash_profile
:
export DYLD_LIBRARY_PATH=`brew --prefix openssl`/lib:$DYLD_LIBRARY_PATH
export OPENSSL_ROOT_DIR=`brew --prefix openssl`
Si vous n’avez pas installé OpenSSL, veuillez suivre ces instructions
Fast DDS nécessite un indicateur CMake supplémentaire pour créer les plugins de sécurité, donc l’invocation de colcon doit être modifiée pour passer :
colcon build --symlink-install --cmake-args -DSECURITY=ON
Sélection d’un middleware alternatif
Si vous choisissez de ne pas utiliser l’implémentation middleware par défaut, assurez-vous de changer votre implémentation DDS avant de continuer.
ROS2 vous permet de modifier l’implémentation DDS au moment de l’exécution. Voir comment travailler avec plusieurs implémentations RMW pour explorer différentes implémentations de middleware.
Notez que la communication sécurisée entre les fournisseurs n’est pas prise en charge.
Exécutez la démo
1. Créer un dossier pour les fichiers de sécurité
Commencez par créer un dossier pour stocker tous les fichiers nécessaires à cette démo :
mkdir ~/sros2_demo
mkdir ~/sros2_demo
md C:\dev\ros2\sros2_demo
2. Générer un magasin de clés
Utilisez les utilitaires sros2
pour créer le keystore. Les fichiers du magasin de clés seront utilisés pour activer la sécurité de tous les participants du graphe ROS 2.
cd ~/sros2_demo
ros2 security create_keystore demo_keystore
cd ~/sros2_demo
ros2 security create_keystore demo_keystore
cd sros2_demo
ros2 security create_keystore demo_keystore
3. Générer des clés et des certificats
Une fois le magasin de clés créé, créez des clés et des certificats pour chaque nœud avec la sécurité activée. Pour notre démo, cela inclut les nœuds locuteur et auditeur. Cette commande utilise la fonctionnalité create_enclave
qui est couverte plus en détail dans le prochain tutoriel.
ros2 security create_enclave demo_keystore /talker_listener/talker
ros2 security create_enclave demo_keystore /talker_listener/listener
ros2 security create_enclave demo_keystore /talker_listener/talker
ros2 security create_enclave demo_keystore /talker_listener/listener
ros2 security create_enclave demo_keystore /talker_listener/talker
ros2 security create_enclave demo_keystore /talker_listener/listener
Si unable to write 'random state'
apparaît alors définissez la variable d’environnement RANDFILE
.
set RANDFILE=C:\dev\ros2\sros2_demo\.rnd
Ensuite, relancez les commandes ci-dessus.
4. Configurer les variables d’environnement
Trois variables d’environnement permettent au middleware de localiser les matériaux de chiffrement et d’activer (et éventuellement d’appliquer) la sécurité. Ces variables d’environnement et d’autres liées à la sécurité sont décrites dans le Document de conception de l’intégration ROS 2 DDS-Security.
export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
set ROS_SECURITY_KEYSTORE=%cd%/demo_keystore
set ROS_SECURITY_ENABLE=true
set ROS_SECURITY_STRATEGY=Enforce
Ces variables doivent être définies dans chaque terminal utilisé pour la démonstration. Pour plus de commodité, vous pouvez les ajouter à votre environnement de démarrage.
5. Exécutez la démo talker/listener
Commencez la démo en lançant le nœud Talker.
ros2 run demo_nodes_cpp talker --ros-args --enclave /talker_listener/talker
Dans un autre terminal, faites de même pour lancer le nœud listener
. Les variables d’environnement de ce terminal doivent être correctement définies comme décrit à l’étape 4 ci-dessus.
ros2 run demo_nodes_py listener --ros-args --enclave /talker_listener/listener
Ces nœuds communiqueront en utilisant l’authentification et le cryptage ! Si vous regardez le contenu du paquet (par exemple, en utilisant tcpdump
ou Wireshark
comme couvert dans un autre tutoriel), vous pouvez voir que les messages sont cryptés.
Remarque : Vous pouvez basculer arbitrairement entre les packages C++ (demo_nodes_cpp) et Python (demo_nodes_py).
Ces nœuds sont capables de communiquer car nous avons créé les clés et les certificats appropriés pour eux.
Laissez les deux nœuds fonctionner pendant que vous répondez aux questions ci-dessous.
Fais le quiz!
Ouvrez une autre session de terminal, mais ** ne définissez pas ** les variables d’environnement afin que la sécurité ne soit pas activée. Démarrez l’écouteur. Qu’attendez-vous qu’il se passe ?
Le programme d’écoute se lance mais ne reçoit aucun message. Tout le trafic est crypté et sans la sécurité activée, l’auditeur ne reçoit rien.
Arrêtez l’écouteur, définissez la variable d’environnement ROS_SECURITY_ENABLE
sur true
et redémarrez l’écouteur. Quels résultats attendez-vous cette fois ?
Le programme d’écoute se lance toujours mais ne reçoit pas de messages. Bien que la sécurité ait maintenant été activée, elle n’a pas été configurée correctement car ROS est incapable de localiser les fichiers de clé. Le listener se lance, mais en mode non sécurisé puisque la sécurité n’est pas appliquée, ce qui signifie que bien que le talker correctement configuré envoie des messages chiffrés, ce listener est incapable de les déchiffrer.
Arrêtez l’écouteur et définissez ROS_SECURITY_STRATEGY
sur Enforce
. Que se passe-t-il maintenant ?
L’écouteur ne parvient pas à se lancer. La sécurité a été activée et est appliquée. Comme il n’est toujours pas correctement configuré, une erreur est renvoyée plutôt que de se lancer en mode non sécurisé.
Apprendre encore plus!
Êtes-vous prêt à aller plus loin avec ROS Security ? Jetez un œil à la Secure Turtlebot2 Demo. Vous trouverez une implémentation fonctionnelle et complexe de la sécurité ROS 2, prête à essayer vos propres scénarios personnalisés. Assurez-vous de créer des demandes d’extraction et des problèmes ici afin que nous puissions continuer à améliorer la prise en charge de la sécurité dans ROS !