

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configuration et résolution des problèmes liés à AWS IoT Greengrass avec des appareils clients
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices"></a>

*Marouane Sefiani et Akalanka De Silva, Amazon Web Services*

## Résumé
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-summary"></a>

AWS IoT Greengrass est un environnement d'exécution périphérique et un service cloud open source permettant de créer, de déployer et de gérer des logiciels Internet des objets (IoT) sur des appareils périphériques. Les cas d'utilisation d'AWS IoT Greengrass incluent :
+ Maisons intelligentes dans lesquelles une passerelle AWS IoT Greengrass est utilisée comme hub pour la domotique
+ Des usines intelligentes dans lesquelles AWS IoT Greengrass peut faciliter l'ingestion et le traitement local des données depuis l'atelier

AWS IoT Greengrass peut agir en tant que point de terminaison de connexion MQTT sécurisé et authentifié pour d'autres appareils périphériques (également appelés *appareils clients*), qui autrement se connecteraient généralement directement à AWS IoT Core. Cette fonctionnalité est utile lorsque les appareils clients ne disposent pas d'un accès réseau direct au point de terminaison AWS IoT Core.

Vous pouvez configurer AWS IoT Greengrass pour une utilisation avec des appareils clients dans les cas d'utilisation suivants :
+ Pour que les appareils clients puissent envoyer des données à AWS IoT Greengrass
+ Pour qu'AWS IoT Greengrass transmette les données à AWS IoT Core
+ Pour tirer parti des fonctionnalités avancées du moteur de règles AWS IoT Core

Ces fonctionnalités nécessitent l'installation et la configuration des composants suivants sur l'appareil AWS IoT Greengrass :
+ courtier MQTT
+ Pont MQTT
+ Authentification de l'appareil client
+ Détecteur IP

