Mise en place de la sécurité

Objectif : Configurer la sécurité avec sros2.

Niveau du didacticiel : Avancé

Durée : 15 minutes

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

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

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

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

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

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 ?

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 ?

Arrêtez l’écouteur et définissez ROS_SECURITY_STRATEGY sur Enforce. Que se passe-t-il maintenant ?

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 !