

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Connect i dispositivi client ai dispositivi principali
<a name="connect-client-devices"></a>

Puoi configurare il *cloud discovery* per connettere i dispositivi client ai dispositivi principali. Quando configuri il cloud discovery, i dispositivi client possono connettersi al servizio AWS IoT Greengrass cloud per recuperare informazioni sui dispositivi principali a cui possono connettersi. Quindi, i dispositivi client possono tentare di connettersi a ciascun dispositivo principale fino a quando non si connettono correttamente.

Per utilizzare cloud discovery, devi fare quanto segue:
+ Associa i dispositivi client ai dispositivi principali a cui possono connettersi.
+ Specificate gli endpoint del broker MQTT a cui i dispositivi client possono connettersi a ciascun dispositivo principale.
+ Implementa i componenti sul dispositivo principale che abilitano il supporto per i dispositivi client.

  Puoi anche distribuire componenti opzionali per effettuare le seguenti operazioni:
  + Inoltra i messaggi tra i dispositivi client, i componenti Greengrass e AWS IoT Core il servizio cloud.
  + Gestisci automaticamente gli endpoint del broker MQTT dei dispositivi principali per te.
  + Gestisci le ombre dei dispositivi client locali e sincronizza le ombre con il servizio cloud. AWS IoT Core 