En outre, les messages publiés depuis les appareils clients doivent être au format JSON ou au format [Protocol Buffers (protobuf](https://protobuf.dev/)).

Ce modèle décrit comment installer et configurer ces composants requis, et fournit des conseils de dépannage et les meilleures pratiques.

## Conditions préalables et limitations
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ [Interface de ligne de commande AWS (AWS CLI) version 2](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)
+ Deux appareils clients exécutant Python 3.7 ou version ultérieure
+ [Un appareil principal exécutant Java Runtime Environment (JRE) version 8 ou ultérieure, et [Amazon Corretto 11 ou OpenJDK 11](https://aws.amazon.com/corretto/)](https://openjdk.java.net/)

**Limites**
+ Vous devez choisir une région AWS dans laquelle AWS IoT Core est disponible. Pour consulter la liste actuelle des régions pour AWS IoT Core, consultez la section [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/).
+ Le périphérique principal doit disposer d'au moins 172 Mo de RAM et 512 Mo d'espace disque.

## Architecture
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-architecture"></a>

Le schéma suivant montre l'architecture de la solution pour ce modèle.

![\[Architecture de solution pour configurer AWS IoT Greengrass avec des appareils clients\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/0656c5ae-d979-4cf7-be92-a46fa81cab0d.png)


L'architecture inclut :
+ Deux appareils clients. Chaque appareil contient une clé privée, un certificat de périphérique et un certificat d'autorité de certification (CA) racine. Le SDK pour appareils AWS IoT, qui contient un client MQTT, est également installé sur chaque appareil client.
+ Un appareil principal sur lequel AWS IoT Greengrass a été déployé avec les composants suivants :
  + courtier MQTT
  + Pont MQTT
  + Authentification de l'appareil client
  + Détecteur IP

Cette architecture prend en charge les scénarios suivants :
+ Les appareils clients peuvent utiliser leur client MQTT pour communiquer entre eux via le broker MQTT du périphérique principal.
+ Les appareils clients peuvent également communiquer avec AWS IoT Core dans le cloud via le broker MQTT de l'appareil principal et le pont MQTT.
+ AWS IoT Core dans le cloud peut envoyer des messages aux appareils clients via le client de test MQTT, le pont MQTT et le courtier MQTT de l'appareil principal.

Pour plus d'informations sur les communications entre les appareils clients et le périphérique principal, consultez la section [Informations supplémentaires](#set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-additional).

## Outils
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-tools"></a>

**Services AWS**
+ [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html) est un environnement d'exécution périphérique et un service cloud open source pour l'Internet des objets (IoT) qui vous aide à créer, déployer et gérer des applications IoT sur vos appareils.
+ [AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html) fournit une communication bidirectionnelle sécurisée permettant aux appareils connectés à Internet de se connecter au cloud AWS.
+ Le [SDK pour appareils AWS IoT](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) est un kit de développement logiciel qui comprend des bibliothèques open source, des guides de développement avec des exemples et des guides de portage afin que vous puissiez créer des produits ou des solutions IoT innovants sur les plateformes matérielles de votre choix.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.

## Bonnes pratiques
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-best-practices"></a>
+ La charge utile des messages provenant des appareils clients doit être au format JSON ou Protobuf afin de tirer parti des fonctionnalités avancées du moteur de règles AWS IoT Core, telles que la transformation et les actions conditionnelles.
+ Configurez le pont MQTT pour autoriser la communication bidirectionnelle.
+ Configurez et déployez le composant de détection IP dans AWS IoT Greengrass pour vous assurer que les adresses IP de l'appareil principal sont incluses dans le champ du nom alternatif du sujet (SAN) du certificat de courtier MQTT.

## Épopées
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-epics"></a>

### Configuration de l'appareil principal
<a name="set-up-the-core-device"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez AWS IoT Greengrass sur votre appareil principal. | Installez le logiciel AWS IoT Greengrass Core en suivant les instructions du guide du [développeur](https://docs.aws.amazon.com/greengrass/v2/developerguide/install-greengrass-core-v2.html). | AWS IoT Greengrass | 
| Vérifiez l'état de votre installation. | Utilisez la commande suivante pour vérifier l'état du service AWS IoT Greengrass sur votre appareil principal :<pre>sudo systemctl status greengrass.service</pre>Le résultat attendu de la commande est le suivant :<pre>Launched Nucleus successfully</pre> | AWS général | 
| Configurez une politique IAM et associez-la au rôle de service Greengrass. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS général | 
| Configurez et déployez les composants requis dans le dispositif principal AWS IoT Greengrass. | Configurez et déployez les composants suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS IoT Greengrass | 
| Vérifiez que le pont MQTT autorise la communication bidirectionnelle. | Pour relayer des messages MQTT entre les appareils clients et AWS IoT Core, configurez et déployez le composant du pont MQTT et spécifiez les sujets à relayer. Voici un exemple :<pre>{<br />  "mqttTopicMapping": {<br />    "ClientDevicesToCloud": {<br />      "topic": "dt/#",<br />      "source": "LocalMqtt",<br />      "target": "IotCore"<br />    },<br />    "CloudToClientDevices": {<br />      "topic": "cmd/#",<br />      "source": "IotCore",<br />      "target": "LocalMqtt"<br />    }<br />  }<br />}</pre> | AWS IoT Greengrass | 
| Vérifiez que le composant d'authentification permet aux appareils clients de se connecter et de publier des sujets ou de s'y abonner.  | La `aws.greengrass.clientdevices.Auth` configuration suivante permet à tous les appareils clients de se connecter, de publier des messages et de s'abonner à toutes les rubriques.<pre>{<br />  "deviceGroups": {<br />    "formatVersion": "2021-03-05",<br />    "definitions": {<br />      "MyPermissiveDeviceGroup": {<br />        "selectionRule": "thingName: *",<br />        "policyName": "MyPermissivePolicy"<br />      }<br />    },<br />    "policies": {<br />      "MyPermissivePolicy": {<br />        "AllowAll": {<br />          "statementDescription": "Allow client devices to perform all actions.",<br />          "operations": [<br />            "*"<br />          ],<br />          "resources": [<br />            "*"<br />          ]<br />        }<br />      }<br />    }<br />  }<br />}</pre> | AWS IoT Greengrass | 

### Configuration des appareils clients
<a name="set-up-client-devices"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez le SDK pour appareils AWS IoT. | Installez le SDK pour appareils AWS IoT sur les appareils clients. Pour obtenir la liste complète des langues prises en charge et des langues associées SDKs, consultez la [documentation AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html).Par exemple, le SDK pour appareils AWS IoT pour Python [se trouve](https://github.com/aws/aws-iot-device-sdk-python-v2) sur. GitHub Pour installer ce SDK :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html)Vous pouvez également installer le SDK à partir du référentiel source :<pre># Create a workspace directory to hold all the SDK files<br />mkdir sdk-workspace<br />cd sdk-workspace<br /># Clone the repository<br />git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git<br /># Install using Pip (use 'python' instead of 'python3' on Windows)<br />python3 -m pip install ./aws-iot-device-sdk-python-v2</pre> | AWS IoT général | 
| Créez quelque chose. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS IoT Core | 
| Téléchargez le certificat CA depuis l'appareil principal de Greengrass. | Si vous vous attendez à ce que le périphérique principal de Greengrass fonctionne dans des environnements hors ligne, vous devez mettre le certificat de base de CA de Greengrass à la disposition de l'appareil client afin qu'il puisse vérifier le certificat du courtier MQTT (qui est émis par l'autorité de certification principale de Greengrass). Il est donc important d'obtenir une copie de ce certificat. Utilisez l'une des méthodes suivantes pour télécharger le certificat CA :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS général | 
| Copiez les informations d'identification sur les appareils clients. | Copiez le certificat CA principal de Greengrass, le certificat de l'appareil et la clé privée dans les appareils clients. | AWS général | 
| Associez les appareils clients au périphérique principal. | Associez les appareils clients à un périphérique principal afin qu'ils puissent découvrir le périphérique principal. Les appareils clients peuvent ensuite utiliser l'[API de découverte Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/greengrass-discover-api.html) pour récupérer les informations de connectivité et les certificats pour leurs appareils principaux associés. Pour plus d'informations, consultez [Associer des appareils clients](https://docs.aws.amazon.com/greengrass/v2/developerguide/associate-client-devices.html) dans la documentation AWS IoT Greengrass.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html)Les appareils clients que vous avez associés peuvent désormais utiliser l'API de découverte Greengrass pour découvrir cet appareil principal. | AWS IoT Greengrass | 

### Envoyer et recevoir des données
<a name="send-and-receive-data"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Envoyez des données d'un appareil client à un autre appareil client. | Utilisez le client MQTT de votre appareil pour publier un message sur le `dt/client1/sensor` sujet. | AWS général | 
| Envoyez des données depuis l'appareil client vers AWS IoT Core. | Utilisez le client MQTT de votre appareil pour publier un message sur le `dt/client1/sensor` sujet.Dans le client de test MQTT, abonnez-vous au sujet sur lequel l'appareil envoie des messages ou abonnez-vous à **\$1** pour tous les sujets (voir [détails](https://docs.aws.amazon.com/iot/latest/developerguide/view-mqtt-messages.html)). | AWS général | 
| Envoyez des messages depuis AWS IoT Core aux appareils clients. | Sur la page du client de test MQTT, dans l'onglet **Publier dans un sujet**, dans le champ **Nom du sujet**, entrez le nom du sujet de votre message. Dans cet exemple, utilisez `cmd/client1` pour le sujet. | AWS général | 

## Résolution des problèmes
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| **Impossible de vérifier l'erreur du certificat du serveur** | Cette erreur se produit lorsque le client MQTT ne peut pas vérifier le certificat présenté par le courtier MQTT lors de la prise de contact TLS. La raison la plus courante est que le client MQTT ne possède pas le certificat CA. Suivez ces étapes pour vous assurer que le certificat CA est fourni au client MQTT.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | 
| **Impossible de vérifier l'erreur du nom du serveur** | Cette erreur se produit lorsque le client MQTT ne parvient pas à vérifier qu'il se connecte au bon serveur. La raison la plus courante est que l'adresse IP de l'appareil Greengrass n'est pas répertoriée dans le champ SAN du certificat.Suivez les instructions de la solution précédente pour obtenir le certificat de courtier MQTT et vérifier que le champ SAN contient l'adresse IP de l'appareil AWS IoT Greengrass, comme expliqué dans [la section Informations supplémentaires](#set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-additional). Si ce n'est pas le cas, vérifiez que le composant du détecteur IP est correctement installé et redémarrez le périphérique principal. | 
| **Impossible de vérifier le nom du serveur uniquement lors de la connexion à partir d'un appareil client intégré** | Mbed TLS, qui est une bibliothèque TLS populaire utilisée dans les appareils embarqués, prend actuellement en charge la vérification du nom DNS uniquement dans le champ SAN du certificat, comme indiqué dans le code de la bibliothèque Mbed TLS. Comme le périphérique principal ne possède pas son propre nom de domaine et dépend de l'adresse IP, les clients TLS qui utilisent Mbed TLS échoueront à la vérification du nom du serveur lors de la prise de contact TLS, ce qui provoquera un échec de connexion. Nous vous recommandons d'ajouter la vérification de l'adresse IP du SAN à votre bibliothèque TLS Mbed via la fonction [x509\$1crt\$1check\$1san](https://github.com/Mbed-TLS/mbedtls/blob/6a327a5fdc2786cb50b4dbe5e3a75884a1f8435a/library/x509_crt.c#L2548). | 

## Ressources connexes
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-resources"></a>
+ [Documentation AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)
+ [Documentation de base d'AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html)
+ [Composant du broker MQTT](https://docs.aws.amazon.com/greengrass/v2/developerguide/mqtt-broker-moquette-component.html)
+ [composant de pont MQTT](https://docs.aws.amazon.com/greengrass/v2/developerguide/mqtt-bridge-component.html)
+ [Composant d'authentification de l'appareil client](https://docs.aws.amazon.com/greengrass/v2/developerguide/client-device-auth-component.html)
+ [composant du détecteur IP](https://docs.aws.amazon.com/greengrass/v2/developerguide/ip-detector-component.html)
+ [Kits de développement logiciel pour appareils AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html)
+ [Implémentation d'appareils clients locaux avec AWS IoT Greengrass](https://aws.amazon.com/blogs/iot/implementing-local-client-devices-with-aws-iot-greengrass/) (article de blog AWS)
+ [RFC 5280 — Certificat d'infrastructure à clé publique Internet X.509 et profil de liste de révocation de certificats (CRL)](https://www.rfc-editor.org/rfc/rfc5280)

## Informations supplémentaires
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-additional"></a>

Cette section fournit des informations supplémentaires sur les communications entre les appareils clients et le périphérique principal.

Le broker MQTT écoute une tentative de connexion client TLS sur le port 8883 du périphérique principal. L'illustration suivante montre un exemple de certificat de serveur du courtier MQTT.

![\[Exemple de certificat de serveur MQTT Broker\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/b2c324a1-60cd-4194-80e7-e5184662146a.png)


L'exemple de certificat affiche les détails suivants :
+ Le certificat est délivré par l'autorité de certification AWS IoT Greengrass Core, qui est locale et spécifique à l'appareil principal, c'est-à-dire qu'elle agit en tant qu'autorité de certification locale.
+ Ce certificat est automatiquement modifié chaque semaine par le composant d'authentification du client, comme indiqué dans l'illustration suivante. Vous pouvez définir cet intervalle dans la configuration du composant d'authentification du client.

![\[Rotation du certificat de serveur du courtier MQTT\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/65bcdc5c-a71c-4f52-adcd-21910fabfc2a.png)

+ Le nom alternatif du sujet (SAN) joue un rôle essentiel dans la vérification du nom du serveur côté client TLS. Cela permet au client TLS de s'assurer qu'il se connecte au bon serveur et d'éviter les man-in-the-middle attaques lors de la configuration de la session TLS. Dans l'exemple de certificat, le champ SAN indique que ce serveur écoute sur localhost (le socket de domaine Unix local) et que l'interface réseau possède l'adresse IP 192.168.1.12.

Le client TLS utilise le champ SAN du certificat pour vérifier qu'il se connecte à un serveur légitime lors de la vérification du serveur. En revanche, lors d'une prise de contact TLS classique entre un serveur HTTP et un navigateur, le nom de domaine figurant dans le champ nom commun (CN) ou dans le champ SAN est utilisé pour vérifier le domaine auquel le navigateur se connecte réellement pendant le processus de vérification du serveur. Si le périphérique principal n'a pas de nom de domaine, l'adresse IP incluse dans le champ SAN a le même objectif. Pour plus d'informations, consultez la [section Nom alternatif du sujet](https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.6) de la *RFC 5280 — Profil du certificat d'infrastructure à clé publique Internet X.509 et de la liste de révocation des certificats (*CRL).

Le composant détecteur d'adresses IP d'AWS IoT Greengrass garantit que les adresses IP correctes sont incluses dans le champ SAN du certificat.

Dans l'exemple, le certificat est signé par l'appareil AWS IoT Greengrass agissant en tant qu'autorité de certification locale. Le client TLS (client MQTT) n'est pas au courant de l'existence de cette autorité de certification. Nous devons donc fournir un certificat de certification semblable au suivant.

![\[Exemple de certificat CA\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/b08b3bcb-9e12-4f5a-9204-cf65ea32902f.png)
