

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.

# Connect les appareils clients aux appareils principaux
<a name="connect-client-devices"></a>

Vous pouvez configurer *Cloud Discovery* pour connecter les appareils clients aux appareils principaux. Lorsque vous configurez la découverte du cloud, les appareils clients peuvent se connecter au service AWS IoT Greengrass cloud pour récupérer des informations sur les principaux appareils auxquels ils peuvent se connecter. Les appareils clients peuvent ensuite tenter de se connecter à chaque périphérique principal jusqu'à ce qu'ils se connectent correctement.

Pour utiliser Cloud Discovery, vous devez effectuer les opérations suivantes :
+ Associez les appareils clients aux appareils principaux auxquels ils peuvent se connecter.
+ Spécifiez les points de terminaison du broker MQTT auxquels les appareils clients peuvent se connecter à chaque périphérique principal.
+ Déployez des composants sur le périphérique principal qui permettent la prise en charge des appareils clients.

  Vous pouvez également déployer des composants facultatifs pour effectuer les opérations suivantes :
  + Relayez les messages entre les appareils clients, les composants de Greengrass et le service AWS IoT Core cloud.
  + Gérez automatiquement pour vous les points de terminaison du broker MQTT du périphérique principal.
  + Gérez les ombres des appareils clients locaux et synchronisez les ombres avec le service AWS IoT Core cloud.

Vous devez également revoir et mettre à jour la AWS IoT politique de l'appareil principal afin de vérifier qu'il dispose des autorisations requises pour connecter les appareils clients. Pour de plus amples informations, veuillez consulter [Prérequis](#connect-client-devices-requirements).

Après avoir configuré Cloud Discovery, vous pouvez tester les communications entre un appareil client et un appareil principal. Pour de plus amples informations, veuillez consulter [Tester les communications entre appareils clients](test-client-device-communications.md).

**Topics**
+ [Prérequis](#connect-client-devices-requirements)
+ [Composants Greengrass pour le support des appareils clients](#cloud-discovery-components)
+ [Configuration de la découverte du cloud (console)](#configure-cloud-discovery-console)
+ [Configurer la découverte du cloud (AWS CLI)](#configure-cloud-discovery-cli)
+ [Associer des appareils clients](associate-client-devices.md)
+ [Authentification des clients hors ligne](offline-authentication.md)
+ [Gérez les principaux points de terminaison des appareils](manage-core-device-endpoints.md)
+ [Choisissez un courtier MQTT](choose-local-mqtt-broker.md)
+ [Connexion des appareils clients à un périphérique AWS IoT Greengrass Core avec un courtier MQTT](connecting-to-mqtt.md)
+ [Tester les communications entre appareils clients](test-client-device-communications.md)
+ [API de découverte Greengrass RESTful](greengrass-discover-api.md)

## Prérequis
<a name="connect-client-devices-requirements"></a>

Pour connecter des appareils clients à un appareil principal, vous devez disposer des éléments suivants :
+ Le périphérique principal doit exécuter [Greengrass nucleus](greengrass-nucleus-component.md) v2.2.0 ou version ultérieure.
+ Le rôle de service Greengrass qui vous est associé AWS IoT Greengrass Compte AWS dans la AWS région où fonctionne l'appareil principal. Pour de plus amples informations, veuillez consulter [Configurer le rôle de service Greengrass](#configure-service-role-requirement).
+ La AWS IoT politique de l'appareil principal doit autoriser les autorisations suivantes :<a name="core-device-iot-policy-client-device-permissions"></a>
  + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
  + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
  + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
  + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
  + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Facultatif) Cette autorisation est requise pour utiliser le [composant de détection IP](ip-detector-component.md), qui transmet les informations de connectivité réseau de l'appareil principal au service AWS IoT Greengrass cloud.
  + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`,`iot:UpdateThingShadow`, et `iot:DeleteThingShadow` — (Facultatif) Ces autorisations sont requises pour utiliser le [composant Shadow Manager](shadow-manager-component.md) afin de synchroniser les ombres du périphérique client avec AWS IoT Core. [Cette fonctionnalité nécessite [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 ou version ultérieure, Shadow Manager v2.2.0 ou version ultérieure et MQTT bridge v2.2.0 ou version ultérieure.](mqtt-bridge-component.md)

  Pour de plus amples informations, veuillez consulter [Configuration de la AWS IoT politique des objets](#configure-iot-policy-requirement).
**Note**  
Si vous avez utilisé la AWS IoT politique par défaut lors de [l'installation du logiciel AWS IoT Greengrass Core](install-greengrass-core-v2.md), le périphérique principal dispose d'une AWS IoT politique qui autorise l'accès à toutes les AWS IoT Greengrass actions (`greengrass:*`).
+ AWS IoT objets que vous pouvez connecter en tant qu'appareils clients. Pour plus d'informations, consultez la section [Création de AWS IoT ressources](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html) dans le *guide du AWS IoT Core développeur*.
+ L'appareil client doit se connecter à l'aide d'un ID client. Un identifiant client est un nom d'objet. Aucun autre identifiant client ne sera accepté.
+ La AWS IoT politique de chaque appareil client doit autoriser l'`greengrass:Discover`autorisation. Pour de plus amples informations, veuillez consulter [AWS IoT Politique minimale pour les appareils clients](device-auth.md#client-device-minimal-iot-policy).

**Topics**
+ [Configurer le rôle de service Greengrass](#configure-service-role-requirement)
+ [Configuration de la AWS IoT politique des objets](#configure-iot-policy-requirement)

### Configurer le rôle de service Greengrass
<a name="configure-service-role-requirement"></a>

<a name="greengrass-service-role-intro"></a>Le rôle de service Greengrass est un rôle de service Gestion des identités et des accès AWS (IAM) qui autorise l'accès AWS IoT Greengrass aux ressources des AWS services en votre nom. Ce rôle permet de vérifier l'identité AWS IoT Greengrass des appareils clients et de gérer les informations de connectivité de base des appareils.

Si vous n'avez pas encore configuré le [rôle de service Greengrass](greengrass-service-role.md) dans cette région, vous devez associer un rôle de service Greengrass à votre Compte AWS rôle dans cette région. AWS IoT Greengrass 

Lorsque vous utilisez la page **Configurer la découverte des appareils principaux** de la [AWS IoT Greengrass console](https://console.aws.amazon.com/greengrass), vous AWS IoT Greengrass configurez le rôle de service Greengrass pour vous. Sinon, vous pouvez le configurer manuellement à l'aide de la [AWS IoT console](https://console.aws.amazon.com/iot) ou de AWS IoT Greengrass l'API.

Dans cette section, vous allez vérifier si le rôle de service Greengrass est configuré. S'il n'est pas configuré, vous créez un nouveau rôle de service Greengrass auquel vous pourrez vous associer AWS IoT Greengrass Compte AWS dans cette région.

#### Configuration du rôle de service Greengrass (console)
<a name="configure-service-role-requirement-console"></a>

1. Vérifiez si le rôle de service Greengrass vous est associé AWS IoT Greengrass Compte AWS dans cette région. Procédez comme suit :

   1. <a name="open-iot-console"></a>Accédez à la [console AWS IoT](https://console.aws.amazon.com/iot).

   1. Dans le panneau de navigation, sélectionnez **Settings** (Paramètres).

   1. Dans la section **Rôle de service Greengrass, recherchez Rôle** de **service actuel pour voir si un rôle** de service Greengrass est associé.

      Si un rôle de service Greengrass est associé, vous répondez à cette exigence pour utiliser le composant de détection IP. Passez à [Configuration de la AWS IoT politique des objets](#configure-iot-policy-requirement).

1. Si le rôle de service Greengrass n'est pas associé à votre AWS IoT Greengrass compte Compte AWS dans cette région, créez un rôle de service Greengrass et associez-le. Procédez comme suit :

   1. Accédez à la [Console IAM](https://console.aws.amazon.com/iam).

   1. Sélectionnez **Roles**.

   1. Choisissez **Créer un rôle**.

   1. Sur la page **Créer un rôle**, procédez comme suit :

      1. Sous **Type d'entité de confiance**, sélectionnez **Service AWS**.

      1. **Sous **Cas d'utilisation**, **Cas d'utilisation pour les autres Services AWS**, choisissez **Greengrass, sélectionnez Greengrass**.** Cette option indique d'ajouter AWS IoT Greengrass en tant qu'entité de confiance capable d'assumer ce rôle.

      1. Choisissez **Suivant**.

      1. Sous **Politiques d'autorisations**, sélectionnez le **AWSGreengrassResourceAccessRolePolicy**à associer au rôle.

      1. Choisissez **Suivant**.

      1. Dans le champ **Nom du rôle**, saisissez un nom unique pour votre rôle, par exemple **Greengrass\$1ServiceRole**.

      1. Choisissez **Créer un rôle**.

   1. <a name="open-iot-console"></a>Accédez à la [console AWS IoT](https://console.aws.amazon.com/iot).

   1. Dans le panneau de navigation, sélectionnez **Settings** (Paramètres).

   1. Dans la section **Rôle de service Greengrass, choisissez **Attacher** un rôle**.

   1. **Dans le mode **Update Greengrass Service Role, sélectionnez le rôle** IAM que vous avez créé, puis choisissez Attacher un rôle.**

#### Configurer le rôle de service Greengrass ()AWS CLI
<a name="configure-service-role-requirement-cli"></a>

1. Vérifiez si le rôle de service Greengrass vous est associé AWS IoT Greengrass Compte AWS dans cette région.

   ```
   aws greengrassv2 get-service-role-for-account
   ```

   Si le rôle de service Greengrass est associé, l'opération renvoie une réponse contenant des informations sur le rôle.

   Si un rôle de service Greengrass est associé, vous répondez à cette exigence pour utiliser le composant de détection IP. Passez à [Configuration de la AWS IoT politique des objets](#configure-iot-policy-requirement).

1. Si le rôle de service Greengrass n'est pas associé à votre AWS IoT Greengrass compte Compte AWS dans cette région, créez un rôle de service Greengrass et associez-le. Procédez comme suit :

   1. <a name="create-greengrass-service-role-step-create-role"></a>Créez un rôle avec une politique de confiance qui permet AWS IoT Greengrass d'assumer le rôle. Cet exemple crée un rôle nommé `Greengrass_ServiceRole`, mais vous pouvez utiliser un autre nom. Nous vous recommandons également d'inclure les clés `aws:SourceArn` contextuelles et les clés de contexte de condition `aws:SourceAccount` globale dans votre politique de confiance afin d'éviter tout problème *de sécurité secondaire confus*. Les clés contextuelles de condition limitent l'accès pour autoriser uniquement les demandes provenant du compte spécifié et de l'espace de travail Greengrass. Pour de plus amples informations sur le problème de l’adjoint confus, veuillez consulter [Prévention du problème de l’adjoint confus entre services](cross-service-confused-deputy-prevention.md).

------
#### [ Linux or Unix ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "greengrass.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "ArnLike": {
                "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
              },
              "StringEquals": {
                "aws:SourceAccount": "account-id"
              }
            }
          }
        ]
      }'
      ```

------
#### [ Windows Command Prompt (CMD) ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document "{\\"Version\\":\\"2012-10-17		 	 	 \\",\\"Statement\\":[{\\"Effect\\":\\"Allow\\",\\"Principal\\":{\\"Service\\":\\"greengrass.amazonaws.com\\"},\\"Action\\":\\"sts:AssumeRole\\",\\"Condition\\":{\\"ArnLike\\":{\\"aws:SourceArn\\":\\"arn:aws:greengrass:region:account-id:*\\"},\\"StringEquals\\":{\\"aws:SourceAccount\\":\\"account-id\\"}}}]}"
      ```

------
#### [ PowerShell ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "greengrass.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "ArnLike": {
                "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
              },
              "StringEquals": {
                "aws:SourceAccount": "account-id"
              }
            }
          }
        ]
      }'
      ```

------

   1. <a name="create-greengrass-service-role-step-copy-role-arn"></a>Copiez l'ARN de rôle du rôle des métadonnées dans la sortie. Vous utilisez l'ARN pour associer le rôle à votre compte.

   1. <a name="create-greengrass-service-role-step-attach-policy"></a>Attachez la stratégie `AWSGreengrassResourceAccessRolePolicy` au rôle.

      ```
      aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
      ```

   1. Associez le rôle de service Greengrass à AWS IoT Greengrass votre. Compte AWS Remplacez *role-arn* par l'ARN du rôle de service.

      ```
      aws greengrassv2 associate-service-role-to-account --role-arn role-arn
      ```

      L'opération renvoie la réponse suivante en cas de succès.

      ```
      {
        "associatedAt": "timestamp"
      }
      ```

### Configuration de la AWS IoT politique des objets
<a name="configure-iot-policy-requirement"></a>

Les appareils principaux utilisent des certificats de périphérique X.509 pour autoriser les connexions à AWS. Vous associez AWS IoT des politiques aux certificats d'appareil afin de définir les autorisations pour un appareil principal. Pour plus d’informations, consultez [AWS IoT politiques relatives aux opérations du plan de données](device-auth.md#iot-policies) et [AWS IoT Politique minimale de prise en charge des appareils clients](device-auth.md#client-device-support-minimal-iot-policy).

Pour connecter des appareils clients à un appareil principal, la AWS IoT politique du périphérique principal doit autoriser les autorisations suivantes :<a name="core-device-iot-policy-client-device-permissions"></a>
+ <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
+ <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
+ <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
+ <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
+ <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Facultatif) Cette autorisation est requise pour utiliser le [composant de détection IP](ip-detector-component.md), qui transmet les informations de connectivité réseau de l'appareil principal au service AWS IoT Greengrass cloud.
+ <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`,`iot:UpdateThingShadow`, et `iot:DeleteThingShadow` — (Facultatif) Ces autorisations sont requises pour utiliser le [composant Shadow Manager](shadow-manager-component.md) afin de synchroniser les ombres du périphérique client avec AWS IoT Core. [Cette fonctionnalité nécessite [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 ou version ultérieure, Shadow Manager v2.2.0 ou version ultérieure et MQTT bridge v2.2.0 ou version ultérieure.](mqtt-bridge-component.md)

Dans cette section, vous passez en revue les AWS IoT politiques de votre appareil principal et ajoutez les autorisations requises manquantes. Si vous avez utilisé le [programme d'installation du logiciel AWS IoT Greengrass Core pour provisionner des ressources](quick-installation.md), votre appareil principal dispose d'une AWS IoT politique qui autorise l'accès à toutes les AWS IoT Greengrass actions (`greengrass:*`). Dans ce cas, vous devez mettre à jour la AWS IoT politique uniquement si vous prévoyez de déployer le composant Shadow Manager avec lequel synchroniser les ombres des appareils AWS IoT Core. Sinon, vous pouvez ignorer cette section.

#### Configuration de la AWS IoT politique des objets (console)
<a name="configure-iot-policy-requirement-console"></a>

1. <a name="update-iot-policy-console-open-greengrass-console"></a>Dans le menu de navigation de la [AWS IoT Greengrass console](https://console.aws.amazon.com/greengrass), choisissez **Core devices**.

1. <a name="update-iot-policy-console-choose-core-device"></a>Sur la page **des appareils principaux**, choisissez le périphérique principal à mettre à jour.

1. <a name="update-iot-policy-console-choose-core-device-thing"></a>Sur la page de détails de l'appareil principal, choisissez le lien vers l'**objet** de l'appareil principal. Ce lien ouvre la page des détails de l'objet dans la AWS IoT console.

1. <a name="update-iot-policy-console-choose-thing-security"></a>Sur la page des détails de l'objet, sélectionnez **Certificats**.

1. <a name="update-iot-policy-console-choose-thing-certificate"></a>Dans l'onglet **Certificats**, choisissez le certificat actif de l'objet.

1. <a name="update-iot-policy-console-choose-certificate-policies"></a>Sur la page des détails du certificat, sélectionnez **Policies**.

1. <a name="update-iot-policy-console-choose-policy"></a>Dans l'onglet **Politiques**, choisissez la AWS IoT politique à revoir et à mettre à jour. Vous pouvez ajouter les autorisations requises à n'importe quelle politique associée au certificat actif de l'appareil principal.
**Note**  <a name="quick-installation-iot-policies-note"></a>
Si vous avez utilisé le [programme d'installation du logiciel AWS IoT Greengrass Core pour provisionner des ressources](quick-installation.md), vous avez deux AWS IoT règles. Nous vous recommandons de choisir la politique nommée **GreengrassV2IoTThingPolicy**, si elle existe. Les appareils principaux que vous créez avec le programme d'installation rapide utilisent ce nom de politique par défaut. Si vous ajoutez des autorisations à cette politique, vous les accordez également aux autres appareils principaux qui utilisent cette politique.

1. <a name="update-iot-policy-console-edit-policy"></a>Dans l'aperçu des politiques, choisissez **Modifier la version active**.

1. Passez en revue la politique relative aux autorisations requises et ajoutez les autorisations requises manquantes.<a name="core-device-iot-policy-client-device-permissions"></a>
   + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
   + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
   + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Facultatif) Cette autorisation est requise pour utiliser le [composant de détection IP](ip-detector-component.md), qui transmet les informations de connectivité réseau de l'appareil principal au service AWS IoT Greengrass cloud.
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`,`iot:UpdateThingShadow`, et `iot:DeleteThingShadow` — (Facultatif) Ces autorisations sont requises pour utiliser le [composant Shadow Manager](shadow-manager-component.md) afin de synchroniser les ombres du périphérique client avec AWS IoT Core. [Cette fonctionnalité nécessite [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 ou version ultérieure, Shadow Manager v2.2.0 ou version ultérieure et MQTT bridge v2.2.0 ou version ultérieure.](mqtt-bridge-component.md)

1. (Facultatif) Pour autoriser le périphérique principal à synchroniser les ombres avec AWS IoT Core, ajoutez l'instruction suivante à la politique. Si vous prévoyez d'interagir avec les ombres de l'appareil client, mais que vous ne les synchronisez pas AWS IoT Core, ignorez cette étape. Remplacez *region* et *account-id* par la région que vous utilisez et votre Compte AWS numéro.
   + Cet exemple d'instruction permet d'accéder aux ombres de tous les appareils. Pour suivre les meilleures pratiques de sécurité, vous pouvez restreindre l'accès uniquement au périphérique principal et aux appareils clients que vous connectez au périphérique principal. Pour de plus amples informations, veuillez consulter [AWS IoT Politique minimale de prise en charge des appareils clients](device-auth.md#client-device-support-minimal-iot-policy).

   ```
   {
     "Effect": "Allow",
     "Action": [
       "iot:GetThingShadow",
       "iot:UpdateThingShadow",
       "iot:DeleteThingShadow"
     ],
     "Resource": [
       "arn:aws:iot:region:account-id:thing/*"
     ]
   }
   ```

   Après avoir ajouté cette déclaration, le document de politique peut ressembler à l'exemple suivant.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "iot:Connect",
           "iot:Publish",
           "iot:Subscribe",
           "iot:Receive",
           "greengrass:*"
         ],
         "Resource": "*"
       },
       {
         "Effect": "Allow",
         "Action": [
           "iot:GetThingShadow",
           "iot:UpdateThingShadow",
           "iot:DeleteThingShadow"
         ],
         "Resource": [
           "arn:aws:iot:us-east-1:123456789012:thing/*"
         ]
       }
     ]
   }
   ```

------

1. <a name="update-iot-policy-console-set-as-active-version"></a>Pour définir une nouvelle version de politique comme version active, sous **État de la version de politique**, sélectionnez **Définir la version modifiée comme version active pour cette politique**.

1. <a name="update-iot-policy-console-save-policy"></a>Sélectionnez **Enregistrer comme nouvelle version**.

#### Configurer la politique AWS IoT des objets (AWS CLI)
<a name="configure-iot-policy-requirement-cli"></a>

1. <a name="update-iot-policy-cli-list-thing-principals"></a>Énumérez les principes de base de l'appareil AWS IoT . Les principaux de l'objet peuvent être des certificats de périphériques X.509 ou d'autres identifiants. Exécutez la commande suivante et *MyGreengrassCore* remplacez-la par le nom du périphérique principal.

   ```
   aws iot list-thing-principals --thing-name MyGreengrassCore
   ```

   L'opération renvoie une réponse répertoriant les principaux éléments du périphérique principal.

   ```
   {
       "principals": [
           "arn:aws:iot:us-west-2:123456789012:cert/certificateId"
       ]
   }
   ```

1. <a name="update-iot-policy-cli-identify-active-certificate"></a>Identifiez le certificat actif de l'appareil principal. Exécutez la commande suivante et remplacez-la *certificateId* par l'ID de chaque certificat de l'étape précédente jusqu'à ce que vous trouviez le certificat actif. L'ID du certificat est la chaîne hexadécimale à la fin de l'ARN du certificat. L'`--query`argument indique de n'afficher que le statut du certificat.

   ```
   aws iot describe-certificate --certificate-id certificateId --query 'certificateDescription.status'
   ```

   L'opération renvoie le statut du certificat sous forme de chaîne. Par exemple, si le certificat est actif, cette opération produit des résultats`"ACTIVE"`.

1. <a name="update-iot-policy-cli-list-certificate-policies"></a> AWS IoT Répertoriez les politiques associées au certificat. Exécutez la commande suivante et remplacez l'ARN du certificat par l'ARN du certificat.

   ```
   aws iot list-principal-policies --principal arn:aws:iot:us-west-2:123456789012:cert/certificateId
   ```

   L'opération renvoie une réponse répertoriant les AWS IoT politiques associées au certificat.

   ```
   {
       "policies": [
           {
               "policyName": "GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias"
           },
           {
               "policyName": "GreengrassV2IoTThingPolicy",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy"
           }
       ]
   }
   ```

1. <a name="update-iot-policy-cli-choose-policy"></a>Choisissez la politique à consulter et à mettre à jour.
**Note**  <a name="quick-installation-iot-policies-note"></a>
Si vous avez utilisé le [programme d'installation du logiciel AWS IoT Greengrass Core pour provisionner des ressources](quick-installation.md), vous avez deux AWS IoT règles. Nous vous recommandons de choisir la politique nommée **GreengrassV2IoTThingPolicy**, si elle existe. Les appareils principaux que vous créez avec le programme d'installation rapide utilisent ce nom de politique par défaut. Si vous ajoutez des autorisations à cette politique, vous les accordez également aux autres appareils principaux qui utilisent cette politique.

1. <a name="update-iot-policy-cli-get-policy-document"></a>Obtenez le document de la politique. Exécutez la commande suivante et *GreengrassV2IoTThingPolicy* remplacez-la par le nom de la politique.

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy
   ```

   L'opération renvoie une réponse contenant le document de la politique et d'autres informations relatives à la politique. Le document de politique est un objet JSON sérialisé sous forme de chaîne. 

   ```
   {
       "policyName": "GreengrassV2IoTThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
                   \\"iot:Connect\\",\
                   \\"iot:Publish\\",\
                   \\"iot:Subscribe\\",\
                   \\"iot:Receive\\",\
                   \\"greengrass:*\\"\
   ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "defaultVersionId": "1",
       "creationDate": "2021-02-05T16:03:14.098000-08:00",
       "lastModifiedDate": "2021-02-05T16:03:14.098000-08:00",
       "generationId": "f19144b798534f52c619d44f771a354f1b957dfa2b850625d9f1d0fde530e75f"
   }
   ```