È inoltre necessario rivedere e aggiornare la AWS IoT politica del dispositivo principale per verificare che disponga delle autorizzazioni necessarie per connettere i dispositivi client. Per ulteriori informazioni, consulta [Requisiti](#connect-client-devices-requirements).

Dopo aver configurato il cloud discovery, puoi testare le comunicazioni tra un dispositivo client e un dispositivo principale. Per ulteriori informazioni, consulta [Verifica le comunicazioni con i dispositivi client](test-client-device-communications.md).

**Topics**
+ [Requisiti](#connect-client-devices-requirements)
+ [Componenti Greengrass per il supporto dei dispositivi client](#cloud-discovery-components)
+ [Configura cloud discovery (console)](#configure-cloud-discovery-console)
+ [Configura cloud discovery ()AWS CLI](#configure-cloud-discovery-cli)
+ [Associa i dispositivi client](associate-client-devices.md)
+ [Autenticazione dei client in modalità offline](offline-authentication.md)
+ [Gestisci gli endpoint principali dei dispositivi](manage-core-device-endpoints.md)
+ [Scegli un broker MQTT](choose-local-mqtt-broker.md)
+ [Connessione dei dispositivi client a un dispositivo AWS IoT Greengrass Core con un broker MQTT](connecting-to-mqtt.md)
+ [Verifica le comunicazioni con i dispositivi client](test-client-device-communications.md)
+ [API Greengrass Discovery RESTful](greengrass-discover-api.md)

## Requisiti
<a name="connect-client-devices-requirements"></a>

Per connettere i dispositivi client a un dispositivo principale, è necessario disporre di quanto segue:
+ Il dispositivo principale deve eseguire [Greengrass nucleus](greengrass-nucleus-component.md) v2.2.0 o versione successiva.
+ Il ruolo di servizio Greengrass associato all' AWS IoT Greengrass utente Account AWS nella AWS regione in cui opera il dispositivo principale. Per ulteriori informazioni, consulta [Configurazione del ruolo del servizio Greengrass](#configure-service-role-requirement).
+ La AWS IoT politica del dispositivo principale deve consentire le seguenti autorizzazioni:<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`— (Facoltativo) Questa autorizzazione è necessaria per utilizzare il [componente del rilevatore IP](ip-detector-component.md), che riporta le informazioni sulla connettività di rete del dispositivo principale al AWS IoT Greengrass servizio cloud.
  + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow``iot:UpdateThingShadow`, e `iot:DeleteThingShadow` — (Facoltativo) Queste autorizzazioni sono necessarie per utilizzare il [componente shadow manager](shadow-manager-component.md) con cui sincronizzare le ombre dei dispositivi client. AWS IoT Core[Questa funzionalità richiede [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 o successivo, shadow manager v2.2.0 o successivo e MQTT bridge v2.2.0 o successivo.](mqtt-bridge-component.md)

  Per ulteriori informazioni, consulta [Configura la policy relativa agli AWS IoT oggetti](#configure-iot-policy-requirement).
**Nota**  
Se hai utilizzato la AWS IoT politica predefinita quando hai [installato il software AWS IoT Greengrass Core, il](install-greengrass-core-v2.md) dispositivo principale dispone di una AWS IoT politica che consente l'accesso a tutte le azioni (). AWS IoT Greengrass `greengrass:*`
+ AWS IoT cose che puoi connettere come dispositivi client. Per ulteriori informazioni, consulta [AWS IoT Create resources](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html) nella *AWS IoT Core Developer Guide*.
+ Il dispositivo client deve connettersi utilizzando un ID client. Un ID client è il nome di un oggetto. Non verrà accettato nessun altro ID cliente.
+ La AWS IoT politica di ogni dispositivo client deve consentire l'`greengrass:Discover`autorizzazione. Per ulteriori informazioni, consulta [AWS IoT Politica minima per i dispositivi client](device-auth.md#client-device-minimal-iot-policy).

**Topics**
+ [Configurazione del ruolo del servizio Greengrass](#configure-service-role-requirement)
+ [Configura la policy relativa agli AWS IoT oggetti](#configure-iot-policy-requirement)

### Configurazione del ruolo del servizio Greengrass
<a name="configure-service-role-requirement"></a>

<a name="greengrass-service-role-intro"></a>Il ruolo di servizio Greengrass è un ruolo di servizio AWS Identity and Access Management (IAM) che AWS IoT Greengrass autorizza l'accesso alle risorse AWS dei servizi per conto dell'utente. Questo ruolo consente di AWS IoT Greengrass verificare l'identità dei dispositivi client e gestire le informazioni principali sulla connettività dei dispositivi.

Se non hai precedentemente impostato il ruolo di [servizio Greengrass in questa regione, devi associare un ruolo](greengrass-service-role.md) di servizio Greengrass a un ruolo di servizio Greengrass AWS IoT Greengrass per te Account AWS in questa regione.

Quando utilizzi la pagina **Configure core device discovery** nella [AWS IoT Greengrass console](https://console.aws.amazon.com/greengrass), AWS IoT Greengrass configura automaticamente il ruolo del servizio Greengrass. Altrimenti, puoi configurarlo manualmente utilizzando la [AWS IoT console](https://console.aws.amazon.com/iot) o l' AWS IoT Greengrass API.

In questa sezione, si verifica se il ruolo di servizio Greengrass è impostato. Se non è configurato, crei un nuovo ruolo di servizio Greengrass a cui AWS IoT Greengrass associarti Account AWS in questa regione.

#### Configurazione del ruolo di servizio Greengrass (console)
<a name="configure-service-role-requirement-console"></a>

1. Verifica se il ruolo di servizio Greengrass è associato AWS IoT Greengrass al tuo ruolo Account AWS in questa regione. Esegui questa operazione:

   1. <a name="open-iot-console"></a>Passare alla [console AWS IoT](https://console.aws.amazon.com/iot).

   1. Nel pannello di navigazione scegli **Impostazioni**.

   1. Nella sezione **Ruolo di servizio Greengrass, trova Ruolo** di **servizio corrente per vedere se è associato un ruolo** di servizio Greengrass.

      Se hai un ruolo di servizio Greengrass associato, soddisfi questo requisito per utilizzare il componente del rilevatore IP. Passa a [Configura la policy relativa agli AWS IoT oggetti](#configure-iot-policy-requirement).

1. Se il ruolo di servizio Greengrass non è associato AWS IoT Greengrass al tuo ruolo Account AWS in questa regione, crea un ruolo di servizio Greengrass e associalo. Esegui questa operazione:

   1. Passare alla [IAM console](https://console.aws.amazon.com/iam) (Console IAM).

   1. Scegliere **Roles (Ruoli)**.

   1. Scegli **Crea ruolo**.

   1. Nella pagina **Crea ruolo**, procedi come segue:

      1. In **Tipo di entità affidabile**, scegli **Servizio AWS**.

      1. **In Caso d'******uso, Casi d'uso per altro Servizi AWS**, scegli **Greengrass, seleziona Greengrass**.** Questa opzione specifica l'aggiunta AWS IoT Greengrass come entità attendibile che può assumere questo ruolo.

      1. Scegli **Next (Successivo)**.

      1. In **Politiche di autorizzazione**, seleziona **AWSGreengrassResourceAccessRolePolicy**da associare al ruolo.

      1. Scegli **Next (Successivo)**.

      1. In **Nome del ruolo**, inserisci un nome per il ruolo, ad esempio **Greengrass\$1ServiceRole**.

      1. Scegli **Crea ruolo**.

   1. <a name="open-iot-console"></a>Passare alla [console AWS IoT](https://console.aws.amazon.com/iot).

   1. Nel pannello di navigazione scegli **Impostazioni**.

   1. Nella sezione **Ruolo di servizio Greengrass, scegli **Collega** ruolo**.

   1. **Nel modulo modale **Update Greengrass service role**, seleziona il ruolo IAM che hai creato, quindi scegli Attach role.**

#### Configurare il ruolo del servizio Greengrass ()AWS CLI
<a name="configure-service-role-requirement-cli"></a>

1. Verifica se il ruolo di servizio Greengrass è associato AWS IoT Greengrass al tuo ruolo Account AWS in questa regione.

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

   Se il ruolo di servizio Greengrass è associato, l'operazione restituisce una risposta contenente informazioni sul ruolo.

   Se hai un ruolo di servizio Greengrass associato, soddisfi questo requisito per utilizzare il componente del rilevatore IP. Passa a [Configura la policy relativa agli AWS IoT oggetti](#configure-iot-policy-requirement).

1. Se il ruolo di servizio Greengrass non è associato AWS IoT Greengrass al tuo ruolo Account AWS in questa regione, crea un ruolo di servizio Greengrass e associalo. Esegui questa operazione:

   1. <a name="create-greengrass-service-role-step-create-role"></a>Crea un ruolo con una politica di fiducia che AWS IoT Greengrass consenta di assumere il ruolo. In questo esempio viene creato un ruolo denominato `Greengrass_ServiceRole`, ma è possibile utilizzare un nome diverso. Ti consigliamo di includere anche le chiavi del contesto `aws:SourceArn` e della condizione `aws:SourceAccount` globale nella tua politica di fiducia per evitare il *confuso problema della sicurezza dei vicedirettori*. Le chiavi di contesto delle condizioni limitano l'accesso per consentire solo le richieste che provengono dall'account specificato e dall'area di lavoro Greengrass. Per ulteriori informazioni sul problema del "confused deputy", consulta [Prevenzione del problema "confused deputy" tra servizi](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>Copiare il ruolo ARN dai metadati del ruolo nell'output. Utilizzare l'ARN per associare un ruolo all'account.

   1. <a name="create-greengrass-service-role-step-attach-policy"></a>Collegare la policy `AWSGreengrassResourceAccessRolePolicy` al ruolo.

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

   1. Associa il ruolo di servizio Greengrass a AWS IoT Greengrass for your. Account AWS Sostituisci *role-arn* con l'ARN del ruolo di servizio.

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

      L'operazione restituisce la seguente risposta se ha esito positivo.

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

### Configura la policy relativa agli AWS IoT oggetti
<a name="configure-iot-policy-requirement"></a>

I dispositivi principali utilizzano i certificati dei dispositivi X.509 per autorizzare le connessioni a. AWS Si allegano AWS IoT politiche ai certificati dei dispositivi per definire le autorizzazioni per un dispositivo principale. Per ulteriori informazioni, consultare [AWS IoT politiche per le operazioni sul piano dati](device-auth.md#iot-policies) e [AWS IoT Politica minima per il supporto dei dispositivi client](device-auth.md#client-device-support-minimal-iot-policy).

Per connettere i dispositivi client a un dispositivo principale, la AWS IoT politica del dispositivo principale deve consentire le seguenti autorizzazioni:<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`— (Facoltativo) Questa autorizzazione è necessaria per utilizzare il [componente del rilevatore IP](ip-detector-component.md), che riporta le informazioni sulla connettività di rete del dispositivo principale al AWS IoT Greengrass servizio cloud.
+ <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow``iot:UpdateThingShadow`, e `iot:DeleteThingShadow` — (Facoltativo) Queste autorizzazioni sono necessarie per utilizzare il [componente shadow manager](shadow-manager-component.md) con cui sincronizzare le ombre dei dispositivi client. AWS IoT Core[Questa funzionalità richiede [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 o successivo, shadow manager v2.2.0 o successivo e MQTT bridge v2.2.0 o successivo.](mqtt-bridge-component.md)

In questa sezione, esaminate le AWS IoT politiche per il vostro dispositivo principale e aggiungete le eventuali autorizzazioni necessarie mancanti. Se hai utilizzato il programma di [installazione del software AWS IoT Greengrass Core per il provisioning delle risorse](quick-installation.md), il tuo dispositivo principale dispone di una AWS IoT politica che consente l'accesso a tutte le AWS IoT Greengrass azioni ()`greengrass:*`. In questo caso, è necessario aggiornare la AWS IoT policy solo se si prevede di distribuire il componente shadow manager con cui sincronizzare le ombre dei dispositivi. AWS IoT Core Altrimenti, puoi saltare questa sezione.

#### Configura la policy AWS IoT relativa agli oggetti (console)
<a name="configure-iot-policy-requirement-console"></a>

1. <a name="update-iot-policy-console-open-greengrass-console"></a>Nel menu di navigazione della [AWS IoT Greengrass console](https://console.aws.amazon.com/greengrass), scegli **Dispositivi principali**.

1. <a name="update-iot-policy-console-choose-core-device"></a>Nella pagina **Dispositivi principali**, scegli il dispositivo principale da aggiornare.

1. <a name="update-iot-policy-console-choose-core-device-thing"></a>Nella pagina dei dettagli del dispositivo principale, scegli il link all'**oggetto** del dispositivo principale. Questo link apre la pagina dei dettagli dell'oggetto nella AWS IoT console.

1. <a name="update-iot-policy-console-choose-thing-security"></a>Nella pagina dei dettagli dell'oggetto, scegli **Certificati**.

1. <a name="update-iot-policy-console-choose-thing-certificate"></a>Nella scheda **Certificati**, scegli il certificato attivo dell'oggetto.

1. <a name="update-iot-policy-console-choose-certificate-policies"></a>Nella pagina dei dettagli del certificato, scegli **Politiche**.

1. <a name="update-iot-policy-console-choose-policy"></a>Nella scheda **Politiche**, scegli la AWS IoT politica da rivedere e aggiornare. Puoi aggiungere le autorizzazioni richieste a qualsiasi policy allegata al certificato attivo del dispositivo principale.
**Nota**  <a name="quick-installation-iot-policies-note"></a>
Se hai utilizzato il programma di [installazione del software AWS IoT Greengrass Core per il provisioning delle risorse](quick-installation.md), hai due AWS IoT politiche. Ti consigliamo di scegliere la politica denominata **GreengrassV2IoTThingPolicy**, se esiste. I dispositivi principali creati con il programma di installazione rapida utilizzano questo nome di policy per impostazione predefinita. Se aggiungi autorizzazioni a questa politica, le concedi anche ad altri dispositivi principali che utilizzano questa politica.

1. <a name="update-iot-policy-console-edit-policy"></a>Nella panoramica della politica, scegli **Modifica** versione attiva.

1. Rivedi la politica per le autorizzazioni richieste e aggiungi le autorizzazioni richieste mancanti.<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`— (Facoltativo) Questa autorizzazione è necessaria per utilizzare il [componente IP Detector](ip-detector-component.md), che riporta le informazioni di connettività di rete del dispositivo principale al AWS IoT Greengrass servizio cloud.
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow``iot:UpdateThingShadow`, e `iot:DeleteThingShadow` — (Facoltativo) Queste autorizzazioni sono necessarie per utilizzare il [componente shadow manager](shadow-manager-component.md) con cui sincronizzare le ombre dei dispositivi client. AWS IoT Core[Questa funzionalità richiede [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 o successivo, shadow manager v2.2.0 o successivo e MQTT bridge v2.2.0 o successivo.](mqtt-bridge-component.md)

1. (Facoltativo) Per consentire al dispositivo principale di sincronizzare gli shadows con, aggiungete la seguente dichiarazione alla policy. AWS IoT Core Se prevedi di interagire con le ombre dei dispositivi client, ma non di sincronizzarle con loro AWS IoT Core, salta questo passaggio. Sostituisci *region* e *account-id* con la regione che usi e il tuo Account AWS numero.
   + Questa istruzione di esempio consente l'accesso alle ombre del dispositivo di tutti gli oggetti. Per seguire le migliori pratiche di sicurezza, è possibile limitare l'accesso solo al dispositivo principale e ai dispositivi client collegati al dispositivo principale. Per ulteriori informazioni, consulta [AWS IoT Politica minima per il supporto dei dispositivi client](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/*"
     ]
   }
   ```

   Dopo aver aggiunto questa dichiarazione, il documento di policy potrebbe avere un aspetto simile all'esempio seguente.

------
#### [ 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>Per impostare una nuova versione della politica come versione attiva, in **Stato della versione della politica**, seleziona **Imposta la versione modificata come versione attiva per questa politica**.

1. <a name="update-iot-policy-console-save-policy"></a>Scegli **Salva come nuova versione**.

#### Configura la policy relativa alla AWS IoT cosa (AWS CLI)
<a name="configure-iot-policy-requirement-cli"></a>

1. <a name="update-iot-policy-cli-list-thing-principals"></a>Elenca i principi fondamentali del AWS IoT dispositivo principale. I principali degli oggetti possono essere certificati di dispositivo X.509 o altri identificatori. Esegui il comando seguente e sostituiscilo *MyGreengrassCore* con il nome del dispositivo principale.

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

   L'operazione restituisce una risposta che elenca i componenti principali del dispositivo principale.

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

1. <a name="update-iot-policy-cli-identify-active-certificate"></a>Identifica il certificato attivo del dispositivo principale. Esegui il comando seguente e sostituiscilo *certificateId* con l'ID di ogni certificato del passaggio precedente finché non trovi il certificato attivo. L'ID del certificato è la stringa esadecimale alla fine dell'ARN del certificato. L'`--query`argomento specifica di visualizzare solo lo stato del certificato.

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

   L'operazione restituisce lo stato del certificato sotto forma di stringa. Ad esempio, se il certificato è attivo, questa operazione genera un output`"ACTIVE"`.

1. <a name="update-iot-policy-cli-list-certificate-policies"></a>Elenca le AWS IoT politiche allegate al certificato. Esegui il comando seguente e sostituisci l'ARN del certificato con l'ARN del certificato.

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

   L'operazione restituisce una risposta che elenca le AWS IoT politiche allegate al certificato.

   ```
   {
       "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>Scegli la politica da visualizzare e aggiornare.
**Nota**  <a name="quick-installation-iot-policies-note"></a>
Se hai utilizzato il programma di [installazione del software AWS IoT Greengrass Core per il provisioning delle risorse](quick-installation.md), hai due AWS IoT politiche. Ti consigliamo di scegliere la politica denominata **GreengrassV2IoTThingPolicy**, se esiste. I dispositivi principali creati con il programma di installazione rapida utilizzano questo nome di policy per impostazione predefinita. Se aggiungi autorizzazioni a questa politica, le concedi anche ad altri dispositivi principali che utilizzano questa politica.

1. <a name="update-iot-policy-cli-get-policy-document"></a>Scarica il documento della politica. Esegui il comando seguente e sostituiscilo *GreengrassV2IoTThingPolicy* con il nome della politica.

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

   L'operazione restituisce una risposta che contiene il documento della politica e altre informazioni sulla politica. Il documento di policy è un oggetto JSON serializzato come stringa. 

   ```
   {
       "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>Utilizzate un convertitore online o un altro strumento per convertire la stringa del documento di policy in un oggetto JSON, quindi salvatela in un file denominato. `iot-policy.json`

   Ad esempio, se è installato lo strumento [jq](https://stedolan.github.io/jq/), è possibile eseguire il comando seguente per ottenere il documento di policy, convertirlo in un oggetto JSON e salvare il documento di policy come oggetto JSON.

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

1. Esamina la politica per le autorizzazioni richieste e aggiungi le autorizzazioni richieste mancanti.

   <a name="nano-command-intro-existing-file"></a>Ad esempio, su un sistema basato su Linux, è possibile eseguire il comando seguente per utilizzare GNU nano per aprire il file.

   ```
   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`— (Facoltativo) Questa autorizzazione è necessaria per utilizzare il [componente IP Detector](ip-detector-component.md), che riporta le informazioni sulla connettività di rete del dispositivo principale al servizio cloud. AWS IoT Greengrass 
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow``iot:UpdateThingShadow`, e `iot:DeleteThingShadow` — (Facoltativo) Queste autorizzazioni sono necessarie per utilizzare il [componente shadow manager](shadow-manager-component.md) con cui sincronizzare le ombre dei dispositivi client. AWS IoT Core[Questa funzionalità richiede [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 o successivo, shadow manager v2.2.0 o successivo e MQTT bridge v2.2.0 o successivo.](mqtt-bridge-component.md)

1. <a name="update-iot-policy-cli-create-policy-version"></a>Salva le modifiche come nuova versione della politica. Esegui il comando seguente e sostituiscilo *GreengrassV2IoTThingPolicy* con il nome della politica.

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

   L'operazione restituisce una risposta simile all'esempio seguente se ha esito positivo.

   ```
   {
       "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
   }
   ```

## Componenti Greengrass per il supporto dei dispositivi client
<a name="cloud-discovery-components"></a>

**Importante**  <a name="client-device-support-nucleus-requirement"></a>
Il dispositivo principale deve eseguire [Greengrass nucleus](greengrass-nucleus-component.md) v2.2.0 o versione successiva per supportare i dispositivi client.

Per consentire ai dispositivi client di connettersi e comunicare con un dispositivo principale, si distribuiscono i seguenti componenti Greengrass sul dispositivo principale:
+ <a name="client-device-component-overview-client-device-auth"></a>[Autenticazione del dispositivo client](client-device-auth-component.md) (`aws.greengrass.clientdevices.Auth`)

  Implementa il componente di autenticazione del dispositivo client per autenticare i dispositivi client e autorizzare le azioni dei dispositivi client. Questo componente consente ai tuoi dispositivi di AWS IoT connettersi a un dispositivo principale.

  Questo componente richiede alcune configurazioni per utilizzarlo. È necessario specificare i gruppi di dispositivi client e le operazioni che ciascun gruppo è autorizzato a eseguire, ad esempio connettersi e comunicare tramite MQTT. Per ulteriori informazioni, consultate Configurazione dei [componenti di autenticazione dei dispositivi client](client-device-auth-component.md#client-device-auth-component-configuration).
+ <a name="client-device-component-overview-mqtt-broker-moquette"></a>[Broker MQTT 3.1.1 (Moquette)](mqtt-broker-moquette-component.md) (`aws.greengrass.clientdevices.mqtt.Moquette`)

  Implementate il componente del broker MQTT Moquette per eseguire un broker MQTT leggero. Il broker Moquette MQTT è conforme a MQTT 3.1.1 e include il supporto locale per QoS 0, QoS 1, QoS 2, messaggi conservati, messaggi di ultima volontà e abbonamenti permanenti.

  Non è necessario configurare questo componente per utilizzarlo. Tuttavia, è possibile configurare la porta su cui questo componente gestisce il broker MQTT. Per impostazione predefinita, utilizza la porta 8883.
+ <a name="client-device-component-overview-mqtt-broker-emqx"></a>[Broker MQTT 5 (EMQX)](mqtt-broker-emqx-component.md) (`aws.greengrass.clientdevices.mqtt.EMQX`)
**Nota**  
Per utilizzare il broker EMQX MQTT 5, è necessario utilizzare [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 o versione successiva e l'autenticazione del dispositivo client v2.2.0 o successiva.

  Implementate il componente broker EMQX MQTT per utilizzare le funzionalità MQTT 5.0 nella comunicazione tra i dispositivi client e il dispositivo principale. Il broker EMQX MQTT è conforme a MQTT 5.0 e include il supporto per gli intervalli di scadenza delle sessioni e dei messaggi, le proprietà degli utenti, gli abbonamenti condivisi, gli alias degli argomenti e altro ancora.

  Non è necessario configurare questo componente per utilizzarlo. Tuttavia, è possibile configurare la porta su cui questo componente gestisce il broker MQTT. Per impostazione predefinita, utilizza la porta 8883.
+ <a name="client-device-component-overview-mqtt-bridge"></a>[Ponte MQTT](mqtt-bridge-component.md) (`aws.greengrass.clientdevices.mqtt.Bridge`)

  (Facoltativo) Implementate il componente bridge MQTT per inoltrare messaggi tra dispositivi client (MQTT locale), pubblicazione e sottoscrizione locali e MQTT. AWS IoT Core Configura questo componente per sincronizzare i dispositivi client AWS IoT Core e interagire con i dispositivi client dai componenti Greengrass.

  Questo componente richiede una configurazione per essere utilizzato. È necessario specificare le mappature degli argomenti in cui questo componente inoltra i messaggi. Per ulteriori informazioni, vedere Configurazione dei componenti del bridge [MQTT](mqtt-bridge-component.md#mqtt-bridge-component-configuration).
+ <a name="client-device-component-overview-ip-detector"></a>[Rilevatore IP](ip-detector-component.md) (`aws.greengrass.clientdevices.IPDetector`)

  (Facoltativo) Implementate il componente del rilevatore IP per segnalare automaticamente gli endpoint del broker MQTT del dispositivo principale al servizio cloud. AWS IoT Greengrass Non è possibile utilizzare questo componente se si dispone di una configurazione di rete complessa, ad esempio una in cui un router inoltra la porta del broker MQTT al dispositivo principale.

  Non è necessario configurare questo componente per utilizzarlo.
+ <a name="client-device-component-overview-shadow-manager"></a>[Gestore delle ombre](shadow-manager-component.md) (`aws.greengrass.ShadowManager`)
**Nota**  
[Per gestire le ombre dei dispositivi client, è necessario utilizzare [Greengrass](greengrass-nucleus-component.md) nucleus v2.6.0 o successivo, shadow manager v2.2.0 o successivo e MQTT bridge v2.2.0 o successivo.](mqtt-bridge-component.md)

  (Facoltativo) Implementate il componente shadow manager per gestire le ombre dei dispositivi client sul dispositivo principale. I componenti Greengrass possono ottenere, aggiornare ed eliminare le ombre dei dispositivi client per interagire con i dispositivi client. È inoltre possibile configurare il componente shadow manager per sincronizzare le ombre dei dispositivi client con il servizio cloud. AWS IoT Core 

  Per utilizzare questo componente con le ombre dei dispositivi client, è necessario configurare il componente bridge MQTT per inoltrare i messaggi tra i dispositivi client e lo shadow manager, che utilizza la pubblicazione/sottoscrizione locale. Altrimenti, questo componente non richiede alcuna configurazione per essere utilizzato, ma richiede la configurazione per sincronizzare le ombre del dispositivo.

**Nota**  <a name="note-deploy-one-mqtt-broker"></a>
Si consiglia di implementare solo un componente del broker MQTT. I componenti del [bridge MQTT](mqtt-bridge-component.md) e del [rilevatore IP](ip-detector-component.md) funzionano con un solo componente del broker MQTT alla volta. Se si distribuiscono più componenti del broker MQTT, è necessario configurarli per utilizzare porte diverse.

## Configura cloud discovery (console)
<a name="configure-cloud-discovery-console"></a>

Puoi utilizzare la AWS IoT Greengrass console per associare i dispositivi client, gestire gli endpoint principali dei dispositivi e distribuire componenti per abilitare il supporto dei dispositivi client. Per ulteriori informazioni, consulta [Passaggio 2: abilitare il supporto per i dispositivi client](client-devices-tutorial.md#enable-client-device-support).

## Configura cloud discovery ()AWS CLI
<a name="configure-cloud-discovery-cli"></a>

Puoi utilizzare il AWS Command Line Interface (AWS CLI) per associare i dispositivi client, gestire gli endpoint principali dei dispositivi e distribuire componenti per abilitare il supporto dei dispositivi client. Per ulteriori informazioni, consulta gli argomenti seguenti:
+ [Gestisci le associazioni dei dispositivi client ()AWS CLI](associate-client-devices.md#manage-client-device-associations-cli)
+ [Gestisci gli endpoint principali dei dispositivi](manage-core-device-endpoints.md)
+ [AWS-componenti del dispositivo client forniti](client-device-components.md)
+ [Creare distribuzione](create-deployments.md)

# Associa i dispositivi client
<a name="associate-client-devices"></a>

Per utilizzare il cloud discovery, associa i dispositivi client a un dispositivo principale in modo che possano scoprire il dispositivo principale. Quindi, possono utilizzare l'[API Greengrass discovery](greengrass-discover-api.md) per recuperare le informazioni di connettività e i certificati per i dispositivi principali associati.

Allo stesso modo, dissociate i dispositivi client da un dispositivo principale per impedire loro di scoprire il dispositivo principale.

**Topics**
+ [Gestisci le associazioni dei dispositivi client (console)](#manage-client-device-associations-console)
+ [Gestisci le associazioni dei dispositivi client ()AWS CLI](#manage-client-device-associations-cli)
+ [Gestisci le associazioni dei dispositivi client (API)](#manage-client-device-associations-api)

## Gestisci le associazioni dei dispositivi client (console)
<a name="manage-client-device-associations-console"></a>

È possibile utilizzare la AWS IoT Greengrass console per visualizzare, aggiungere ed eliminare le associazioni dei dispositivi client.

**Per visualizzare le associazioni dei dispositivi client per un dispositivo principale (console)**

1. <a name="navigate-greengrass-console"></a>Passare alla [console AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Scegli **Dispositivi principali**.

1. Scegli il dispositivo principale da gestire.

1. Nella pagina dei dettagli del dispositivo principale, scegli la scheda **Dispositivi client**.

1. Nella sezione **Dispositivi client associati**, puoi vedere quali dispositivi client (AWS IoT oggetti) sono associati al dispositivo principale.

**Per associare i dispositivi client a un dispositivo principale (console)**

1. <a name="navigate-greengrass-console"></a>Passare alla [console AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Scegli **Dispositivi principali**.

1. Scegli il dispositivo principale da gestire.

1. Nella pagina dei dettagli del dispositivo principale, scegli la scheda **Dispositivi client**.

1. Nella sezione **Dispositivi client associati**, scegli **Associa dispositivi client**.

1. Nella modalità **Associa i dispositivi client al dispositivo principale**, procedi come segue per ogni dispositivo client da associare:

   1. Immettete il nome dell' AWS IoT oggetto da associare come dispositivo client.

   1. Scegliere **Aggiungi**.

1. Selezionare **Associate (Associa)**.

   I dispositivi client che hai associato possono ora utilizzare l'API di scoperta Greengrass per scoprire questo dispositivo principale.

**Per dissociare i dispositivi client da un dispositivo principale (console)**

1. <a name="navigate-greengrass-console"></a>Passare alla [console AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Scegli **Dispositivi principali.**

1. Scegli il dispositivo principale da gestire.

1. Nella pagina dei dettagli del dispositivo principale, scegli la scheda **Dispositivi client**.

1. Nella sezione **Dispositivi client associati**, seleziona ogni dispositivo client da dissociare.

1. Scegli **Dissocia**.

1. **Nella modalità di conferma, scegli Dissocia.**

   I dispositivi client che hai dissociato non possono più utilizzare l'API di scoperta Greengrass per scoprire questo dispositivo principale.

## Gestisci le associazioni dei dispositivi client ()AWS CLI
<a name="manage-client-device-associations-cli"></a>

È possibile utilizzare AWS Command Line Interface (AWS CLI) per gestire le associazioni dei dispositivi client per un dispositivo principale.

**Per visualizzare le associazioni dei dispositivi client per un dispositivo principale (AWS CLI)**
+ Utilizzate il seguente comando: [list-client-devices-associated- with-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/list-client-devices-associated-with-core-device.html).

**Per associare i dispositivi client a un dispositivo principale (AWS CLI)**
+ Utilizzate il seguente comando: [batch-associate-client-device- with-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/batch-associate-client-device-with-core-device.html).

**Per dissociare i dispositivi client da un dispositivo principale ()AWS CLI**
+ Utilizzate il seguente comando: [batch-disassociate-client-device- from-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/batch-disassociate-client-device-from-core-device.html).

## Gestisci le associazioni dei dispositivi client (API)
<a name="manage-client-device-associations-api"></a>

È possibile utilizzare l' AWS API per gestire le associazioni dei dispositivi client per un dispositivo principale.

**Per visualizzare le associazioni dei dispositivi client per un dispositivo principale (AWS API)**
+ Utilizzare la seguente operazione: [ListClientDevicesAssociatedWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListClientDevicesAssociatedWithCoreDevice.html).

**Per associare i dispositivi client a un dispositivo principale (AWS API)**
+ Utilizzare la seguente operazione: [BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html).

**Per dissociare i dispositivi client da un dispositivo principale (AWS API)**
+ Utilizzare la seguente operazione: [BatchDisassociateClientDeviceFromCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchDisassociateClientDeviceFromCoreDevice.html).

# Autenticazione dei client in modalità offline
<a name="offline-authentication"></a>

Con *l'autenticazione offline* puoi configurare il tuo dispositivo AWS IoT Greengrass Core in modo che i dispositivi client possano connettersi a un dispositivo principale, anche quando il dispositivo principale non è connesso al cloud. Quando utilizzi l'autenticazione offline, i tuoi dispositivi Greengrass possono continuare a funzionare in un ambiente parzialmente offline.

Per utilizzare l'autenticazione offline per un dispositivo client con una connessione al cloud, è necessario quanto segue:
+ Un dispositivo AWS IoT Greengrass Core con il [Autenticazione del dispositivo client](client-device-auth-component.md) componente distribuito. È necessario utilizzare la versione 2.3.0 o successiva per l'autenticazione offline.
+ Una connessione cloud per il dispositivo principale durante la connessione iniziale dei dispositivi client.

## Archiviazione delle credenziali del client
<a name="offline-auth-store-credentials"></a>

Quando un dispositivo client si connette a un dispositivo principale per la prima volta, il dispositivo principale chiama il AWS IoT Greengrass servizio. Quando viene chiamato, Greengrass convalida la registrazione del dispositivo client come una cosa sola. AWS IoT Verifica inoltre che il dispositivo disponga di un certificato valido. Il dispositivo principale memorizza quindi queste informazioni localmente.

Alla successiva connessione del dispositivo, il dispositivo principale Greengrass tenta di convalidare il dispositivo client con il servizio. AWS IoT Greengrass Se non riesce a connettersi AWS IoT Greengrass, il dispositivo principale utilizza le informazioni sul dispositivo memorizzate localmente per convalidare il dispositivo client.

È possibile configurare il periodo di tempo in cui il dispositivo principale Greengrass memorizza le credenziali. [È possibile impostare il timeout da un minuto a 2.147.483.647 minuti impostando l'opzione di `clientDeviceTrustDurationMinutes` configurazione nella configurazione del componente di autenticazione del dispositivo client.](https://docs.aws.amazon.com//greengrass/v2/developerguide/client-device-auth-component.html#client-device-auth-component-configuration) L'impostazione predefinita è un minuto, che disattiva efficacemente l'autenticazione offline. Quando imposti questo timeout, ti consigliamo di considerare le tue esigenze di sicurezza. Dovresti anche considerare per quanto tempo ti aspetti che i dispositivi principali funzionino quando sono disconnessi dal cloud.

Il dispositivo principale aggiorna l'archiviazione delle credenziali tre volte:

1. Quando un dispositivo si connette al dispositivo principale per la prima volta.

1. Se il dispositivo principale è connesso al cloud, quando un dispositivo client si riconnette al dispositivo principale.

1. Se il dispositivo principale è connesso al cloud, una volta al giorno per aggiornare l'intero archivio di credenziali.

Quando il dispositivo principale Greengrass aggiorna l'archivio delle credenziali, utilizza l'operazione. [ ListClientDevicesAssociatedWithCoreDevice](https://docs.aws.amazon.com//greengrass/v2/APIReference/API_ListClientDevicesAssociatedWithCoreDevice.html) Greengrass aggiorna solo i dispositivi restituiti da questa operazione. Per associare un dispositivo client a un dispositivo principale, vedere. [Associa i dispositivi client](associate-client-devices.md)

Per utilizzare l'`ListClientDevicesAssociatedWithCoreDevice`operazione, è necessario aggiungere l'autorizzazione per l'operazione al ruolo AWS Identity and Access Management (IAM) associato a Account AWS quella in esecuzione AWS IoT Greengrass. Per ulteriori informazioni, consulta [Autorizza i dispositivi principali a interagire con i servizi AWS](device-service-role.md).

# Gestisci gli endpoint principali dei dispositivi
<a name="manage-core-device-endpoints"></a>

Quando si utilizza il cloud discovery, si archiviano gli endpoint del broker MQTT per i dispositivi principali nel servizio cloud. AWS IoT Greengrass I dispositivi client si connettono AWS IoT Greengrass per recuperare questi endpoint e altre informazioni per i dispositivi principali associati.

Per ogni dispositivo principale, puoi gestire automaticamente o manualmente gli endpoint.
+ **Gestisci automaticamente gli endpoint con il rilevatore IP**

  Puoi implementare il [componente IP Detector](ip-detector-component.md) per gestire automaticamente gli endpoint dei dispositivi principali al posto tuo se disponi di una configurazione di rete non complessa, ad esempio dove i dispositivi client si trovano sulla stessa rete del dispositivo principale. Non è possibile utilizzare il componente del rilevatore IP se il dispositivo principale si trova dietro un router che inoltra la porta del broker MQTT al dispositivo principale, ad esempio.

  Il componente IP detector è utile anche se si esegue la distribuzione su gruppi di oggetti, poiché gestisce gli endpoint per tutti i dispositivi principali del gruppo di oggetti. Per ulteriori informazioni, consulta [Usa il rilevatore IP per gestire automaticamente gli endpoint](#use-ip-detector).
+ **Gestisci manualmente gli endpoint**

  Se non puoi utilizzare il componente del rilevatore IP, devi gestire manualmente gli endpoint principali dei dispositivi. Puoi aggiornare questi endpoint con la console o l'API. Per ulteriori informazioni, consulta [Gestisci manualmente gli endpoint](#manually-manage-endpoints).

**Topics**
+ [Usa il rilevatore IP per gestire automaticamente gli endpoint](#use-ip-detector)
+ [Gestisci manualmente gli endpoint](#manually-manage-endpoints)

## Usa il rilevatore IP per gestire automaticamente gli endpoint
<a name="use-ip-detector"></a>

Se disponi di una configurazione di rete semplice, ad esempio i dispositivi client sulla stessa rete del dispositivo principale, puoi implementare il [componente del rilevatore IP](ip-detector-component.md) per eseguire le seguenti operazioni:
+ Monitora le informazioni sulla connettività di rete locale del dispositivo Greengrass core. Queste informazioni includono gli endpoint di rete del dispositivo principale e la porta su cui opera il broker MQTT.
+ Segnala le informazioni sulla connettività del dispositivo principale al AWS IoT Greengrass servizio cloud.

Il componente del rilevatore IP sovrascrive gli endpoint impostati manualmente.

**Importante**  
La AWS IoT politica del dispositivo principale deve consentire l'`greengrass:UpdateConnectivityInfo`autorizzazione all'uso del componente del rilevatore IP. Per ulteriori informazioni, consultare [AWS IoT politiche per le operazioni sul piano dati](device-auth.md#iot-policies) e [Configura la policy relativa agli AWS IoT oggetti](connect-client-devices.md#configure-iot-policy-requirement).

È possibile effettuare una delle seguenti operazioni per distribuire il componente del rilevatore IP:
+ Utilizza la pagina **Configure Discovery** nella console. Per ulteriori informazioni, consulta [Configura cloud discovery (console)](connect-client-devices.md#configure-cloud-discovery-console).
+ Crea e modifica le distribuzioni per includere il rilevatore IP. Puoi utilizzare la console o l' AWS API per gestire AWS CLI le distribuzioni. Per ulteriori informazioni, consulta [Creare distribuzione](create-deployments.md).

### Implementa il componente del rilevatore IP (console)
<a name="deploy-ip-detector-console"></a>

1. **Nel menu di navigazione della [AWS IoT Greengrass console](https://console.aws.amazon.com/greengrass), scegli Componenti.**

1. Nella pagina **Componenti**, scegli la scheda **Componenti pubblici**, quindi scegli **aws.greengrass.clientdevices.IPDetector**.

1. Nella pagina **aws.greengrass.clientdevices.IPDetector**, scegli **(Distribuisci)**.

1. <a name="deploy-component-choose-deployment-step"></a>Da **Aggiungi alla distribuzione**, scegli una distribuzione esistente da modificare oppure scegli di creare una nuova distribuzione, quindi scegli **Avanti**.

1. <a name="deploy-component-choose-target-step"></a>Se hai scelto di creare una nuova distribuzione, scegli il dispositivo principale o il gruppo di oggetti di destinazione per la distribuzione. Nella pagina **Specificare la destinazione**, in **Obiettivo di distribuzione**, scegli un dispositivo principale o un gruppo di oggetti, quindi scegli **Avanti**.

1. Nella pagina **Seleziona componenti**, verifica che il **aws.greengrass.clientdevices.IPDetector**componente sia selezionato, scegli **Avanti**.

1. Nella pagina **Configura componenti **aws.greengrass.clientdevices.IPDetector****, selezionate e quindi effettuate le seguenti operazioni:

   1. Scegli **Configura componente**.

   1. Nella aws.greengrass.clientdevices.IPDetector modalità **Configura**, in **Aggiornamento della configurazione**, in **Configurazione da unire**, è possibile inserire un aggiornamento della configurazione per configurare il componente del rilevatore IP. È possibile specificare una delle seguenti opzioni di configurazione:
      + `defaultPort`— <a name="ip-detector-component-configuration-default-port-definition"></a>(Facoltativo) La porta del broker MQTT da segnalare quando questo componente rileva gli indirizzi IP. È necessario specificare questo parametro se si configura il broker MQTT per utilizzare una porta diversa dalla porta predefinita 8883. 
      + `includeIPv4LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv4-loopback-addrs-definition"></a>(Facoltativo) È possibile abilitare questa opzione per rilevare e segnalare gli indirizzi di IPv4 loopback. Si tratta di indirizzi IP, ad esempio quelli `localhost` in cui un dispositivo può comunicare con se stesso. Utilizzate questa opzione in ambienti di test in cui il dispositivo principale e il dispositivo client funzionano sullo stesso sistema. 
      + `includeIPv4LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv4-link-local-addrs-definition"></a>(Facoltativo) È possibile abilitare questa opzione per rilevare e segnalare gli indirizzi IPv4 [locali del collegamento](https://en.wikipedia.org/wiki/Link-local_address). Utilizzate questa opzione se la rete del dispositivo principale non dispone del Dynamic Host Configuration Protocol (DHCP) o di indirizzi IP assegnati staticamente. 
      + `includeIPv6LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv6-loopback-addrs-definition"></a>(Facoltativo) È possibile abilitare questa opzione per rilevare e segnalare gli indirizzi di IPv6 loopback. Si tratta di indirizzi IP, ad esempio quelli `localhost` in cui un dispositivo può comunicare con se stesso. Utilizzate questa opzione in ambienti di test in cui il dispositivo principale e il dispositivo client funzionano sullo stesso sistema. È necessario `includeIPv4Addrs` impostare `false` e `includeIPv6Addrs` `true` utilizzare questa opzione. È necessario disporre del rilevatore IP v2.2.0 o successivo per utilizzare questa opzione.
      + `includeIPv6LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv6-link-local-addrs-definition"></a>[(Facoltativo) È possibile abilitare questa opzione per rilevare e IPv6 segnalare gli indirizzi locali dei collegamenti.](https://en.wikipedia.org/wiki/Link-local_address) Utilizzate questa opzione se la rete del dispositivo principale non dispone del Dynamic Host Configuration Protocol (DHCP) o di indirizzi IP assegnati staticamente. È necessario `includeIPv4Addrs` impostare `false` e `includeIPv6Addrs` `true` utilizzare questa opzione. È necessario disporre del rilevatore IP v2.2.0 o successivo per utilizzare questa opzione.
      + `includeIPv4Addrs`— <a name="ip-detector-component-configuration-include-ipv4-addrs-definition"></a>(Facoltativo) L'impostazione predefinita è true. È possibile abilitare questa opzione per pubblicare IPv4 gli indirizzi trovati sul dispositivo principale. È necessario disporre del rilevatore IP v2.2.0 o successivo per utilizzare questa opzione.
      + `includeIPv6Addrs`— <a name="ip-detector-component-configuration-include-ipv6-addrs-definition"></a>(Facoltativo) È possibile abilitare questa opzione per pubblicare IPv6 gli indirizzi trovati sul dispositivo principale. Imposta `includeIPv4Addrs` `false` per utilizzare questa opzione. È necessario disporre del rilevatore IP v2.2.0 o successivo per utilizzare questa opzione.

      L'aggiornamento della configurazione potrebbe essere simile all'esempio seguente.

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

   1. Scegli **Conferma** per chiudere la modalità, quindi scegli **Avanti**.

1. <a name="deploy-component-configure-advanced-settings-step"></a>Nella pagina **Configura impostazioni avanzate**, mantieni le impostazioni di configurazione predefinite e scegli **Avanti**.

1. <a name="deploy-component-review-and-deploy-step"></a>Nella pagina **Review (Verifica)**, scegli **Deploy (Distribuisci)**.

   Il completamento della distribuzione può richiedere fino a un minuto.

### Implementa il componente del rilevatore IP ()AWS CLI
<a name="deploy-ip-detector-cli"></a>

Per distribuire il componente del rilevatore IP, create un documento di distribuzione che `aws.greengrass.clientdevices.IPDetector` includa l'`components`oggetto e specificate l'aggiornamento della configurazione per il componente. Segui le istruzioni riportate in [Creare distribuzione](create-deployments.md) basso per creare una nuova distribuzione o modificare una distribuzione esistente.

È possibile specificare una delle seguenti opzioni per configurare il componente del rilevatore IP quando si crea il documento di distribuzione:
+ `defaultPort`— <a name="ip-detector-component-configuration-default-port-definition"></a>(Facoltativo) La porta del broker MQTT da segnalare quando questo componente rileva gli indirizzi IP. È necessario specificare questo parametro se si configura il broker MQTT per utilizzare una porta diversa dalla porta predefinita 8883. 
+ `includeIPv4LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv4-loopback-addrs-definition"></a>(Facoltativo) È possibile abilitare questa opzione per rilevare e segnalare gli indirizzi di IPv4 loopback. Si tratta di indirizzi IP, ad esempio quelli `localhost` in cui un dispositivo può comunicare con se stesso. Utilizzate questa opzione in ambienti di test in cui il dispositivo principale e il dispositivo client funzionano sullo stesso sistema. 
+ `includeIPv4LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv4-link-local-addrs-definition"></a>(Facoltativo) È possibile abilitare questa opzione per rilevare e segnalare gli indirizzi IPv4 [locali del collegamento](https://en.wikipedia.org/wiki/Link-local_address). Utilizzate questa opzione se la rete del dispositivo principale non dispone del Dynamic Host Configuration Protocol (DHCP) o di indirizzi IP assegnati staticamente. 
+ `includeIPv6LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv6-loopback-addrs-definition"></a>(Facoltativo) È possibile abilitare questa opzione per rilevare e segnalare gli indirizzi di IPv6 loopback. Si tratta di indirizzi IP, ad esempio quelli `localhost` in cui un dispositivo può comunicare con se stesso. Utilizzate questa opzione in ambienti di test in cui il dispositivo principale e il dispositivo client funzionano sullo stesso sistema. È necessario `includeIPv4Addrs` impostare `false` e `includeIPv6Addrs` `true` utilizzare questa opzione. È necessario disporre del rilevatore IP v2.2.0 o successivo per utilizzare questa opzione.
+ `includeIPv6LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv6-link-local-addrs-definition"></a>[(Facoltativo) È possibile abilitare questa opzione per rilevare e IPv6 segnalare gli indirizzi locali dei collegamenti.](https://en.wikipedia.org/wiki/Link-local_address) Utilizzate questa opzione se la rete del dispositivo principale non dispone del Dynamic Host Configuration Protocol (DHCP) o di indirizzi IP assegnati staticamente. È necessario `includeIPv4Addrs` impostare `false` e `includeIPv6Addrs` `true` utilizzare questa opzione. È necessario disporre del rilevatore IP v2.2.0 o successivo per utilizzare questa opzione.
+ `includeIPv4Addrs`— <a name="ip-detector-component-configuration-include-ipv4-addrs-definition"></a>(Facoltativo) L'impostazione predefinita è true. È possibile abilitare questa opzione per pubblicare IPv4 gli indirizzi trovati sul dispositivo principale. È necessario disporre del rilevatore IP v2.2.0 o successivo per utilizzare questa opzione.
+ `includeIPv6Addrs`— <a name="ip-detector-component-configuration-include-ipv6-addrs-definition"></a>(Facoltativo) È possibile abilitare questa opzione per pubblicare IPv6 gli indirizzi trovati sul dispositivo principale. Imposta `includeIPv4Addrs` `false` per utilizzare questa opzione. È necessario disporre del rilevatore IP v2.2.0 o successivo per utilizzare questa opzione.

Il seguente esempio di documento di distribuzione parziale specifica di segnalare la porta 8883 come porta del broker MQTT.

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

## Gestisci manualmente gli endpoint
<a name="manually-manage-endpoints"></a>

È possibile gestire manualmente gli endpoint del broker MQTT per i dispositivi principali.

Ogni endpoint del broker MQTT contiene le seguenti informazioni:

Punto **finale** () `HostAddress`  
Un indirizzo IP o DNS in cui i dispositivi client possono connettersi a un broker MQTT sul dispositivo principale.

**Porta** (`PortNumber`)  
La porta in cui opera il broker MQTT sul dispositivo principale.  
È possibile configurare questa porta sul [componente del broker Moquette MQTT](mqtt-broker-moquette-component.md), che per impostazione predefinita utilizza la porta 8883.

**Metadati ()** `Metadata`  
Metadati aggiuntivi da fornire ai dispositivi client che si connettono a questo endpoint.

**Topics**
+ [Gestisci gli endpoint (console)](#manually-manage-endpoints-console)
+ [Gestisci gli endpoint ()AWS CLI](#manually-manage-endpoints-cli)
+ [Gestione degli endpoint (API)](#manually-manage-endpoints-api)

### Gestisci gli endpoint (console)
<a name="manually-manage-endpoints-console"></a>

Puoi utilizzare la AWS IoT Greengrass console per visualizzare, aggiornare e rimuovere gli endpoint per un dispositivo principale.

**Per gestire gli endpoint per un dispositivo principale (console)**

1. <a name="navigate-greengrass-console"></a>Passare alla [console AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Scegli **Dispositivi principali.**

1. Scegli il dispositivo principale da gestire.

1. Nella pagina dei dettagli del dispositivo principale, scegli la scheda **Dispositivi client**.

1. Nella sezione Endpoint del **broker MQTT, puoi vedere gli endpoint** del broker MQTT del dispositivo principale. **Scegli Gestisci gli endpoint.**

1. Nella modalità **Gestisci gli endpoint**, aggiungi o rimuovi gli endpoint del broker MQTT per il dispositivo principale.

1. Scegliere **Aggiorna**.

### Gestisci gli endpoint ()AWS CLI
<a name="manually-manage-endpoints-cli"></a>

Puoi usare il AWS Command Line Interface (AWS CLI) per gestire gli endpoint per un dispositivo principale.

**Nota**  
Poiché il supporto per i dispositivi client in AWS IoT Greengrass V2 è retrocompatibile con AWS IoT Greengrass V1, puoi utilizzare le nostre operazioni AWS IoT Greengrass V1 API AWS IoT Greengrass V2 per gestire gli endpoint principali dei dispositivi.

**Per ottenere endpoint per un dispositivo principale ()AWS CLI**
+ Utilizzate uno dei seguenti comandi:
  + [greengrass v2: get-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/get-connectivity-info.html)
  + [erba verde: get-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-connectivity-info.html)

**Per aggiornare gli endpoint per un dispositivo principale ()AWS CLI**
+ Utilizzate uno dei seguenti comandi:
  + [greengrass v2: update-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/update-connectivity-info.html)
  + [erba verde: update-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrass/update-connectivity-info.html)

### Gestione degli endpoint (API)
<a name="manually-manage-endpoints-api"></a>

Puoi utilizzare l' AWS API per gestire gli endpoint per un dispositivo principale.

**Nota**  
Poiché il supporto per i dispositivi client in AWS IoT Greengrass V2 è retrocompatibile con AWS IoT Greengrass V1, puoi utilizzare le nostre operazioni AWS IoT Greengrass V1 API AWS IoT Greengrass V2 per gestire gli endpoint principali dei dispositivi.

**Per ottenere endpoint per un dispositivo principale (API)AWS**
+ Utilizzate una delle seguenti operazioni:
  + [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)

**Per aggiornare gli endpoint per un dispositivo principale (API)AWS**
+ Utilizza una delle seguenti operazioni:
  + [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)

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

AWS IoT Greengrass offre opzioni per scegliere quale broker MQTT locale eseguire sui dispositivi principali. I dispositivi client si connettono al broker MQTT che funziona su un dispositivo principale, quindi scegli un broker MQTT compatibile con i dispositivi client che desideri connettere.

**Nota**  <a name="note-deploy-one-mqtt-broker"></a>
Ti consigliamo di implementare solo un componente del broker MQTT. I componenti del [bridge MQTT](mqtt-bridge-component.md) e del [rilevatore IP](ip-detector-component.md) funzionano con un solo componente del broker MQTT alla volta. Se si distribuiscono più componenti del broker MQTT, è necessario configurarli per utilizzare porte diverse.

È possibile scegliere tra i seguenti broker MQTT:
+ **[Broker MQTT 3.1.1 (Moquette)](mqtt-broker-moquette-component.md)** — `aws.greengrass.clientdevices.mqtt.Moquette`

  Scegliete questa opzione per un broker MQTT leggero e conforme allo standard MQTT 3.1.1. Il broker AWS IoT Core MQTT e io SDK per dispositivi AWS IoT siamo inoltre conformi allo standard MQTT 3.1.1, quindi puoi utilizzare queste funzionalità per creare un'applicazione che utilizzi MQTT 3.1.1 su tutti i tuoi dispositivi e il. Cloud AWS
+ **[Broker MQTT 5 (EMQX) —](mqtt-broker-emqx-component.md)** `aws.greengrass.clientdevices.mqtt.EMQX`

  Scegliete questa opzione per utilizzare le funzionalità MQTT 5 nella comunicazione tra dispositivi principali e dispositivi client. Questo componente utilizza più risorse rispetto al broker Moquette MQTT 3.1.1 e sui dispositivi core Linux richiede Docker.

  MQTT 5 è retrocompatibile con MQTT 3.1.1, quindi è possibile connettere i dispositivi client che utilizzano MQTT 3.1.1 a questo broker. Se si utilizza il broker Moquette MQTT 3.1.1, è possibile sostituirlo con il broker EMQX MQTT 5 e i dispositivi client possono continuare a connettersi e funzionare normalmente.

  <a name="note-local-mqtt-broker-mqtt-5-features"></a>
+ **Implementa un broker personalizzato**

  Scegli questa opzione per creare un componente broker locale personalizzato per comunicare con i dispositivi client. È possibile creare un broker locale personalizzato che utilizza un protocollo diverso da MQTT. AWS IoT Greengrass fornisce un componente SDK che è possibile utilizzare per autenticare e autorizzare i dispositivi client. Per ulteriori informazioni, consulta [SDK per dispositivi AWS IoT Utilizzatelo per comunicare con il nucleo Greengrass, gli altri componenti e AWS IoT CoreComunica con il nucleo Greengrass, altri componenti e AWS IoT Core](interprocess-communication.md) e [Autentica e autorizza i dispositivi client](ipc-client-device-auth.md).

# Connessione dei dispositivi client a un dispositivo AWS IoT Greengrass Core con un broker MQTT
<a name="connecting-to-mqtt"></a>

Quando utilizzi un broker MQTT sul tuo dispositivo AWS IoT Greengrass Core, il dispositivo utilizza un'*autorità di certificazione (CA) del dispositivo principale* unica per il dispositivo per emettere un certificato al broker per effettuare connessioni TLS reciproche con i client. 

AWS IoT Greengrass genererà automaticamente una CA del dispositivo principale oppure puoi fornirne una tua. La CA del dispositivo principale viene registrata al AWS IoT Greengrass momento della connessione del [Autenticazione del dispositivo client](client-device-auth-component.md) componente. La CA del dispositivo principale generata automaticamente è persistente, il dispositivo continuerà a utilizzare la stessa CA finché sarà configurato il componente di autenticazione del dispositivo client.

All'avvio, il broker MQTT richiede un certificato. Il componente di autenticazione del dispositivo client emette un certificato X.509 utilizzando la CA del dispositivo principale. Il certificato viene ruotato all'avvio del broker, alla scadenza del certificato o quando le informazioni di connettività, come l'indirizzo IP, cambiano. Per ulteriori informazioni, consulta [Rotazione dei certificati sul broker MQTT locale](device-auth.md#mqtt-certificate-expiration).

Per connettere un client al broker MQTT, è necessario quanto segue:
+ Il dispositivo client deve avere la CA del dispositivo AWS IoT Greengrass Core. È possibile ottenere questa CA tramite cloud discovery o fornendo la CA manualmente. Per ulteriori informazioni, consulta [Utilizzando la propria autorità di certificazione](#use-your-own-CA).
+ Il nome di dominio completo (FQDN) o l'indirizzo IP del dispositivo principale devono essere presenti nel certificato del broker rilasciato dalla CA del dispositivo principale. È possibile garantire ciò utilizzando il [Rilevatore IP](ip-detector-component.md) componente o configurando manualmente l'indirizzo IP. Per ulteriori informazioni, consulta [Gestisci gli endpoint principali dei dispositivi](manage-core-device-endpoints.md).
+ Il componente di autenticazione del dispositivo client deve autorizzare il dispositivo client a connettersi al dispositivo principale Greengrass. Per ulteriori informazioni, consulta [Autenticazione del dispositivo client](client-device-auth-component.md).

## Utilizzando la propria autorità di certificazione
<a name="use-your-own-CA"></a>

Se i dispositivi client non riescono ad accedere al cloud per rilevare il dispositivo principale, puoi fornire un'*autorità di certificazione (CA) del dispositivo principale*. Il dispositivo principale Greengrass utilizza il dispositivo principale CA per emettere certificati per il broker MQTT. Dopo aver configurato il dispositivo principale e aver fornito al dispositivo client la relativa CA, i dispositivi client possono connettersi all'endpoint e verificare l'handshake TLS utilizzando la CA del dispositivo principale (CA fornita dal proprio dispositivo o generata automaticamente).

Per configurare il [Autenticazione del dispositivo client](client-device-auth-component.md) componente in modo che utilizzi la CA del dispositivo principale, imposta il parametro di `certificateAuthority` configurazione quando distribuisci il componente. È necessario fornire i seguenti dettagli durante la configurazione:
+ La posizione di un certificato CA del dispositivo principale.
+ La chiave privata del certificato CA del dispositivo principale.
+ (Facoltativo) La catena di certificati fino al certificato principale se la CA del dispositivo principale è una CA intermedia.

Se fornisci una CA del dispositivo principale, AWS IoT Greengrass registra la CA nel cloud.

È possibile archiviare i certificati in un modulo di sicurezza hardware o nel file system. L'esempio seguente mostra una `certificateAuthority` configurazione per una CA intermedia archiviata utilizzando HSM/TPM. Si noti che la catena di certificati può essere archiviata solo su disco.

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

In questo esempio, il parametro di `certificateAuthority` configurazione configura il componente di autenticazione del dispositivo client per utilizzare una CA intermedia dal file system:

```
  "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",
    }
```

Per connettere i dispositivi al dispositivo AWS IoT Greengrass Core, procedi come segue:

1. Crea un'autorità di certificazione (CA) intermedia per il dispositivo principale Greengrass utilizzando la CA principale della tua organizzazione. Si consiglia di utilizzare una CA intermedia come best practice di sicurezza.

1. Fornisci il certificato CA intermedio, la chiave privata e la catena di certificati dalla tua CA root al dispositivo principale Greengrass. Per ulteriori informazioni, consulta [Autenticazione del dispositivo client](client-device-auth-component.md). La CA intermedia diventa la CA del dispositivo principale per il dispositivo principale Greengrass e il dispositivo registra la CA con. AWS IoT Greengrass

1. Registra il dispositivo client come qualsiasi cosa. AWS IoT Per ulteriori informazioni, consulta [Create a thing object](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html#create-aws-thing) nella *AWS IoT Core Developer Guide*. Aggiungi la chiave privata, la chiave pubblica, il certificato del dispositivo e il certificato CA principale al tuo dispositivo client. Il modo in cui aggiungi le informazioni dipende dal dispositivo e dal software in uso.

Dopo aver configurato il dispositivo, puoi utilizzare il certificato e la catena di chiavi pubblica per connetterti al dispositivo principale Greengrass. Il software è responsabile della ricerca degli endpoint principali del dispositivo. È possibile impostare manualmente l'endpoint per il dispositivo principale. Per ulteriori informazioni, consulta [Gestisci manualmente gli endpoint](manage-core-device-endpoints.md#manually-manage-endpoints).

# Verifica le comunicazioni con i dispositivi client
<a name="test-client-device-communications"></a>

I dispositivi client possono utilizzare il SDK per dispositivi AWS IoT per rilevare, connettersi e comunicare con un dispositivo principale. È possibile utilizzare il Greengrass discovery client SDK per dispositivi AWS IoT per utilizzare l'[API Greengrass discovery](greengrass-discover-api.md), che restituisce informazioni sui dispositivi principali a cui un dispositivo client può connettersi. La risposta dell'API include gli endpoint del broker MQTT da connettere e i certificati da utilizzare per verificare l'identità di ciascun dispositivo principale. Quindi, il dispositivo client può provare ogni endpoint fino a quando non si connette correttamente a un dispositivo principale.

I dispositivi client possono rilevare solo i dispositivi principali a cui vengono associati. Prima di testare le comunicazioni tra un dispositivo client e un dispositivo principale, è necessario associare il dispositivo client al dispositivo principale. Per ulteriori informazioni, consulta [Associa i dispositivi client](associate-client-devices.md).

L'API Greengrass discovery restituisce gli endpoint del broker MQTT del dispositivo principale specificati. Puoi utilizzare il [componente IP Detector](ip-detector-component.md) per gestire questi endpoint al posto tuo oppure puoi gestirli manualmente per ogni dispositivo principale. Per ulteriori informazioni, consulta [Gestisci gli endpoint principali dei dispositivi](manage-core-device-endpoints.md).

**Nota**  
Per utilizzare l'API di scoperta Greengrass, un dispositivo client deve disporre dell'`greengrass:Discover`autorizzazione. Per ulteriori informazioni, consulta [AWS IoT Politica minima per i dispositivi client](device-auth.md#client-device-minimal-iot-policy).

 SDK per dispositivi AWS IoT È disponibile in più linguaggi di programmazione. Per ulteriori informazioni, consulta [AWS IoT Device SDKs](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html) nella *AWS IoT Core Developer Guide*.

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

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

In questa sezione, si utilizza l'esempio di scoperta di Greengrass nella versione 2 [SDK per dispositivi AWS IoT per Python](https://github.com/aws/aws-iot-device-sdk-python-v2) per testare le comunicazioni tra un dispositivo client e un dispositivo principale.

**Importante**  
Per utilizzare la versione SDK per dispositivi AWS IoT v2 per Python, un dispositivo deve eseguire Python 3.6 o versione successiva.

**Per testare le comunicazioni (SDK per dispositivi AWS IoT v2 per Python)**

1. <a name="download-iot-device-sdk-python-v2"></a>Scarica e installa la [SDK per dispositivi AWS IoT versione 2 per Python](https://github.com/aws/aws-iot-device-sdk-python-v2) AWS IoT sull'oggetto da connettere come dispositivo client.

   Sul dispositivo client, procedi come segue:

   1. Clona il repository SDK per dispositivi AWS IoT v2 for Python per scaricarlo.

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

   1. Installa la SDK per dispositivi AWS IoT v2 per Python.

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

1. <a name="cd-iot-device-sdk-python-v2"></a>Passa alla cartella samples nella SDK per dispositivi AWS IoT v2 per Python.

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

1. <a name="test-client-device-communications-application-intro"></a>Esegui l'applicazione Greengrass discovery di esempio. Questa applicazione prevede argomenti che specifichino il nome dell'oggetto del dispositivo client, l'argomento e il messaggio MQTT da utilizzare e i certificati che autenticano e proteggono la connessione. L'esempio seguente invia un messaggio Hello World all'argomento. `clients/MyClientDevice1/hello/world`<a name="test-client-device-communications-application-command-replace"></a>
   + Sostituire *MyClientDevice1* con il nome dell'oggetto del dispositivo client.
   + Sostituisci *\$1/certs/AmazonRootCA1.pem* con il percorso del certificato Amazon root CA sul dispositivo client.
   + Sostituisci *\$1/certs/device.pem.crt* con il percorso del certificato del dispositivo sul dispositivo client.
   + Sostituisci *\$1/certs/private.pem.key* con il percorso del file della chiave privata sul dispositivo client.
   + Sostituiscilo *us-east-1* con la AWS regione in cui operano il dispositivo client e il dispositivo principale.

   ```
   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'applicazione di esempio Discovery invia il messaggio 10 volte e si disconnette. Inoltre, sottoscrive lo stesso argomento in cui pubblica i messaggi. Se l'output indica che l'applicazione ha ricevuto messaggi MQTT sull'argomento, il dispositivo client può comunicare correttamente con il dispositivo principale.

   ```
   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>Se invece l'applicazione genera un errore, consulta [Risoluzione dei problemi di rilevamento di Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

   <a name="test-client-device-communications-application-view-core-logs"></a>Puoi anche visualizzare i log di Greengrass sul dispositivo principale per verificare se il dispositivo client si connette e invia messaggi correttamente. Per ulteriori informazioni, consulta [Monitora AWS IoT Greengrass i registri](monitor-logs.md).

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

In questa sezione, si utilizza l'esempio di scoperta di Greengrass nella versione [SDK per dispositivi AWS IoT 2 per C\$1\$1 per](https://github.com/aws/aws-iot-device-sdk-cpp-v2) testare le comunicazioni tra un dispositivo client e un dispositivo principale.

<a name="iot-device-sdk-cpp-v2-build-requirements-intro"></a>Per creare la SDK per dispositivi AWS IoT v2 per C\$1\$1, un dispositivo deve disporre dei seguenti strumenti:<a name="iot-device-sdk-cpp-v2-build-requirements"></a>
+ C\$1\$1 11 o versione successiva
+ CMake 3.1 o successivo
+ Uno dei seguenti compilatori:
  + GCC 4.8 o successivo
  + Clang 3.9 o successivo
  + MSVC 2015 o versione successiva

**Per testare le comunicazioni (SDK per dispositivi AWS IoT v2 per C\$1\$1)**

1. Scarica e crea la versione [SDK per dispositivi AWS IoT v2 per C\$1\$1](https://github.com/aws/aws-iot-device-sdk-cpp-v2) su cui AWS IoT connetterti come dispositivo client.

   Sul dispositivo client, procedi come segue:

   1. Create una cartella per l'area di lavoro SDK per dispositivi AWS IoT v2 for C\$1\$1 e modificatela.

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

   1. Clona il repository SDK per dispositivi AWS IoT v2 for C\$1\$1 per scaricarlo. Il `--recursive` flag specifica di scaricare i sottomoduli.

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

   1. Crea una cartella per l'output della build SDK per dispositivi AWS IoT v2 for C\$1\$1 e modificala.

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

   1. Crea la SDK per dispositivi AWS IoT v2 per 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. Crea l'applicazione di esempio Greengrass discovery nella versione SDK per dispositivi AWS IoT 2 per C\$1\$1. Esegui questa operazione:

   1. Passate alla cartella di esempio Greengrass discovery nella versione SDK per dispositivi AWS IoT 2 per C\$1\$1.

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

   1. Crea una cartella per l'output della build di esempio di Greengrass discovery e modificala.

      ```
      mkdir build
      cd build
      ```

   1. Crea l'applicazione di esempio 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>Esegui l'applicazione Greengrass discovery di esempio. Questa applicazione prevede argomenti che specifichino il nome dell'oggetto del dispositivo client, l'argomento MQTT da utilizzare e i certificati che autenticano e proteggono la connessione. L'esempio seguente sottoscrive l'`clients/MyClientDevice1/hello/world`argomento e pubblica un messaggio immesso nella riga di comando relativo allo stesso argomento.<a name="test-client-device-communications-application-command-replace"></a>
   + Sostituire *MyClientDevice1* con il nome dell'oggetto del dispositivo client.
   + Sostituisci *\$1/certs/AmazonRootCA1.pem* con il percorso del certificato Amazon root CA sul dispositivo client.
   + Sostituisci *\$1/certs/device.pem.crt* con il percorso del certificato del dispositivo sul dispositivo client.
   + Sostituisci *\$1/certs/private.pem.key* con il percorso del file della chiave privata sul dispositivo client.
   + Sostituiscilo *us-east-1* con la AWS regione in cui operano il dispositivo client e il dispositivo principale.

   ```
   ./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'applicazione di esempio Discovery sottoscrive l'argomento e richiede all'utente di inserire un messaggio da pubblicare. 

   ```
   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>Se invece l'applicazione genera un errore, consulta [Risoluzione dei problemi di rilevamento di Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

1. <a name="test-client-device-communications-application-scanner-input"></a>Inserisci un messaggio, ad esempio. **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>Se l'output indica che l'applicazione ha ricevuto il messaggio MQTT sull'argomento, il dispositivo client può comunicare correttamente con il dispositivo principale.

   ```
   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>Puoi anche visualizzare i log di Greengrass sul dispositivo principale per verificare se il dispositivo client si connette e invia messaggi correttamente. Per ulteriori informazioni, consulta [Monitora AWS IoT Greengrass i registri](monitor-logs.md).

## Comunicazioni di prova () JavaScript
<a name="test-client-device-communications-javascript"></a>

In questa sezione, si utilizza Greengrass discovery sample nella versione [SDK per dispositivi AWS IoT 2 per JavaScript](https://github.com/aws/aws-iot-device-sdk-js-v2) testare le comunicazioni tra un dispositivo client e un dispositivo principale. 

**Importante**  
Per utilizzare la versione SDK per dispositivi AWS IoT v2 for JavaScript, un dispositivo deve eseguire Node v10.0 o versione successiva.

**Per testare le comunicazioni (v2 for)SDK per dispositivi AWS IoT JavaScript**

1. Scarica e installa la [SDK per dispositivi AWS IoT versione 2](https://github.com/aws/aws-iot-device-sdk-js-v2) sull' AWS IoT oggetto JavaScript da connettere come dispositivo client.

   Sul dispositivo client, procedi come segue:

   1. Clona il JavaScript repository SDK per dispositivi AWS IoT v2 for per scaricarlo.

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

   1. Installa la v2 per SDK per dispositivi AWS IoT . JavaScript

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

1. Passa alla cartella di esempio Greengrass discovery nella versione 2 per SDK per dispositivi AWS IoT . JavaScript

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

1. Installa l'applicazione di esempio Greengrass discovery.

   ```
   npm install
   ```

1. <a name="test-client-device-communications-application-intro"></a>Esegui l'applicazione Greengrass discovery di esempio. Questa applicazione prevede argomenti che specifichino il nome dell'oggetto del dispositivo client, l'argomento e il messaggio MQTT da utilizzare e i certificati che autenticano e proteggono la connessione. L'esempio seguente invia un messaggio Hello World all'argomento. `clients/MyClientDevice1/hello/world`<a name="test-client-device-communications-application-command-replace"></a>
   + Sostituire *MyClientDevice1* con il nome dell'oggetto del dispositivo client.
   + Sostituisci *\$1/certs/AmazonRootCA1.pem* con il percorso del certificato Amazon root CA sul dispositivo client.
   + Sostituisci *\$1/certs/device.pem.crt* con il percorso del certificato del dispositivo sul dispositivo client.
   + Sostituisci *\$1/certs/private.pem.key* con il percorso del file della chiave privata sul dispositivo client.
   + Sostituiscilo *us-east-1* con la AWS regione in cui operano il dispositivo client e il dispositivo principale.

   ```
   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'applicazione di esempio Discovery invia il messaggio 10 volte e si disconnette. Inoltre, sottoscrive lo stesso argomento in cui pubblica i messaggi. Se l'output indica che l'applicazione ha ricevuto messaggi MQTT sull'argomento, il dispositivo client può comunicare correttamente con il dispositivo principale.

   ```
   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>Se invece l'applicazione genera un errore, consulta [Risoluzione dei problemi di rilevamento di Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

   <a name="test-client-device-communications-application-view-core-logs"></a>Puoi anche visualizzare i log di Greengrass sul dispositivo principale per verificare se il dispositivo client si connette e invia messaggi correttamente. Per ulteriori informazioni, consulta [Monitora AWS IoT Greengrass i registri](monitor-logs.md).

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

In questa sezione, si utilizza Greengrass discovery sample nella versione [SDK per dispositivi AWS IoT 2 per Java per](https://github.com/aws/aws-iot-device-sdk-java-v2) testare le comunicazioni tra un dispositivo client e un dispositivo principale.

**Importante**  
Per creare la versione SDK per dispositivi AWS IoT v2 per Java, un dispositivo deve disporre dei seguenti strumenti:  
Java 8 o versione successiva, con `JAVA_HOME` puntamento alla cartella Java.
Apache Maven

**Per testare le comunicazioni (SDK per dispositivi AWS IoT v2 per Java)**

1. Scaricate e create la [SDK per dispositivi AWS IoT versione v2 per Java](https://github.com/aws/aws-iot-device-sdk-java-v2) su un AWS IoT dispositivo da connettere come dispositivo client.

   Sul dispositivo client, effettuate le seguenti operazioni:

   1. Clona il repository SDK per dispositivi AWS IoT v2 for Java per scaricarlo.

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

   1. Passa alla cartella SDK per dispositivi AWS IoT v2 for Java.

   1. Crea la SDK per dispositivi AWS IoT v2 per 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>Esegui l'applicazione Greengrass discovery di esempio. Questa applicazione prevede argomenti che specifichino il nome dell'oggetto del dispositivo client, l'argomento MQTT da utilizzare e i certificati che autenticano e proteggono la connessione. L'esempio seguente sottoscrive l'`clients/MyClientDevice1/hello/world`argomento e pubblica un messaggio immesso nella riga di comando relativo allo stesso argomento.<a name="test-client-device-communications-application-command-replace"></a>
   + Sostituisci entrambe le istanze di *MyClientDevice1* con il nome dell'oggetto del dispositivo client.
   + Sostituisci *\$1HOME/certs/AmazonRootCA1.pem* con il percorso del certificato Amazon root CA sul dispositivo client.
   + Sostituisci *\$1HOME/certs/device.pem.crt* con il percorso del certificato del dispositivo sul dispositivo client.
   + Sostituisci *\$1HOME/certs/private.pem.key* con il percorso del file della chiave privata sul dispositivo client.
   + Sostituiscilo *us-east-1* con il Regione AWS luogo in cui funzionano il dispositivo client e il dispositivo principale.

   ```
   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'applicazione Discovery Sample sottoscrive l'argomento e richiede all'utente di inserire un messaggio da pubblicare. 

   ```
   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>Se invece l'applicazione genera un errore, consulta [Risoluzione dei problemi di rilevamento di Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

1. <a name="test-client-device-communications-application-scanner-input"></a>Inserisci un messaggio, ad esempio. **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>Se l'output indica che l'applicazione ha ricevuto il messaggio MQTT sull'argomento, il dispositivo client può comunicare correttamente con il dispositivo principale.

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

   <a name="test-client-device-communications-application-view-core-logs"></a>Puoi anche visualizzare i log di Greengrass sul dispositivo principale per verificare se il dispositivo client si connette e invia messaggi correttamente. Per ulteriori informazioni, consulta [Monitora AWS IoT Greengrass i registri](monitor-logs.md).

# API Greengrass Discovery RESTful
<a name="greengrass-discover-api"></a>

AWS IoT Greengrass fornisce il funzionamento dell'`Discover`API che i dispositivi client possono utilizzare per identificare i dispositivi core Greengrass a cui possono connettersi. I dispositivi client utilizzano questa operazione sul piano dati per recuperare le informazioni necessarie per connettersi ai dispositivi principali Greengrass, dove vengono associati al funzionamento [BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html)dell'API. Quando un dispositivo client è online, può connettersi al servizio AWS IoT Greengrass cloud e utilizzare l'API Discovery per trovare:
+ L'indirizzo IP e la porta per ogni dispositivo principale Greengrass associato.
+ Il certificato CA del dispositivo principale, che i dispositivi client possono utilizzare per autenticare il dispositivo principale Greengrass.

**Nota**  
I dispositivi client possono anche utilizzare il discovery client SDK per dispositivi AWS IoT per scoprire le informazioni di connettività per i dispositivi core Greengrass. Il client di scoperta utilizza l'API di rilevamento. Per ulteriori informazioni, consulta gli argomenti seguenti:  
[Verifica le comunicazioni con i dispositivi client](test-client-device-communications.md)
[ RESTful API Greengrass Discovery nella Guida](https://docs.aws.amazon.com/greengrass/v1/developerguide/gg-discover-api.html) per gli *AWS IoT Greengrass Version 1 sviluppatori*.

Per utilizzare questa operazione API, invia richieste HTTP all'API di rilevamento sull'endpoint del piano dati Greengrass. Questo endpoint API ha il seguente formato.

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

Per un elenco degli endpoint Regioni AWS e degli endpoint supportati per l'API AWS IoT Greengrass Discovery, consulta [AWS IoT Greengrass V2 endpoint e quote](https://docs.aws.amazon.com/general/latest/gr/greengrassv2.html) in. *Riferimenti generali di AWS* Questa operazione API è disponibile solo sull'endpoint del piano dati Greengrass. L'endpoint del piano di controllo utilizzato per gestire i componenti e le distribuzioni è diverso dall'endpoint del piano dati.

**Nota**  
L'API discovery è la stessa per e. AWS IoT Greengrass V1 AWS IoT Greengrass V2 Se disponi di dispositivi client che si connettono a un AWS IoT Greengrass V1 core, puoi connetterli ai dispositivi AWS IoT Greengrass V2 principali senza modificare il codice sui dispositivi client. Per ulteriori informazioni, consulta l'[ RESTful API Greengrass Discovery](https://docs.aws.amazon.com/greengrass/v1/developerguide/gg-discover-api.html) nella *AWS IoT Greengrass Version 1 Developer* Guide.

**Topics**
+ [Autenticazione e autorizzazione Discovery](#greengrass-discover-auth)
+ [Richiesta](#greengrass-discover-request)
+ [Risposta](#greengrass-discover-response)
+ [Prova l'API di scoperta con cURL](#greengrass-discover-test-request)

## Autenticazione e autorizzazione Discovery
<a name="greengrass-discover-auth"></a>

Per utilizzare l'API di rilevamento per recuperare le informazioni di connettività, un dispositivo client deve utilizzare l'autenticazione reciproca TLS con un certificato client X.509 per l'autenticazione. *Per ulteriori informazioni, consulta i certificati client [X.509](https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.html) nella Developer Guide.AWS IoT Core *

Un dispositivo client deve inoltre disporre dell'autorizzazione per eseguire l'`greengrass:Discover`azione. La seguente AWS IoT politica di esempio consente `MyClientDevice1` a un AWS IoT oggetto denominato di funzionare `Discover` da solo.

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

****  

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

------

**Importante**  
<a name="thing-policy-variable-not-supported"></a>[Le variabili Thing Policy](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) (`iot:Connection.Thing.*`) non sono supportate nelle AWS IoT politiche per i dispositivi principali o nelle operazioni del piano dati Greengrass. Puoi invece utilizzare un carattere jolly che corrisponda a più dispositivi con nomi simili. Ad esempio, puoi specificare `MyGreengrassDevice*` di `MyGreengrassDevice1` abbinare e così via. `MyGreengrassDevice2` 

Per ulteriori informazioni, consulta [AWS IoT Core le politiche](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policies.html) nella *Guida per AWS IoT Core gli sviluppatori*.

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

La richiesta contiene le intestazioni HTTP standard e viene inviata all'endpoint di scoperta Greengrass, come illustrato negli esempi seguenti.

Il numero di porta dipende dal fatto che il dispositivo principale sia configurato per inviare traffico HTTPS sulla porta 8443 o sulla porta 443. Per ulteriori informazioni, consulta [Connessione alla porta 443 o tramite un proxy di rete](configure-greengrass-core-v2.md#configure-alpn-network-proxy).

**Nota**  
Questi esempi utilizzano l'endpoint Amazon Trust Services (ATS), che funziona con i certificati CA root ATS consigliati. Gli endpoint devono corrispondere al tipo di certificato CA root.

Porta 8443  

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

Porta 443  

```
HTTP GET https://greengrass-ats.iot.region.amazonaws.com:443/greengrass/discover/thing/thing-name
```
I client che si connettono alla porta 443 devono implementare l'estensione TLS [Application Layer Protocol Negotiation (ALPN)](https://tools.ietf.org/html/rfc7301) e `x-amzn-http-ca` passarla come in. `ProtocolName` `ProtocolNameList` *Per ulteriori informazioni, consulta [Protocols](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html) nella Developer Guide.AWS IoT *

## Risposta
<a name="greengrass-discover-response"></a>

In caso di esito positivo, l'intestazione della risposta include il codice di stato HTTP 200 e il corpo della risposta contiene il documento di risposta discover.

**Nota**  
Poiché AWS IoT Greengrass V2 utilizza la stessa API di rilevamento AWS IoT Greengrass V1, la risposta organizza le informazioni in base a AWS IoT Greengrass V1 concetti, ad esempio i gruppi Greengrass. La risposta contiene un elenco di gruppi Greengrass. In AWS IoT Greengrass V2, ogni dispositivo principale fa parte del proprio gruppo, dove il gruppo contiene solo quel dispositivo principale e le relative informazioni di connettività.

### Documenti di risposta di individuazione di esempio
<a name="greengrass-discover-response-examples"></a>

Il seguente documento mostra la risposta per un dispositivo client associato a un dispositivo principale Greengrass. Il dispositivo principale ha un endpoint e un certificato 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-----"
      ]
    }
  ]
}
```

Il documento seguente mostra la risposta per un dispositivo client associato a due dispositivi principali. I dispositivi principali hanno più endpoint e più certificati CA di gruppo.

```
{
  "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-----"
      ]
    }
  ]
}
```

## Prova l'API di scoperta con cURL
<a name="greengrass-discover-test-request"></a>

Se l'hai `cURL` installata, puoi testare l'API di rilevamento. L'esempio seguente specifica i certificati di un dispositivo client per autenticare una richiesta all'endpoint dell'API di scoperta 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
```

**Nota**  
L'`-i`argomento specifica l'output delle intestazioni di risposta HTTP. È possibile utilizzare questa opzione per identificare gli errori.

Se la richiesta ha esito positivo, questo comando restituisce una risposta simile all'esempio seguente.

```
{
  "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"
      ]
    }
  ]
}
```

Se il comando genera un errore, vedi [Risoluzione dei problemi di rilevamento di Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).