1. <a name="update-iot-policy-cli-create-policy-document-file"></a>Utilisez un convertisseur en ligne ou un autre outil pour convertir la chaîne du document de politique en objet JSON, puis enregistrez-la dans un fichier nommé`iot-policy.json`.

   Par exemple, si l'outil [jq](https://stedolan.github.io/jq/) est installé, vous pouvez exécuter la commande suivante pour obtenir le document de politique, le convertir en objet JSON et enregistrer le document de politique en tant qu'objet JSON.

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy --query 'policyDocument' | jq fromjson >> iot-policy.json
   ```

1. Passez en revue la politique relative aux autorisations requises et ajoutez les autorisations requises manquantes.

   <a name="nano-command-intro-existing-file"></a>Par exemple, sur un système basé sur Linux, vous pouvez exécuter la commande suivante pour utiliser GNU nano pour ouvrir le fichier.

   ```
   nano iot-policy.json
   ```<a name="core-device-iot-policy-client-device-permissions"></a>
   + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
   + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
   + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Facultatif) Cette autorisation est requise pour utiliser le [composant de détection IP](ip-detector-component.md), qui transmet les informations de connectivité réseau de l'appareil principal au service AWS IoT Greengrass cloud.
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`,`iot:UpdateThingShadow`, et `iot:DeleteThingShadow` — (Facultatif) Ces autorisations sont requises pour utiliser le [composant Shadow Manager](shadow-manager-component.md) afin de synchroniser les ombres du périphérique client avec AWS IoT Core. [Cette fonctionnalité nécessite [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 ou version ultérieure, Shadow Manager v2.2.0 ou version ultérieure et MQTT bridge v2.2.0 ou version ultérieure.](mqtt-bridge-component.md)

1. <a name="update-iot-policy-cli-create-policy-version"></a>Enregistrez les modifications en tant que nouvelle version de la politique. Exécutez la commande suivante et *GreengrassV2IoTThingPolicy* remplacez-la par le nom de la politique.

   ```
   aws iot create-policy-version --policy-name GreengrassV2IoTThingPolicy --policy-document file://iot-policy.json --set-as-default
   ```

   L'opération renvoie une réponse similaire à l'exemple suivant en cas de succès.

   ```
   {
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
   \\t\\t\\"iot:Connect\\",\
   \\t\\t\\"iot:Publish\\",\
   \\t\\t\\"iot:Subscribe\\",\
   \\t\\t\\"iot:Receive\\",\
   \\t\\t\\"greengrass:*\\"\
         ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "policyVersionId": "2",
       "isDefaultVersion": true
   }
   ```

## Composants Greengrass pour le support des appareils clients
<a name="cloud-discovery-components"></a>

**Important**  <a name="client-device-support-nucleus-requirement"></a>
Le périphérique principal doit exécuter [Greengrass nucleus](greengrass-nucleus-component.md) v2.2.0 ou version ultérieure pour prendre en charge les appareils clients.

Pour permettre aux appareils clients de se connecter et de communiquer avec un appareil principal, vous déployez les composants Greengrass suivants sur le périphérique principal :
+ <a name="client-device-component-overview-client-device-auth"></a>[Authentification de l'appareil client](client-device-auth-component.md) (`aws.greengrass.clientdevices.Auth`)

  Déployez le composant d'authentification des appareils clients pour authentifier les appareils clients et autoriser les actions des appareils clients. Ce composant permet à vos AWS IoT objets de se connecter à un appareil principal.

  Ce composant nécessite une certaine configuration pour pouvoir être utilisé. Vous devez spécifier les groupes de périphériques clients et les opérations que chaque groupe est autorisé à effectuer, telles que la connexion et la communication via MQTT. Pour plus d'informations, consultez la section [Configuration du composant d'authentification de l'appareil client](client-device-auth-component.md#client-device-auth-component-configuration).
+ <a name="client-device-component-overview-mqtt-broker-moquette"></a>[Courtier MQTT 3.1.1 (Moquette)](mqtt-broker-moquette-component.md) (`aws.greengrass.clientdevices.mqtt.Moquette`)

  Déployez le composant de courtier MQTT Moquette pour exécuter un courtier MQTT léger. Le broker Moquette MQTT est conforme à MQTT 3.1.1 et inclut un support local pour QoS 0, QoS 1, QoS 2, les messages conservés, les messages de dernière volonté et les abonnements persistants.

  Vous n'êtes pas obligé de configurer ce composant pour l'utiliser. Cependant, vous pouvez configurer le port sur lequel ce composant fait fonctionner le broker MQTT. Par défaut, il utilise le port 8883.
+ <a name="client-device-component-overview-mqtt-broker-emqx"></a>[Courtier MQTT 5 (EMQX)](mqtt-broker-emqx-component.md) (`aws.greengrass.clientdevices.mqtt.EMQX`)
**Note**  
Pour utiliser le broker EMQX MQTT 5, vous devez utiliser [Greengrass nucleus v2.6.0 ou version ultérieure et client device](greengrass-nucleus-component.md) auth v2.2.0 ou version ultérieure.

  Déployez le composant broker EMQX MQTT pour utiliser les fonctionnalités MQTT 5.0 dans la communication entre les appareils clients et le périphérique principal. Le broker MQTT EMQX est compatible avec MQTT 5.0 et inclut la prise en charge des intervalles d'expiration des sessions et des messages, des propriétés utilisateur, des abonnements partagés, des alias de rubrique, etc.

  Vous n'êtes pas obligé de configurer ce composant pour l'utiliser. Cependant, vous pouvez configurer le port sur lequel ce composant fait fonctionner le broker MQTT. Par défaut, il utilise le port 8883.
+ <a name="client-device-component-overview-mqtt-bridge"></a>[Pont MQTT](mqtt-bridge-component.md) (`aws.greengrass.clientdevices.mqtt.Bridge`)

  (Facultatif) Déployez le composant pont MQTT pour relayer les messages entre les appareils clients (MQTT local), publiation/abonnement locaux et MQTT. AWS IoT Core Configurez ce composant pour synchroniser les appareils clients avec les appareils clients AWS IoT Core et interagir avec eux à partir des composants Greengrass.

  Ce composant nécessite une configuration pour être utilisé. Vous devez spécifier les mappages de rubriques dans lesquels ce composant relaie les messages. Pour plus d'informations, consultez la section [Configuration des composants du pont MQTT](mqtt-bridge-component.md#mqtt-bridge-component-configuration).
+ <a name="client-device-component-overview-ip-detector"></a>[Détecteur IP](ip-detector-component.md) (`aws.greengrass.clientdevices.IPDetector`)

  (Facultatif) Déployez le composant de détection IP pour signaler automatiquement les points de terminaison du broker MQTT du périphérique principal au service AWS IoT Greengrass cloud. Vous ne pouvez pas utiliser ce composant si votre configuration réseau est complexe, par exemple si un routeur transmet le port du broker MQTT au périphérique principal.

  Vous n'êtes pas obligé de configurer ce composant pour l'utiliser.
+ <a name="client-device-component-overview-shadow-manager"></a>[Shadow Manager](shadow-manager-component.md) (`aws.greengrass.ShadowManager`)
**Note**  
[Pour gérer les ombres des appareils clients, vous devez utiliser [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 ou version ultérieure, Shadow Manager v2.2.0 ou version ultérieure et MQTT bridge v2.2.0 ou version ultérieure.](mqtt-bridge-component.md)

  (Facultatif) Déployez le composant Shadow Manager pour gérer les ombres du périphérique client sur le périphérique principal. Les composants Greengrass peuvent obtenir, mettre à jour et supprimer les ombres des appareils clients afin d'interagir avec les appareils clients. Vous pouvez également configurer le composant Shadow Manager pour synchroniser les ombres du périphérique client avec le service AWS IoT Core cloud.

  Pour utiliser ce composant avec les ombres des périphériques clients, vous devez configurer le composant du pont MQTT pour relayer les messages entre les appareils clients et le gestionnaire des ombres, qui utilise la publication et l'abonnement locaux. Dans le cas contraire, ce composant ne nécessite pas de configuration pour être utilisé, mais il nécessite une configuration pour synchroniser les ombres de l'appareil.

**Note**  <a name="note-deploy-one-mqtt-broker"></a>
Nous vous recommandons de ne déployer qu'un seul composant de broker MQTT. Le [pont MQTT](mqtt-bridge-component.md) et les composants du [détecteur IP](ip-detector-component.md) ne fonctionnent qu'avec un seul composant de courtier MQTT à la fois. Si vous déployez plusieurs composants du broker MQTT, vous devez les configurer pour utiliser différents ports.

## Configuration de la découverte du cloud (console)
<a name="configure-cloud-discovery-console"></a>

Vous pouvez utiliser la AWS IoT Greengrass console pour associer des appareils clients, gérer les points de terminaison des appareils principaux et déployer des composants afin de permettre la prise en charge des appareils clients. Pour de plus amples informations, veuillez consulter [Étape 2 : activer la prise en charge des appareils clients](client-devices-tutorial.md#enable-client-device-support).

## Configurer la découverte du cloud (AWS CLI)
<a name="configure-cloud-discovery-cli"></a>

Vous pouvez utiliser le AWS Command Line Interface (AWS CLI) pour associer des appareils clients, gérer les points de terminaison des appareils principaux et déployer des composants afin de permettre la prise en charge des appareils clients. Pour plus d’informations, consultez les ressources suivantes :
+ [Gérer les associations entre appareils clients (AWS CLI)](associate-client-devices.md#manage-client-device-associations-cli)
+ [Gérez les principaux points de terminaison des appareils](manage-core-device-endpoints.md)
+ [AWS-composants de l'appareil client fournis](client-device-components.md)
+ [Créer des déploiements](create-deployments.md)

# Associer des appareils clients
<a name="associate-client-devices"></a>

Pour utiliser la découverte du cloud, associez les appareils clients à un appareil principal afin qu'ils puissent découvrir le périphérique principal. Ils peuvent ensuite utiliser l'[API de découverte Greengrass](greengrass-discover-api.md) pour récupérer les informations de connectivité et les certificats pour leurs principaux appareils associés.

De même, dissociez les appareils clients d'un périphérique principal pour les empêcher de découvrir le périphérique principal.

**Topics**
+ [Gérer les associations entre appareils clients (console)](#manage-client-device-associations-console)
+ [Gérer les associations entre appareils clients (AWS CLI)](#manage-client-device-associations-cli)
+ [Gérer les associations client-appareil (API)](#manage-client-device-associations-api)

## Gérer les associations entre appareils clients (console)
<a name="manage-client-device-associations-console"></a>

Vous pouvez utiliser la AWS IoT Greengrass console pour afficher, ajouter et supprimer des associations client-appareil.

**Pour afficher les associations de périphériques clients pour un périphérique principal (console)**

1. <a name="navigate-greengrass-console"></a>Accédez à la [console AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Choisissez les **appareils Core**.

1. Choisissez l'appareil principal à gérer.

1. Sur la page de détails de l'appareil principal, choisissez l'onglet **Appareils clients**.

1. Dans la section **Appareils clients associés**, vous pouvez voir quels appareils clients (AWS IoT objets) sont associés au périphérique principal.

**Pour associer des appareils clients à un périphérique principal (console)**

1. <a name="navigate-greengrass-console"></a>Accédez à la [console AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Choisissez les **appareils Core**.

1. Choisissez l'appareil principal à gérer.

1. Sur la page de détails de l'appareil principal, choisissez l'onglet **Appareils clients**.

1. Dans la section **Appareils clients associés**, choisissez **Associer les appareils clients**.

1. Dans le mode **Associer les appareils clients au périphérique principal**, procédez comme suit pour chaque appareil client à associer :

   1. Entrez le nom de l' AWS IoT objet à associer en tant qu'appareil client.

   1. Choisissez **Ajouter**.

1. Choisissez **Associer**.

   Les appareils clients que vous avez associés peuvent désormais utiliser l'API de découverte Greengrass pour découvrir cet appareil principal.

**Pour dissocier les appareils clients d'un périphérique principal (console)**

1. <a name="navigate-greengrass-console"></a>Accédez à la [console AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Choisissez les **appareils Core**.

1. Choisissez l'appareil principal à gérer.

1. Sur la page de détails de l'appareil principal, choisissez l'onglet **Appareils clients**.

1. Dans la section **Appareils clients associés**, sélectionnez chaque appareil client à dissocier.

1. Choisissez **Dissocier**.

1. Dans le mode de confirmation, choisissez **Dissocier.**

   Les appareils clients que vous avez dissociés ne peuvent plus utiliser l'API de découverte Greengrass pour découvrir cet appareil principal.

## Gérer les associations entre appareils clients (AWS CLI)
<a name="manage-client-device-associations-cli"></a>

Vous pouvez utiliser le AWS Command Line Interface (AWS CLI) pour gérer les associations d'appareils clients pour un appareil principal.

**Pour afficher les associations de périphériques clients pour un périphérique principal (AWS CLI)**
+ Utilisez la commande suivante : [list-client-devices-associated- with-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/list-client-devices-associated-with-core-device.html).

**Pour associer des appareils clients à un périphérique principal (AWS CLI)**
+ Utilisez la commande suivante : [batch-associate-client-device- with-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/batch-associate-client-device-with-core-device.html).

**Pour dissocier les appareils clients d'un périphérique principal ()AWS CLI**
+ Utilisez la commande suivante : [batch-disassociate-client-device- from-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/batch-disassociate-client-device-from-core-device.html).

## Gérer les associations client-appareil (API)
<a name="manage-client-device-associations-api"></a>

Vous pouvez utiliser l' AWS API pour gérer les associations d'appareils clients pour un appareil principal.

**Pour afficher les associations entre appareils clients pour un appareil principal (AWS API)**
+ Utilisez l'opération suivante : [ListClientDevicesAssociatedWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListClientDevicesAssociatedWithCoreDevice.html)

**Pour associer des appareils clients à un périphérique principal (AWS API)**
+ Utilisez l'opération suivante : [BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html)

**Pour dissocier les appareils clients d'un périphérique principal (AWS API)**
+ Utilisez l'opération suivante : [BatchDisassociateClientDeviceFromCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchDisassociateClientDeviceFromCoreDevice.html)

# Authentification des clients hors ligne
<a name="offline-authentication"></a>

Avec *l'authentification hors ligne*, vous pouvez configurer votre appareil AWS IoT Greengrass Core afin que les appareils clients puissent se connecter à un appareil principal, même lorsque celui-ci n'est pas connecté au cloud. Lorsque vous utilisez l'authentification hors ligne, vos appareils Greengrass peuvent continuer à fonctionner dans un environnement partiellement hors ligne.

Pour utiliser l'authentification hors ligne pour un appareil client connecté au cloud, vous devez disposer des éléments suivants :
+ Un appareil AWS IoT Greengrass Core sur lequel le [Authentification de l'appareil client](client-device-auth-component.md) composant est déployé. Vous devez utiliser la version 2.3.0 ou supérieure pour l'authentification hors ligne.
+ Une connexion au cloud pour le périphérique principal lors de la connexion initiale des appareils clients.

## Stockage des informations d'identification client
<a name="offline-auth-store-credentials"></a>

Lorsqu'un dispositif client se connecte à un dispositif central pour la première fois, celui-ci appelle le AWS IoT Greengrass service. Lorsqu'il est appelé, Greengrass valide l'enregistrement de l'appareil client comme un objet. AWS IoT Cela permet également de vérifier que l'appareil possède un certificat valide. Le dispositif central stocke ensuite ces informations localement.

La prochaine fois que l'appareil se connecte, le périphérique principal de Greengrass tente de valider l'appareil client auprès du AWS IoT Greengrass service. S'il ne parvient pas à se connecter AWS IoT Greengrass, le périphérique principal utilise ses informations de périphérique stockées localement pour valider le périphérique client.

Vous pouvez configurer la durée pendant laquelle le périphérique principal Greengrass stocke les informations d'identification. [Vous pouvez définir le délai d'une minute à 2 147 483 647 minutes en définissant l'option de configuration dans la `clientDeviceTrustDurationMinutes` configuration du composant d'authentification du périphérique client.](https://docs.aws.amazon.com//greengrass/v2/developerguide/client-device-auth-component.html#client-device-auth-component-configuration) La durée par défaut est d'une minute, ce qui désactive effectivement l'authentification hors ligne. Lorsque vous définissez ce délai, nous vous recommandons de prendre en compte vos besoins en matière de sécurité. Vous devez également tenir compte de la durée pendant laquelle vous prévoyez que les appareils principaux fonctionneront lorsqu'ils sont déconnectés du cloud.

Le périphérique principal met à jour son stockage d'informations d'identification à trois reprises :

1. Lorsqu'un appareil se connecte au périphérique principal pour la première fois.

1. Si le périphérique principal est connecté au cloud, lorsqu'un appareil client se reconnecte au périphérique principal.

1. Si l'appareil principal est connecté au cloud, actualisez l'intégralité de la banque d'informations d'identification une fois par jour.

Lorsque le périphérique principal Greengrass actualise son magasin d'informations d'identification, il utilise l'opération. [ ListClientDevicesAssociatedWithCoreDevice](https://docs.aws.amazon.com//greengrass/v2/APIReference/API_ListClientDevicesAssociatedWithCoreDevice.html) Greengrass actualise uniquement les appareils renvoyés par cette opération. Pour associer un appareil client à un périphérique principal, consultez[Associer des appareils clients](associate-client-devices.md).

Pour utiliser l'`ListClientDevicesAssociatedWithCoreDevice`opération, vous devez ajouter une autorisation pour l'opération au rôle Gestion des identités et des accès AWS (IAM) associé à l'opération Compte AWS qui s'exécute AWS IoT Greengrass. Pour de plus amples informations, veuillez consulter [Autoriser les appareils principaux à interagir avec les AWS services](device-service-role.md).

# Gérez les principaux points de terminaison des appareils
<a name="manage-core-device-endpoints"></a>

Lorsque vous utilisez la découverte du cloud, vous stockez les points de terminaison du broker MQTT pour les appareils principaux dans le service AWS IoT Greengrass cloud. Les appareils clients se connectent AWS IoT Greengrass pour récupérer ces points de terminaison et d'autres informations relatives à leurs périphériques principaux associés.

Pour chaque appareil principal, vous pouvez gérer les points de terminaison automatiquement ou manuellement.
+ **Gérez automatiquement les points de terminaison avec le détecteur IP**

  Vous pouvez déployer le [composant de détection IP](ip-detector-component.md) pour gérer automatiquement les points de terminaison des appareils principaux à votre place si votre configuration réseau n'est pas complexe, par exemple si les appareils clients se trouvent sur le même réseau que le périphérique principal. Vous ne pouvez pas utiliser le composant de détection IP si le périphérique principal se trouve derrière un routeur qui transmet le port du broker MQTT au périphérique principal, par exemple.

  Le composant de détection IP est également utile si vous déployez dans des groupes d'objets, car il gère les points de terminaison de tous les appareils principaux du groupe d'objets. Pour de plus amples informations, veuillez consulter [Utiliser le détecteur IP pour gérer automatiquement les points de terminaison](#use-ip-detector).
+ **Gérer manuellement les points de terminaison**

  Si vous ne pouvez pas utiliser le composant de détection IP, vous devez gérer manuellement les principaux points de terminaison de l'appareil. Vous pouvez mettre à jour ces points de terminaison à l'aide de la console ou de l'API. Pour de plus amples informations, veuillez consulter [Gérer manuellement les points de terminaison](#manually-manage-endpoints).

**Topics**
+ [Utiliser le détecteur IP pour gérer automatiquement les points de terminaison](#use-ip-detector)
+ [Gérer manuellement les points de terminaison](#manually-manage-endpoints)

## Utiliser le détecteur IP pour gérer automatiquement les points de terminaison
<a name="use-ip-detector"></a>

Si vous disposez d'une configuration réseau simple, telle que les appareils clients sur le même réseau que le périphérique principal, vous pouvez déployer le [composant de détection IP](ip-detector-component.md) pour effectuer les opérations suivantes :
+ Surveillez les informations de connectivité réseau locale de l'appareil central Greengrass. Ces informations incluent les points de terminaison réseau du périphérique principal et le port sur lequel fonctionne le broker MQTT.
+ Signalez les informations de connectivité de l'appareil principal au service AWS IoT Greengrass cloud.

Le composant du détecteur IP remplace les points de terminaison que vous avez définis manuellement.

**Important**  
La AWS IoT politique de l'appareil principal doit `greengrass:UpdateConnectivityInfo` autoriser l'utilisation du composant de détection IP. Pour plus d’informations, consultez [AWS IoT politiques relatives aux opérations du plan de données](device-auth.md#iot-policies) et [Configuration de la AWS IoT politique des objets](connect-client-devices.md#configure-iot-policy-requirement).

Vous pouvez effectuer l'une des opérations suivantes pour déployer le composant de détection IP :
+ Utilisez la page **Configurer la découverte** de la console. Pour de plus amples informations, veuillez consulter [Configuration de la découverte du cloud (console)](connect-client-devices.md#configure-cloud-discovery-console).
+ Créez et révisez les déploiements pour inclure le détecteur IP. Vous pouvez utiliser la console ou l' AWS CLI AWS API pour gérer les déploiements. Pour de plus amples informations, veuillez consulter [Créer des déploiements](create-deployments.md).

### Déployer le composant de détection IP (console)
<a name="deploy-ip-detector-console"></a>

1. Dans le menu de navigation de la [AWS IoT Greengrass console](https://console.aws.amazon.com/greengrass), sélectionnez **Composants**.

1. Sur la page **Composants**, choisissez l'onglet **Composants publics**, puis sélectionnez **aws.greengrass.clientdevices.IPDetector**.

1. Sur la page **aws.greengrass.clientdevices.IPDetector**, choisissez **Deploy (Déployer)**.

1. <a name="deploy-component-choose-deployment-step"></a>Dans **Ajouter au déploiement**, choisissez un déploiement existant à réviser ou choisissez de créer un nouveau déploiement, puis choisissez **Suivant**.

1. <a name="deploy-component-choose-target-step"></a>Si vous avez choisi de créer un nouveau déploiement, choisissez le périphérique principal ou le groupe d'objets cible pour le déploiement. Sur la page **Spécifier la cible**, sous **Cible de déploiement**, choisissez un périphérique principal ou un groupe d'objets, puis cliquez sur **Suivant**.

1. Sur la page **Sélectionner les composants**, vérifiez que le **aws.greengrass.clientdevices.IPDetector**composant est sélectionné, puis choisissez **Next**.

1. Sur la page **Configurer les composants**, sélectionnez **aws.greengrass.clientdevices.IPDetector**, puis effectuez les opérations suivantes :

   1. Choisissez **Configure component (Configurer un composant)**.

   1. Dans le aws.greengrass.clientdevices.IPDetector mode **Configurer**, sous **Mise à jour de la configuration**, dans **Configuration à fusionner**, vous pouvez saisir une mise à jour de configuration pour configurer le composant du détecteur IP. Vous pouvez définir l'une des options de configuration suivantes :
      + `defaultPort`— <a name="ip-detector-component-configuration-default-port-definition"></a>(Facultatif) Le port du broker MQTT à signaler lorsque ce composant détecte des adresses IP. Vous devez spécifier ce paramètre si vous configurez le broker MQTT pour utiliser un port différent du port par défaut 8883. 
      + `includeIPv4LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv4-loopback-addrs-definition"></a>(Facultatif) Vous pouvez activer cette option pour détecter et signaler les adresses de IPv4 boucle. Il s'agit d'adresses IP, par exemple`localhost`, où un appareil peut communiquer avec lui-même. Utilisez cette option dans les environnements de test dans lesquels le périphérique principal et le périphérique client s'exécutent sur le même système. 
      + `includeIPv4LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv4-link-local-addrs-definition"></a>(Facultatif) Vous pouvez activer cette option pour détecter et signaler les adresses IPv4 [locales liées aux liens](https://en.wikipedia.org/wiki/Link-local_address). Utilisez cette option si le réseau du périphérique principal ne dispose pas du protocole DHCP (Dynamic Host Configuration Protocol) ou d'adresses IP attribuées de manière statique. 
      + `includeIPv6LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv6-loopback-addrs-definition"></a>(Facultatif) Vous pouvez activer cette option pour détecter et signaler les adresses de IPv6 boucle. Il s'agit d'adresses IP, par exemple`localhost`, où un appareil peut communiquer avec lui-même. Utilisez cette option dans les environnements de test dans lesquels le périphérique principal et le périphérique client s'exécutent sur le même système. Vous devez `includeIPv4Addrs` définir sur `false` et `includeIPv6Addrs` sur `true` pour utiliser cette option. Vous devez disposer du détecteur IP v2.2.0 ou version ultérieure pour utiliser cette option.
      + `includeIPv6LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv6-link-local-addrs-definition"></a>(Facultatif) Vous pouvez activer cette option pour détecter et signaler les adresses IPv6 [locales liées aux liens](https://en.wikipedia.org/wiki/Link-local_address). Utilisez cette option si le réseau du périphérique principal ne dispose pas du protocole DHCP (Dynamic Host Configuration Protocol) ou d'adresses IP attribuées de manière statique. Vous devez `includeIPv4Addrs` définir sur `false` et `includeIPv6Addrs` sur `true` pour utiliser cette option. Vous devez disposer du détecteur IP v2.2.0 ou version ultérieure pour utiliser cette option.
      + `includeIPv4Addrs`— <a name="ip-detector-component-configuration-include-ipv4-addrs-definition"></a>(Facultatif) La valeur par défaut est définie sur true. Vous pouvez activer cette option pour publier IPv4 les adresses présentes sur l'appareil principal. Vous devez disposer du détecteur IP v2.2.0 ou version ultérieure pour utiliser cette option.
      + `includeIPv6Addrs`— <a name="ip-detector-component-configuration-include-ipv6-addrs-definition"></a>(Facultatif) Vous pouvez activer cette option pour publier IPv6 les adresses trouvées sur l'appareil principal. Réglez `false` sur `includeIPv4Addrs` pour utiliser cette option. Vous devez disposer du détecteur IP v2.2.0 ou version ultérieure pour utiliser cette option.

      La mise à jour de configuration peut ressembler à l'exemple suivant.

      ```
      {
        "defaultPort": "8883",
        "includeIPv4LoopbackAddrs": false,
        "includeIPv4LinkLocalAddrs": false
      }
      ```

   1. Choisissez **Confirmer** pour fermer le modal, puis cliquez sur **Suivant**.

1. <a name="deploy-component-configure-advanced-settings-step"></a>Sur la page **Configure advanced settings (Configurer les paramètres avancés)**, conservez les paramètres de configuration par défaut et choisissez **Next (Suivant)**.

1. <a name="deploy-component-review-and-deploy-step"></a>Sur la page **Review (Révision)**, choisissez **Deploy (Déployer)**.

   Le déploiement peut prendre jusqu'à une minute.

### Déployer le composant du détecteur IP (AWS CLI)
<a name="deploy-ip-detector-cli"></a>

Pour déployer le composant du détecteur IP, créez un document de déploiement qui inclut `aws.greengrass.clientdevices.IPDetector` l'`components`objet et spécifiez la mise à jour de configuration du composant. Suivez les instructions [Créer des déploiements](create-deployments.md) pour créer un nouveau déploiement ou modifier un déploiement existant.

Vous pouvez spécifier l'une des options suivantes pour configurer le composant du détecteur IP lorsque vous créez le document de déploiement :
+ `defaultPort`— <a name="ip-detector-component-configuration-default-port-definition"></a>(Facultatif) Le port du broker MQTT à signaler lorsque ce composant détecte des adresses IP. Vous devez spécifier ce paramètre si vous configurez le broker MQTT pour utiliser un port différent du port par défaut 8883. 
+ `includeIPv4LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv4-loopback-addrs-definition"></a>(Facultatif) Vous pouvez activer cette option pour détecter et signaler les adresses de IPv4 boucle. Il s'agit d'adresses IP, par exemple`localhost`, où un appareil peut communiquer avec lui-même. Utilisez cette option dans les environnements de test dans lesquels le périphérique principal et le périphérique client s'exécutent sur le même système. 
+ `includeIPv4LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv4-link-local-addrs-definition"></a>(Facultatif) Vous pouvez activer cette option pour détecter et signaler les adresses IPv4 [locales liées aux liens](https://en.wikipedia.org/wiki/Link-local_address). Utilisez cette option si le réseau du périphérique principal ne dispose pas du protocole DHCP (Dynamic Host Configuration Protocol) ou d'adresses IP attribuées de manière statique. 
+ `includeIPv6LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv6-loopback-addrs-definition"></a>(Facultatif) Vous pouvez activer cette option pour détecter et signaler les adresses de IPv6 boucle. Il s'agit d'adresses IP, par exemple`localhost`, où un appareil peut communiquer avec lui-même. Utilisez cette option dans les environnements de test dans lesquels le périphérique principal et le périphérique client s'exécutent sur le même système. Vous devez `includeIPv4Addrs` définir sur `false` et `includeIPv6Addrs` sur `true` pour utiliser cette option. Vous devez disposer du détecteur IP v2.2.0 ou version ultérieure pour utiliser cette option.
+ `includeIPv6LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv6-link-local-addrs-definition"></a>(Facultatif) Vous pouvez activer cette option pour détecter et signaler les adresses IPv6 [locales liées aux liens](https://en.wikipedia.org/wiki/Link-local_address). Utilisez cette option si le réseau du périphérique principal ne dispose pas du protocole DHCP (Dynamic Host Configuration Protocol) ou d'adresses IP attribuées de manière statique. Vous devez `includeIPv4Addrs` définir sur `false` et `includeIPv6Addrs` sur `true` pour utiliser cette option. Vous devez disposer du détecteur IP v2.2.0 ou version ultérieure pour utiliser cette option.
+ `includeIPv4Addrs`— <a name="ip-detector-component-configuration-include-ipv4-addrs-definition"></a>(Facultatif) La valeur par défaut est définie sur true. Vous pouvez activer cette option pour publier IPv4 les adresses présentes sur l'appareil principal. Vous devez disposer du détecteur IP v2.2.0 ou version ultérieure pour utiliser cette option.
+ `includeIPv6Addrs`— <a name="ip-detector-component-configuration-include-ipv6-addrs-definition"></a>(Facultatif) Vous pouvez activer cette option pour publier IPv6 les adresses trouvées sur l'appareil principal. Réglez `false` sur `includeIPv4Addrs` pour utiliser cette option. Vous devez disposer du détecteur IP v2.2.0 ou version ultérieure pour utiliser cette option.

L'exemple de document de déploiement partiel suivant indique de signaler le port 8883 comme port du broker MQTT.

```
{
  ...,
  "components": {
    ...,
    "aws.greengrass.clientdevices.IPDetector": {
      "componentVersion": "2.1.1",
      "configurationUpdate": {
        "merge": "{\"defaultPort\":\"8883\",}"
      }
    }
  }
}
```

## Gérer manuellement les points de terminaison
<a name="manually-manage-endpoints"></a>

Vous pouvez gérer manuellement les points de terminaison du broker MQTT pour les appareils principaux.

Chaque point de terminaison du broker MQTT possède les informations suivantes :

Point de **terminaison** (`HostAddress`)  
Adresse IP ou adresse DNS à laquelle les appareils clients peuvent se connecter à un courtier MQTT sur le périphérique principal.

**Port** (`PortNumber`)  
Port sur lequel le broker MQTT fonctionne sur le périphérique principal.  
Vous pouvez configurer ce port sur le [composant du broker Moquette MQTT](mqtt-broker-moquette-component.md), qui utilise par défaut le port 8883.

**Métadonnées** (`Metadata`)  
Métadonnées supplémentaires à fournir aux appareils clients qui se connectent à ce point de terminaison.

**Topics**
+ [Gérer les points de terminaison (console)](#manually-manage-endpoints-console)
+ [Gérer les points de terminaison ()AWS CLI](#manually-manage-endpoints-cli)
+ [Gérer les points de terminaison (API)](#manually-manage-endpoints-api)

### Gérer les points de terminaison (console)
<a name="manually-manage-endpoints-console"></a>

Vous pouvez utiliser la AWS IoT Greengrass console pour afficher, mettre à jour et supprimer les points de terminaison d'un appareil principal.

**Pour gérer les points de terminaison d'un appareil principal (console)**

1. <a name="navigate-greengrass-console"></a>Accédez à la [console AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Choisissez les **appareils Core**.

1. Choisissez l'appareil principal à gérer.

1. Sur la page de détails de l'appareil principal, choisissez l'onglet **Appareils clients**.

1. Dans la section **Points de terminaison du broker MQTT, vous pouvez voir les points** de terminaison du broker MQTT du périphérique principal. Choisissez **Gérer les points de terminaison.**

1. Dans le mode **Gérer les points de terminaison**, ajoutez ou supprimez des points de terminaison du broker MQTT pour le périphérique principal.

1. Choisissez **Mettre à jour**.

### Gérer les points de terminaison ()AWS CLI
<a name="manually-manage-endpoints-cli"></a>

Vous pouvez utiliser le AWS Command Line Interface (AWS CLI) pour gérer les points de terminaison d'un appareil principal.

**Note**  
La prise en charge des appareils clients AWS IoT Greengrass V2 étant rétrocompatible avec AWS IoT Greengrass V1, vous pouvez utiliser les opérations AWS IoT Greengrass V2 d' AWS IoT Greengrass V1 API pour gérer les principaux points de terminaison des appareils.

**Pour obtenir des points de terminaison pour un appareil principal ()AWS CLI**
+ Utilisez l'une des commandes suivantes :
  + [Greengrass V2 : get-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/get-connectivity-info.html)
  + [herbe verte : get-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-connectivity-info.html)

**Pour mettre à jour les points de terminaison d'un appareil principal ()AWS CLI**
+ Utilisez l'une des commandes suivantes :
  + [Greengrass V2 : update-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/update-connectivity-info.html)
  + [herbe verte : update-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrass/update-connectivity-info.html)

### Gérer les points de terminaison (API)
<a name="manually-manage-endpoints-api"></a>

Vous pouvez utiliser l' AWS API pour gérer les points de terminaison d'un appareil principal.

**Note**  
La prise en charge des appareils clients AWS IoT Greengrass V2 étant rétrocompatible avec AWS IoT Greengrass V1, vous pouvez utiliser les opérations AWS IoT Greengrass V2 d' AWS IoT Greengrass V1 API pour gérer les principaux points de terminaison des appareils.

**Pour obtenir des points de terminaison pour un appareil principal (AWS API)**
+ Utilisez l'une des opérations suivantes :
  + [V2 : GetConnectivityInfo](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetConnectivityInfo.html)
  + [V1 : GetConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/getconnectivityinfo-get.html)

**Pour mettre à jour les points de terminaison d'un appareil principal (AWS API)**
+ Utilisez l'une des opérations suivantes :
  + [V2 : UpdateConnectivityInfo](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_UpdateConnectivityInfo.html)
  + [V1 : UpdateConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/updateconnectivityinfo-put.html)

# Choisissez un courtier MQTT
<a name="choose-local-mqtt-broker"></a>

AWS IoT Greengrass fournit des options vous permettant de choisir le broker MQTT local à exécuter sur vos appareils principaux. Les appareils clients se connectent au courtier MQTT qui s'exécute sur un périphérique principal. Choisissez donc un courtier MQTT compatible avec les appareils clients que vous souhaitez connecter.

**Note**  <a name="note-deploy-one-mqtt-broker"></a>
Nous vous recommandons de ne déployer qu'un seul composant de broker MQTT. Le [pont MQTT](mqtt-bridge-component.md) et les composants du [détecteur IP](ip-detector-component.md) fonctionnent avec un seul composant de courtier MQTT à la fois. Si vous déployez plusieurs composants du broker MQTT, vous devez les configurer pour utiliser différents ports.

Vous pouvez choisir parmi les courtiers MQTT suivants :
+ **[Courtier MQTT 3.1.1 (Moquette) —](mqtt-broker-moquette-component.md)** `aws.greengrass.clientdevices.mqtt.Moquette`

  Choisissez cette option pour un broker MQTT léger conforme à la norme MQTT 3.1.1. Le courtier AWS IoT Core MQTT est également conforme à la norme MQTT 3.1.1. Vous pouvez donc utiliser ces fonctionnalités pour créer une application qui utilise MQTT 3.1.1 sur vos appareils et le. Kit SDK des appareils AWS IoT AWS Cloud
+ **[Courtier MQTT 5 (EMQX)](mqtt-broker-emqx-component.md)** — `aws.greengrass.clientdevices.mqtt.EMQX`

  Choisissez cette option pour utiliser les fonctionnalités de MQTT 5 dans la communication entre les appareils principaux et les appareils clients. Ce composant utilise plus de ressources que le broker Moquette MQTT 3.1.1, et sur les appareils principaux de Linux, il nécessite Docker.

  MQTT 5 est rétrocompatible avec MQTT 3.1.1, vous pouvez donc connecter des appareils clients utilisant MQTT 3.1.1 à ce broker. Si vous exécutez le broker Moquette MQTT 3.1.1, vous pouvez le remplacer par le broker EMQX MQTT 5, et les appareils clients pourront continuer à se connecter et à fonctionner normalement.

  <a name="note-local-mqtt-broker-mqtt-5-features"></a>
+ **Implémenter un courtier personnalisé**

  Choisissez cette option pour créer un composant de courtier local personnalisé pour communiquer avec les appareils clients. Vous pouvez créer un courtier local personnalisé qui utilise un protocole autre que MQTT. AWS IoT Greengrass fournit un SDK de composants que vous pouvez utiliser pour authentifier et autoriser les appareils clients. Pour plus d’informations, consultez [Utilisez le Kit SDK des appareils AWS IoT pour communiquer avec le noyau de Greengrass, les autres composants et AWS IoT CoreCommuniquez avec le noyau de Greengrass, les autres composants et AWS IoT Core](interprocess-communication.md) et [Authentifier et autoriser les appareils clients](ipc-client-device-auth.md).

# Connexion des appareils clients à un périphérique AWS IoT Greengrass Core avec un courtier MQTT
<a name="connecting-to-mqtt"></a>

Lorsque vous utilisez un courtier MQTT sur votre appareil AWS IoT Greengrass principal, celui-ci utilise une *autorité de certification (CA) principale* propre à l'appareil pour délivrer un certificat au courtier afin d'établir des connexions TLS mutuelles avec les clients. 

AWS IoT Greengrass générera automatiquement une autorité de certification du périphérique principal, ou vous pouvez fournir la vôtre. Le périphérique principal auprès duquel l'autorité de certification est enregistrée AWS IoT Greengrass lorsque le [Authentification de l'appareil client](client-device-auth-component.md) composant est connecté. L'autorité de certification du périphérique principal générée automatiquement est persistante, le périphérique continuera à utiliser la même autorité de certification tant que le composant d'authentification du périphérique client est configuré.

Lorsque le broker MQTT démarre, il demande un certificat. Le composant d'authentification du périphérique client émet un certificat X.509 à l'aide de l'autorité de certification du périphérique principal. Le certificat fait l'objet d'une rotation lorsque le broker démarre, lorsqu'il expire ou lorsque les informations de connectivité telles que l'adresse IP changent. Pour de plus amples informations, veuillez consulter [Rotation des certificats sur le broker MQTT local](device-auth.md#mqtt-certificate-expiration).

Pour connecter un client au broker MQTT, vous avez besoin des éléments suivants :
+ L'appareil client doit disposer de l'autorité de certification du périphérique AWS IoT Greengrass Core. Vous pouvez obtenir cette autorité de certification par le biais de la découverte du cloud ou en la fournissant manuellement. Pour de plus amples informations, veuillez consulter [Utiliser votre propre autorité de certification](#use-your-own-CA).
+ Le nom de domaine complet (FQDN) ou l'adresse IP du périphérique principal doivent figurer dans le certificat de courtier émis par l'autorité de certification du périphérique principal. Vous vous en assurez à l'aide du [Détecteur IP](ip-detector-component.md) composant ou en configurant manuellement l'adresse IP. Pour de plus amples informations, veuillez consulter [Gérez les principaux points de terminaison des appareils](manage-core-device-endpoints.md).
+ Le composant d'authentification du périphérique client doit autoriser l'appareil client à se connecter au périphérique principal de Greengrass. Pour de plus amples informations, veuillez consulter [Authentification de l'appareil client](client-device-auth-component.md).

## Utiliser votre propre autorité de certification
<a name="use-your-own-CA"></a>

Si vos appareils clients ne peuvent pas accéder au cloud pour découvrir votre appareil principal, vous pouvez fournir une *autorité de certification (CA) principale*. Votre appareil principal Greengrass utilise l'autorité de certification du périphérique principal pour émettre des certificats pour votre courtier MQTT. Une fois que vous avez configuré le périphérique principal et que vous avez doté votre appareil client de son autorité de certification, vos appareils clients peuvent se connecter au point de terminaison et vérifier la prise de contact TLS à l'aide de l'autorité de certification du périphérique principal (propre autorité de certification fournie ou générée automatiquement).

Pour configurer le [Authentification de l'appareil client](client-device-auth-component.md) composant afin qu'il utilise l'autorité de certification de votre appareil principal, définissez le paramètre de `certificateAuthority` configuration lorsque vous déployez le composant. Vous devez fournir les informations suivantes lors de la configuration :
+ Emplacement du certificat CA d'un périphérique principal.
+ La clé privée du certificat CA du périphérique principal.
+ (Facultatif) La chaîne de certificats vers le certificat racine si l'autorité de certification du périphérique principal est une autorité de certification intermédiaire.

Si vous fournissez une autorité de certification de périphérique principale, AWS IoT Greengrass enregistrez l'autorité de certification dans le cloud.

Vous pouvez stocker vos certificats dans un module de sécurité matériel ou dans le système de fichiers. L'exemple suivant montre une `certificateAuthority` configuration pour une autorité de certification intermédiaire stockée à l'aide de HSM/TPM. Notez que la chaîne de certificats ne peut être stockée que sur disque.

```
  "certificateAuthority": {
      "certificateUri": "pkcs11:object=CustomerIntermediateCA;type=cert",
      "privateKeyUri": "pkcs11:object=CustomerIntermediateCA;type=private"
      "certificateChainUri": "file:///home/ec2-user/creds/certificateChain.pem",
    }
```

Dans cet exemple, le paramètre `certificateAuthority` de configuration configure le composant d'authentification de l'appareil client pour utiliser une autorité de certification intermédiaire du système de fichiers :

```
  "certificateAuthority": {
      "certificateUri": "file:///home/ec2-user/creds/intermediateCA.pem",
      "privateKeyUri": "file:///home/ec2-user/creds/intermediateCA.privateKey.pem",
      "certificateChainUri": "file:///home/ec2-user/creds/certificateChain.pem",
    }
```

Pour connecter les appareils à votre appareil AWS IoT Greengrass Core, procédez comme suit :

1. Créez une autorité de certification (CA) intermédiaire pour le périphérique principal de Greengrass à l'aide de l'autorité de certification racine de votre organisation. Nous vous recommandons d'utiliser une autorité de certification intermédiaire comme meilleure pratique en matière de sécurité.

1. Fournissez le certificat de l'autorité de certification intermédiaire, la clé privée et la chaîne de certificats de votre autorité de certification racine au périphérique principal Greengrass. Pour de plus amples informations, veuillez consulter [Authentification de l'appareil client](client-device-auth-component.md). L'autorité de certification intermédiaire devient l'autorité de certification principale du périphérique principal de Greengrass, et le périphérique enregistre l'autorité de certification auprès de celle-ci. AWS IoT Greengrass

1. Enregistrez l'appareil client en tant qu' AWS IoT objet. Pour plus d'informations, consultez la section [Création d'un objet](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html#create-aws-thing) dans le *Guide du AWS IoT Core développeur*. Ajoutez la clé privée, la clé publique, le certificat de périphérique et le certificat d'autorité de certification racine à votre appareil client. La manière dont vous ajoutez les informations dépend de votre appareil et de votre logiciel.

Une fois que vous avez configuré votre appareil, vous pouvez utiliser le certificat et la chaîne de clés publiques pour vous connecter au périphérique principal de Greengrass. Votre logiciel est chargé de trouver les principaux points de terminaison de l'appareil. Vous pouvez définir le point de terminaison manuellement pour le périphérique principal. Pour de plus amples informations, veuillez consulter [Gérer manuellement les points de terminaison](manage-core-device-endpoints.md#manually-manage-endpoints).

# Tester les communications entre appareils clients
<a name="test-client-device-communications"></a>

Les appareils clients peuvent utiliser le Kit SDK des appareils AWS IoT pour découvrir, se connecter et communiquer avec un appareil principal. Vous pouvez utiliser le client de découverte Greengrass Kit SDK des appareils AWS IoT pour utiliser l'[API de découverte Greengrass](greengrass-discover-api.md), qui renvoie des informations sur les principaux appareils auxquels un appareil client peut se connecter. La réponse de l'API inclut les points de terminaison du broker MQTT à connecter et les certificats à utiliser pour vérifier l'identité de chaque périphérique principal. Ensuite, l'appareil client peut essayer chaque point de terminaison jusqu'à ce qu'il se connecte avec succès à un périphérique principal.

Les appareils clients ne peuvent découvrir que les appareils principaux auxquels vous les associez. Avant de tester les communications entre un appareil client et un périphérique principal, vous devez associer l'appareil client au périphérique principal. Pour de plus amples informations, veuillez consulter [Associer des appareils clients](associate-client-devices.md).

L'API de découverte Greengrass renvoie les points de terminaison du broker MQTT du périphérique principal que vous spécifiez. Vous pouvez utiliser le [composant de détection IP](ip-detector-component.md) pour gérer ces points de terminaison à votre place, ou vous pouvez les gérer manuellement pour chaque périphérique principal. Pour de plus amples informations, veuillez consulter [Gérez les principaux points de terminaison des appareils](manage-core-device-endpoints.md).

**Note**  
Pour utiliser l'API de découverte Greengrass, un appareil client doit disposer de cette autorisation. `greengrass:Discover` Pour de plus amples informations, veuillez consulter [AWS IoT Politique minimale pour les appareils clients](device-auth.md#client-device-minimal-iot-policy).

 Kit SDK des appareils AWS IoT Il est disponible dans plusieurs langages de programmation. Pour plus d'informations, consultez la section [AWS IoT Appareil SDKs](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html) dans le *guide du AWS IoT Core développeur*.

**Topics**
+ [Tester les communications (Python)](#test-client-device-communications-python)
+ [Tester les communications (C\$1\$1)](#test-client-device-communications-cpp)
+ [Tester les communications (JavaScript)](#test-client-device-communications-javascript)
+ [Tester les communications (Java)](#test-client-device-communications-java)

## Tester les communications (Python)
<a name="test-client-device-communications-python"></a>

Dans cette section, vous allez utiliser l'exemple de découverte de Greengrass dans la [Kit SDK des appareils AWS IoT version v2 pour Python](https://github.com/aws/aws-iot-device-sdk-python-v2) afin de tester les communications entre un appareil client et un périphérique principal.

**Important**  
Pour utiliser la Kit SDK des appareils AWS IoT version v2 pour Python, un appareil doit exécuter Python 3.6 ou une version ultérieure.

**Pour tester les communications (Kit SDK des appareils AWS IoT v2 pour Python)**

1. <a name="download-iot-device-sdk-python-v2"></a>Téléchargez et installez la [Kit SDK des appareils AWS IoT version 2 pour Python](https://github.com/aws/aws-iot-device-sdk-python-v2) sur l' AWS IoT appareil à connecter en tant que périphérique client.

   Sur l'appareil client, effectuez les opérations suivantes :

   1. Clonez le dépôt Kit SDK des appareils AWS IoT v2 pour Python pour le télécharger.

      ```
      git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
      ```

   1. Installez la Kit SDK des appareils AWS IoT version 2 pour Python.

      ```
      python3 -m pip install --user ./aws-iot-device-sdk-python-v2
      ```

1. <a name="cd-iot-device-sdk-python-v2"></a>Accédez au dossier d'échantillons dans la Kit SDK des appareils AWS IoT version 2 pour Python.

   ```
   cd aws-iot-device-sdk-python-v2/samples/greengrass
   ```

1. <a name="test-client-device-communications-application-intro"></a>Exécutez l'exemple d'application de découverte Greengrass. Cette application attend des arguments qui spécifient le nom de l'objet du périphérique client, le sujet MQTT et le message à utiliser, ainsi que les certificats qui authentifient et sécurisent la connexion. L'exemple suivant envoie un message Hello World à la `clients/MyClientDevice1/hello/world` rubrique.<a name="test-client-device-communications-application-command-replace"></a>
   + *MyClientDevice1*Remplacez-le par le nom de l'objet de l'appareil client.
   + *\$1/certs/AmazonRootCA1.pem*Remplacez-le par le chemin d'accès au certificat racine de l'autorité de certification Amazon sur l'appareil client.
   + Remplacez *\$1/certs/device.pem.crt* par le chemin d'accès au certificat de l'appareil sur l'appareil client.
   + Remplacez *\$1/certs/private.pem.key* par le chemin d'accès au fichier de clé privée sur l'appareil client.
   + Remplacez *us-east-1* par la AWS région dans laquelle fonctionnent votre appareil client et votre appareil principal.

   ```
   python3 basic_discovery.py \\
     --thing_name MyClientDevice1 \\
     --topic 'clients/MyClientDevice1/hello/world' \\
     --message 'Hello World!' \\
     --ca_file ~/certs/AmazonRootCA1.pem \\
     --cert ~/certs/device.pem.crt \\
     --key ~/certs/private.pem.key \\
     --region us-east-1 \\
     --verbosity Warn
   ```

   <a name="test-client-device-communications-application-output-intro"></a>L'exemple d'application de découverte envoie le message 10 fois et se déconnecte. Il s'abonne également au même sujet où il publie des messages. Si le résultat indique que l'application a reçu des messages MQTT sur le sujet, le dispositif client peut communiquer avec succès avec le dispositif principal.

   ```
   Performing greengrass discovery...
   awsiot.greengrass_discovery.DiscoverResponse(gg_groups=[awsiot.greengrass_discovery.GGGroup(gg_group_id='greengrassV2-coreDevice-MyGreengrassCore', cores=[awsiot.greengrass_discovery.GGCore(thing_arn='arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore', connectivity=[awsiot.greengrass_discovery.ConnectivityInfo(id='203.0.113.0', host_address='203.0.113.0', metadata='', port=8883)])], certificate_authorities=['-----BEGIN CERTIFICATE-----\
   MIICiT...EXAMPLE=\
   -----END CERTIFICATE-----\
   '])])
   Trying core arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore at host 203.0.113.0 port 8883
   Connected!
   Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 0}
   
   Publish received on topic clients/MyClientDevice1/hello/world
   b'{"message": "Hello World!", "sequence": 0}'
   Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 1}
   
   Publish received on topic clients/MyClientDevice1/hello/world
   b'{"message": "Hello World!", "sequence": 1}'
   
   ...
   
   Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 9}
   
   Publish received on topic clients/MyClientDevice1/hello/world
   b'{"message": "Hello World!", "sequence": 9}'
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Si l'application génère plutôt une erreur, consultez la section [Résolution des problèmes de découverte de Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

   <a name="test-client-device-communications-application-view-core-logs"></a>Vous pouvez également consulter les journaux Greengrass sur l'appareil principal pour vérifier si le périphérique client se connecte et envoie des messages avec succès. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Journaux de surveillance](monitor-logs.md).

## Tester les communications (C\$1\$1)
<a name="test-client-device-communications-cpp"></a>

Dans cette section, vous allez utiliser l'exemple de découverte de Greengrass dans la [Kit SDK des appareils AWS IoT version v2 pour C\$1\$1 pour](https://github.com/aws/aws-iot-device-sdk-cpp-v2) tester les communications entre un appareil client et un périphérique principal.

<a name="iot-device-sdk-cpp-v2-build-requirements-intro"></a>Pour créer la Kit SDK des appareils AWS IoT version 2 pour C\$1\$1, un périphérique doit disposer des outils suivants :<a name="iot-device-sdk-cpp-v2-build-requirements"></a>
+ C\$1\$1 11 ou version ultérieure
+ CMake 3.1 ou version ultérieure
+ L'un des compilateurs suivants :
  + GCC 4.8 ou version ultérieure
  + Clang 3.9 ou version ultérieure
  + MSVC 2015 ou version ultérieure

**Pour tester les communications (Kit SDK des appareils AWS IoT v2 pour C\$1\$1)**

1. Téléchargez et compilez la [Kit SDK des appareils AWS IoT v2 pour C\$1\$1](https://github.com/aws/aws-iot-device-sdk-cpp-v2) sur l' AWS IoT appareil à connecter en tant que périphérique client.

   Sur l'appareil client, effectuez les opérations suivantes :

   1. Créez un dossier pour l'espace de travail Kit SDK des appareils AWS IoT v2 pour C\$1\$1 et modifiez-le.

      ```
      cd
      mkdir iot-device-sdk-cpp
      cd iot-device-sdk-cpp
      ```

   1. Clonez le dépôt Kit SDK des appareils AWS IoT v2 pour C\$1\$1 pour le télécharger. L'`--recursive`indicateur indique de télécharger les sous-modules.

      ```
      git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git
      ```

   1. Créez un dossier pour la sortie de compilation Kit SDK des appareils AWS IoT v2 pour C\$1\$1 et modifiez-le.

      ```
      mkdir aws-iot-device-sdk-cpp-v2-build
      cd aws-iot-device-sdk-cpp-v2-build
      ```

   1. Compilez la Kit SDK des appareils AWS IoT v2 pour C\$1\$1.

      ```
      cmake -DCMAKE_INSTALL_PREFIX="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ../aws-iot-device-sdk-cpp-v2
      cmake --build . --target install
      ```

1. Créez l'exemple d'application Greengrass Discovery dans la Kit SDK des appareils AWS IoT version 2 pour C\$1\$1. Procédez comme suit :

   1. Accédez au dossier d'échantillons Greengrass Discovery dans la Kit SDK des appareils AWS IoT version 2 pour C\$1\$1.

      ```
      cd ../aws-iot-device-sdk-cpp-v2/samples/greengrass/basic_discovery
      ```

   1. Créez un dossier pour l'exemple de sortie de build de Greengrass Discovery et modifiez-le.

      ```
      mkdir build
      cd build
      ```

   1. Créez l'exemple d'application Greengrass Discovery.

      ```
      cmake -DCMAKE_PREFIX_PATH="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ..
      cmake --build . --config "Release"
      ```

1. <a name="test-client-device-communications-application-scanner-intro"></a>Exécutez l'exemple d'application de découverte Greengrass. Cette application attend des arguments qui spécifient le nom de l'objet du périphérique client, le sujet MQTT à utiliser et les certificats qui authentifient et sécurisent la connexion. L'exemple suivant s'abonne à la `clients/MyClientDevice1/hello/world` rubrique et publie un message que vous entrez sur la ligne de commande pour la même rubrique.<a name="test-client-device-communications-application-command-replace"></a>
   + *MyClientDevice1*Remplacez-le par le nom de l'objet de l'appareil client.
   + *\$1/certs/AmazonRootCA1.pem*Remplacez-le par le chemin d'accès au certificat racine de l'autorité de certification Amazon sur l'appareil client.
   + Remplacez *\$1/certs/device.pem.crt* par le chemin d'accès au certificat de l'appareil sur l'appareil client.
   + Remplacez *\$1/certs/private.pem.key* par le chemin d'accès au fichier de clé privée sur l'appareil client.
   + Remplacez *us-east-1* par la AWS région dans laquelle fonctionnent votre appareil client et votre appareil principal.

   ```
   ./basic-discovery \
     --thing_name MyClientDevice1 \
     --topic 'clients/MyClientDevice1/hello/world' \
     --ca_file ~/certs/AmazonRootCA1.pem \
     --cert ~/certs/device.pem.crt \
     --key ~/certs/private.pem.key \
     --region us-east-1
   ```

   <a name="test-client-device-communications-application-scanner-output-intro"></a>L'exemple d'application Discovery s'abonne au sujet et vous invite à saisir un message à publier. 

   ```
   Connecting to group greengrassV2-coreDevice-MyGreengrassCore with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883
   Connected to group greengrassV2-coreDevice-MyGreengrassCore, using connection to 203.0.113.0:8883
   Successfully subscribed to clients/MyClientDevice1/hello/world
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program.
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Si l'application génère plutôt une erreur, consultez la section [Résolution des problèmes de découverte de Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

1. <a name="test-client-device-communications-application-scanner-input"></a>Entrez un message, tel que**Hello World\$1**.

   ```
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program.
   Hello World!
   ```

   <a name="test-client-device-communications-application-scanner-input-output"></a>Si le résultat indique que l'application a reçu le message MQTT sur le sujet, le dispositif client peut communiquer avec succès avec le dispositif principal.

   ```
   Operation on packetId 2 Succeeded
   Publish received on topic clients/MyClientDevice1/hello/world
   Message:
   Hello World!
   ```

   <a name="test-client-device-communications-application-view-core-logs"></a>Vous pouvez également consulter les journaux Greengrass sur l'appareil principal pour vérifier si le périphérique client se connecte et envoie des messages avec succès. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Journaux de surveillance](monitor-logs.md).

## Tester les communications (JavaScript)
<a name="test-client-device-communications-javascript"></a>

Dans cette section, vous allez utiliser l'exemple de découverte de Greengrass dans la [Kit SDK des appareils AWS IoT version v2 JavaScript pour](https://github.com/aws/aws-iot-device-sdk-js-v2) tester les communications entre un appareil client et un appareil principal. 

**Important**  
Pour utiliser la Kit SDK des appareils AWS IoT version v2 pour JavaScript, un appareil doit exécuter Node v10.0 ou version ultérieure.

**Pour tester les communications (Kit SDK des appareils AWS IoT version 2 pour JavaScript)**

1. Téléchargez et installez la [Kit SDK des appareils AWS IoT version 2 JavaScript pour](https://github.com/aws/aws-iot-device-sdk-js-v2) AWS IoT que l'appareil se connecte en tant que périphérique client.

   Sur l'appareil client, effectuez les opérations suivantes :

   1. Clonez la Kit SDK des appareils AWS IoT v2 pour JavaScript le dépôt afin de la télécharger.

      ```
      git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
      ```

   1. Installez la Kit SDK des appareils AWS IoT v2 pour JavaScript.

      ```
      cd aws-iot-device-sdk-js-v2
      npm install
      ```

1. Accédez au dossier d'exemples de découverte Greengrass dans la Kit SDK des appareils AWS IoT version v2 pour. JavaScript

   ```
   cd samples/node/greengrass/basic_discovery
   ```

1. Installez l'exemple d'application Greengrass Discovery.

   ```
   npm install
   ```

1. <a name="test-client-device-communications-application-intro"></a>Exécutez l'exemple d'application de découverte Greengrass. Cette application attend des arguments qui spécifient le nom de l'objet du périphérique client, le sujet MQTT et le message à utiliser, ainsi que les certificats qui authentifient et sécurisent la connexion. L'exemple suivant envoie un message Hello World à la `clients/MyClientDevice1/hello/world` rubrique.<a name="test-client-device-communications-application-command-replace"></a>
   + *MyClientDevice1*Remplacez-le par le nom de l'objet de l'appareil client.
   + *\$1/certs/AmazonRootCA1.pem*Remplacez-le par le chemin d'accès au certificat racine de l'autorité de certification Amazon sur l'appareil client.
   + Remplacez *\$1/certs/device.pem.crt* par le chemin d'accès au certificat de l'appareil sur l'appareil client.
   + Remplacez *\$1/certs/private.pem.key* par le chemin d'accès au fichier de clé privée sur l'appareil client.
   + Remplacez *us-east-1* par la AWS région dans laquelle fonctionnent votre appareil client et votre appareil principal.

   ```
   node dist/index.js \
     --thing_name MyClientDevice1 \
     --topic 'clients/MyClientDevice1/hello/world' \
     --message 'Hello World!' \
     --ca_file ~/certs/AmazonRootCA1.pem \
     --cert ~/certs/device.pem.crt \
     --key ~/certs/private.pem.key \
     --region us-east-1 \
     --verbose warn
   ```

   <a name="test-client-device-communications-application-output-intro"></a>L'exemple d'application de découverte envoie le message 10 fois et se déconnecte. Il s'abonne également au même sujet où il publie des messages. Si le résultat indique que l'application a reçu des messages MQTT sur le sujet, le dispositif client peut communiquer avec succès avec le dispositif principal.

   ```
   Discovery Response:
   {"gg_groups":[{"gg_group_id":"greengrassV2-coreDevice-MyGreengrassCore","cores":[{"thing_arn":"arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore","connectivity":[{"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}]}],"certificate_authorities":["-----BEGIN CERTIFICATE-----\nMIICiT...EXAMPLE=\n-----END CERTIFICATE-----\n"]}]}
   Trying endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}
   [WARN] [2021-06-12T00:46:45Z] [00007f90c0e8d700] [socket] - id=0x7f90b8018710 fd=26: setsockopt() for NO_SIGNAL failed with errno 92. If you are having SIGPIPE signals thrown, you may want to install a signal trap in your application layer.
   Connected to endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":1}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":2}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":3}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":4}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":5}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":6}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":7}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":8}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":9}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":10}
   Complete!
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Si l'application génère plutôt une erreur, consultez la section [Résolution des problèmes de découverte de Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

   <a name="test-client-device-communications-application-view-core-logs"></a>Vous pouvez également consulter les journaux Greengrass sur l'appareil principal pour vérifier si le périphérique client se connecte et envoie des messages avec succès. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Journaux de surveillance](monitor-logs.md).

## Tester les communications (Java)
<a name="test-client-device-communications-java"></a>

Dans cette section, vous allez utiliser l'exemple de découverte de Greengrass dans la [Kit SDK des appareils AWS IoT version v2 pour Java pour](https://github.com/aws/aws-iot-device-sdk-java-v2) tester les communications entre un appareil client et un appareil principal.

**Important**  
Pour créer la Kit SDK des appareils AWS IoT v2 pour Java, un appareil doit disposer des outils suivants :  
Java 8 ou version ultérieure, en `JAVA_HOME` pointant vers le dossier Java.
Apache Maven

**Pour tester les communications (Kit SDK des appareils AWS IoT v2 pour Java)**

1. Téléchargez et compilez la [Kit SDK des appareils AWS IoT v2 pour Java](https://github.com/aws/aws-iot-device-sdk-java-v2) sur l' AWS IoT appareil à connecter en tant que périphérique client.

   Sur l'appareil client, effectuez les opérations suivantes :

   1. Clonez le dépôt Kit SDK des appareils AWS IoT v2 pour Java pour le télécharger.

      ```
      git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git
      ```

   1. Accédez au dossier Kit SDK des appareils AWS IoT v2 pour Java.

   1. Compilez la Kit SDK des appareils AWS IoT v2 pour Java.

      ```
      cd aws-iot-device-sdk-java-v2
      mvn versions:use-latest-versions -Dincludes="software.amazon.awssdk.crt*"
      mvn clean install
      ```

1. <a name="test-client-device-communications-application-scanner-intro"></a>Exécutez l'exemple d'application de découverte Greengrass. Cette application attend des arguments qui spécifient le nom de l'objet du périphérique client, le sujet MQTT à utiliser et les certificats qui authentifient et sécurisent la connexion. L'exemple suivant s'abonne à la `clients/MyClientDevice1/hello/world` rubrique et publie un message que vous entrez sur la ligne de commande pour la même rubrique.<a name="test-client-device-communications-application-command-replace"></a>
   + Remplacez les deux instances de *MyClientDevice1* par le nom de l'objet de l'appareil client.
   + *\$1HOME/certs/AmazonRootCA1.pem*Remplacez-le par le chemin d'accès au certificat racine de l'autorité de certification Amazon sur l'appareil client.
   + Remplacez *\$1HOME/certs/device.pem.crt* par le chemin d'accès au certificat de l'appareil sur l'appareil client.
   + Remplacez *\$1HOME/certs/private.pem.key* par le chemin d'accès au fichier de clé privée sur l'appareil client.
   + *us-east-1*Remplacez-le par l' Région AWS endroit où fonctionnent votre appareil client et votre appareil principal.

   ```
   DISCOVERY_SAMPLE_ARGS="--thing_name MyClientDevice1 \
     --topic 'clients/MyClientDevice1/hello/world' \
     --ca_file $HOME/certs/AmazonRootCA1.pem \
     --cert $HOME/certs/device.pem.crt \
     --key $HOME/certs/private.pem.key \
     --region us-east-1"
   
   mvn exec:java -pl samples/Greengrass/Discovery \
     -Dexec.mainClass=greengrass.BasicDiscovery \
     -Dexec.args="$DISCOVERY_SAMPLE_ARGS"
   ```

   <a name="test-client-device-communications-application-scanner-output-intro"></a>L'exemple d'application Discovery s'abonne au sujet et vous invite à saisir un message à publier. 

   ```
   Connecting to group ID greengrassV2-coreDevice-MyGreengrassCore, with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883
   Started a clean session
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program:
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Si l'application génère plutôt une erreur, consultez la section [Résolution des problèmes de découverte de Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

1. <a name="test-client-device-communications-application-scanner-input"></a>Entrez un message, tel que**Hello World\$1**.

   ```
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program:
   Hello World!
   ```

   <a name="test-client-device-communications-application-scanner-input-output"></a>Si le résultat indique que l'application a reçu le message MQTT sur le sujet, le dispositif client peut communiquer avec succès avec le dispositif principal.

   ```
   Message received on topic clients/MyClientDevice1/hello/world: Hello World!
   ```

   <a name="test-client-device-communications-application-view-core-logs"></a>Vous pouvez également consulter les journaux Greengrass sur l'appareil principal pour vérifier si le périphérique client se connecte et envoie des messages avec succès. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Journaux de surveillance](monitor-logs.md).

# API de découverte Greengrass RESTful
<a name="greengrass-discover-api"></a>

AWS IoT Greengrass fournit l'opération `Discover` d'API que les appareils clients peuvent utiliser pour identifier les appareils principaux de Greengrass auxquels ils peuvent se connecter. Les appareils clients utilisent cette opération de plan de données pour récupérer les informations requises pour se connecter aux appareils principaux de Greengrass et les associer à l'opération d'[BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html)API. Lorsqu'un appareil client est en ligne, il peut se connecter au service AWS IoT Greengrass cloud et utiliser l'API de découverte pour trouver :
+ L'adresse IP et le port de chaque appareil principal Greengrass associé.
+ Le certificat CA du périphérique principal, que les appareils clients peuvent utiliser pour authentifier le périphérique principal Greengrass.

**Note**  
Les appareils clients peuvent également utiliser le client de découverte dans le Kit SDK des appareils AWS IoT pour découvrir les informations de connectivité des appareils principaux de Greengrass. Le client de découverte utilise l'API de découverte. Pour plus d’informations, consultez les ressources suivantes :  
[Tester les communications entre appareils clients](test-client-device-communications.md)
[ RESTful API Greengrass Discovery](https://docs.aws.amazon.com/greengrass/v1/developerguide/gg-discover-api.html) dans le guide du *AWS IoT Greengrass Version 1 développeur*.

Pour utiliser cette opération d'API, envoyez des requêtes HTTP à l'API de découverte sur le point de terminaison du plan de données Greengrass. Le format de ce point de terminaison d'API est le suivant.

```
https://greengrass-ats.iot.region.amazonaws.com:port/greengrass/discover/thing/thing-name
```

Pour obtenir la liste des points de terminaison Régions AWS et des points de terminaison pris en charge par l'API de AWS IoT Greengrass découverte, consultez la section [AWS IoT Greengrass V2 Points de terminaison et quotas](https://docs.aws.amazon.com/general/latest/gr/greengrassv2.html) dans le. *Références générales AWS* Cette opération d'API n'est disponible que sur le point de terminaison du plan de données Greengrass. Le point de terminaison du plan de contrôle que vous utilisez pour gérer les composants et les déploiements est différent du point de terminaison du plan de données.

**Note**  
L'API de découverte est la même pour AWS IoT Greengrass V1 et AWS IoT Greengrass V2. Si vos appareils clients se connectent à un AWS IoT Greengrass V1 cœur, vous pouvez les connecter aux appareils AWS IoT Greengrass V2 principaux sans modifier le code sur les appareils clients. Pour plus d'informations, consultez l'[ RESTful API Greengrass Discovery](https://docs.aws.amazon.com/greengrass/v1/developerguide/gg-discover-api.html) dans le guide du *AWS IoT Greengrass Version 1 développeur*.

**Topics**
+ [Authentification et autorisation de découverte](#greengrass-discover-auth)
+ [Demande](#greengrass-discover-request)
+ [Réponse](#greengrass-discover-response)
+ [Testez l'API de découverte avec cURL](#greengrass-discover-test-request)

## Authentification et autorisation de découverte
<a name="greengrass-discover-auth"></a>

Pour utiliser l'API de découverte afin de récupérer des informations de connectivité, un appareil client doit utiliser l'authentification mutuelle TLS avec un certificat client X.509 pour s'authentifier. Pour plus d'informations, consultez la section [Certificats client X.509](https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.html) dans le *Guide du AWS IoT Core développeur*.

Un appareil client doit également être autorisé à effectuer l'`greengrass:Discover`action. L'exemple de AWS IoT politique suivant permet à un AWS IoT objet nommé `MyClientDevice1` `Discover` de fonctionner par lui-même.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "greengrass:Discover",
      "Resource": [
        "arn:aws:iot:us-west-2:123456789012:thing/MyClientDevice1"
      ]
    }
  ]
}
```

------

**Important**  
<a name="thing-policy-variable-not-supported"></a>[Les variables de politique des](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) objets (`iot:Connection.Thing.*`) ne sont pas prises en charge dans AWS IoT les politiques relatives aux appareils principaux ou aux opérations du plan de données Greengrass. Vous pouvez plutôt utiliser un caractère générique correspondant à plusieurs appareils portant des noms similaires. Par exemple, vous pouvez spécifier `MyGreengrassDevice*` de correspondre `MyGreengrassDevice1``MyGreengrassDevice2`, et ainsi de suite. 

Pour plus d'informations, consultez [AWS IoT Core les politiques](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policies.html) dans le *guide du AWS IoT Core développeur*.

## Demande
<a name="greengrass-discover-request"></a>

La demande contient les en-têtes HTTP standard et est envoyée au point de terminaison Greengrass Discovery, comme indiqué dans les exemples suivants.

Le numéro de port varie selon que le périphérique principal est configuré pour envoyer du trafic HTTPS via le port 8443 ou le port 443. Pour de plus amples informations, veuillez consulter [Connexion au port 443 ou via un proxy réseau](configure-greengrass-core-v2.md#configure-alpn-network-proxy).

**Note**  
Ces exemples utilisent le point de terminaison Amazon Trust Services (ATS), qui fonctionne avec les certificats CA racine ATS recommandés. Les points de terminaison doivent correspondre au type de certificat CA racine.

Port 8443  

```
HTTP GET https://greengrass-ats.iot.region.amazonaws.com:8443/greengrass/discover/thing/thing-name
```

Port 443  

```
HTTP GET https://greengrass-ats.iot.region.amazonaws.com:443/greengrass/discover/thing/thing-name
```
Les clients qui se connectent sur le port 443 doivent implémenter l'extension TLS [ALPN (Application Layer Protocol Negotiation)](https://tools.ietf.org/html/rfc7301) et la transmettre `x-amzn-http-ca` comme `ProtocolName` dans le. `ProtocolNameList` Pour plus d'informations, consultez la section [Protocoles](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html) du *guide du AWS IoT développeur*.

## Réponse
<a name="greengrass-discover-response"></a>

En cas de succès, l'en-tête de réponse inclut le code d'état HTTP 200 et le corps de la réponse contient le document de réponse Discover.

**Note**  
Parce qu'elle AWS IoT Greengrass V2 utilise la même API de découverte que AWS IoT Greengrass V1 la réponse organise les informations selon des AWS IoT Greengrass V1 concepts, tels que les groupes Greengrass. La réponse contient une liste de groupes Greengrass. Dans AWS IoT Greengrass V2, chaque périphérique principal appartient à son propre groupe, où le groupe contient uniquement ce périphérique principal et ses informations de connectivité.

### Exemple de documents de réponse à une découverte
<a name="greengrass-discover-response-examples"></a>

Le document suivant montre la réponse d'un appareil client associé à un périphérique principal de Greengrass. Le périphérique principal possède un point de terminaison et un certificat CA.

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-01-thing-name",
      "Cores": [
        {
          "thingArn": "core-device-01-thing-arn",
          "Connectivity": [
            {
              "id": "core-device-01-connection-id",
              "hostAddress": "core-device-01-address",
              "portNumber": core-device-01-port,
              "metadata": "core-device-01-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    }
  ]
}
```

Le document suivant montre la réponse d'un appareil client associé à deux périphériques principaux. Les appareils principaux ont plusieurs points de terminaison et plusieurs certificats de groupe CA.

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-01-thing-name",
      "Cores": [
        {
          "thingArn": "core-device-01-thing-arn",
          "Connectivity": [
            {
              "id": "core-device-01-connection-id",
              "hostAddress": "core-device-01-address",
              "portNumber": core-device-01-port,
              "metadata": "core-device-01-connection-1-description"
            },
            {
              "id": "core-device-01-connection-id-2",
              "hostAddress": "core-device-01-address-2",
              "portNumber": core-device-01-port-2,
              "metadata": "core-device-01-connection-2-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    },
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-02-thing-name",
      "Cores": [
        {
          "thingArn":"core-device-02-thing-arn",
          "Connectivity" : [
            {
              "id": "core-device-02-connection-id",
              "hostAddress": "core-device-02-address",
              "portNumber": core-device-02-port,
              "metadata": "core-device-02-connection-1-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    }
  ]
}
```

## Testez l'API de découverte avec cURL
<a name="greengrass-discover-test-request"></a>

Si vous l'avez `cURL` installée, vous pouvez tester l'API de découverte. L'exemple suivant indique les certificats d'un appareil client pour authentifier une demande auprès du point de terminaison de l'API de découverte Greengrass.

```
curl -i \
  --cert 1a23bc4d56.cert.pem \
  --key 1a23bc4d56.private.key \
  https://greengrass-ats.iot.us-west-2.amazonaws.com:8443/greengrass/discover/thing/MyClientDevice1
```

**Note**  
L'`-i`argument indique de générer des en-têtes de réponse HTTP. Vous pouvez utiliser cette option pour identifier les erreurs.

Si la demande aboutit, cette commande produit une réponse similaire à l'exemple suivant.

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-MyGreengrassCore",
      "Cores": [
        {
          "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
          "Connectivity": [
            {
              "Id": "AUTOIP_192.168.1.4_1",
              "HostAddress": "192.168.1.5",
              "PortNumber": 8883,
              "Metadata": ""
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----\ncert-contents\n-----END CERTIFICATE-----\n"
      ]
    }
  ]
}
```

Si la commande génère une erreur, voir [Résolution des problèmes de découverte de Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).