

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 a AWS IoT
<a name="iot-connect-devices"></a>

I dispositivi si connettono a AWS IoT e altri servizi tramite AWS IoT Core. Tramite AWS IoT Core, i dispositivi inviano e ricevono messaggi utilizzando endpoint specifici per il tuo account. [AWS IoT Device SDKs](#iot-connect-device-sdks) supportano le comunicazioni dei dispositivi utilizzando i protocolli MQTT e WSS. Per ulteriori informazioni sui protocolli utilizzabili dai dispositivi, consulta [Protocolli di dispositivo di comunicazione](protocols.md).

**Broker di messaggi**  
AWS IoT gestisce la comunicazione tra dispositivi tramite un broker di messaggi. I dispositivi e i client pubblicano messaggi sul broker di messaggi e si iscrivono anche ai messaggi pubblicati dal broker di messaggi. I messaggi sono identificati da un'applicazione definita [*Argomento*](topics.md). Quando il broker di messaggi riceve un messaggio pubblicato da un dispositivo o da un client, lo pubblica nuovamente nei dispositivi e nei client che hanno effettuato la sottoscrizione all'argomento del messaggio. Il broker di messaggi inoltra anche i messaggi al motore AWS IoT [delle regole](iot-rules.md), che può agire sul contenuto del messaggio.

**AWS IoT sicurezza dei messaggi**  
Connessioni dei dispositivi da AWS IoT utilizzare [Certificati client X.509](x509-client-certs.md) e [AWS firma V4](https://docs.aws.amazon.com//general/latest/gr/signing_aws_api_requests.html) per l'autenticazione. Le comunicazioni tra dispositivi sono protette dalla versione TLS 1.3 e AWS IoT richiedono ai dispositivi di inviare l'[estensione SNI (Server Name Indication)](https://tools.ietf.org/html/rfc3546#section-3.1) quando si connettono. Per ulteriori informazioni, consulta [Transport](transport-security.html) Security in. AWS IoT

## AWS IoT dati del dispositivo e endpoint di servizio
<a name="iot-connect-device-endpoints"></a>

**Importante**  
Puoi archiviare o memorizzare nella cache gli endpoint nel tuo dispositivo. Ciò significa che non sarà necessario interrogare l'API `DescribeEndpoint` ogni volta che viene connesso un nuovo dispositivo. Gli endpoint non cambieranno dopo averli AWS IoT Core creati per il tuo account.

Ogni account ha diversi endpoint del dispositivo che sono unici per l'account e supportano funzioni IoT specifiche. Gli endpoint di dati dei AWS IoT dispositivi supportano un publish/subscribe protocollo progettato per le esigenze di comunicazione dei dispositivi IoT; tuttavia, anche altri client, come app e servizi, possono utilizzare questa interfaccia se la loro applicazione richiede le funzionalità specializzate fornite da questi endpoint. Gli endpoint di assistenza ai AWS IoT dispositivi supportano l'accesso incentrato sui dispositivi ai servizi di sicurezza e gestione.

[https://console.aws.amazon.com//iot/home#/settings](https://console.aws.amazon.com//iot/home#/settings) AWS IoT Core 

Per conoscere l'endpoint del dispositivo dell'account per uno scopo specifico, incluso l'endpoint dei dati del dispositivo, usa il comando CLI **describe-endpoint** mostrato qui, o il comando API REST `DescribeEndpoint` e fornire il valore del parametro `endpointType` dalla tabella seguente.

```
aws iot describe-endpoint --endpoint-type endpointType
```

Questo comando restituisce un file *iot-endpoint* nel seguente formato:`account-specific-prefix.iot.aws-region.amazonaws.com`.

Ogni cliente ha un `iot:Data-ATS` e un endpoint `iot:Data`. Ogni endpoint utilizza un certificato X.509 per autenticare il client. Si consiglia vivamente ai clienti di utilizzare il tipo di endpoint `iot:Data-ATS` più recente per evitare problemi legati alla diffidenza diffusa nei confronti delle autorità di certificazione Symantec. Forniamo l'`iot:Data`endpoint per i dispositivi per recuperare dati da vecchi endpoint che utilizzano VeriSign certificati per la compatibilità con le versioni precedenti. Per ulteriori informazioni, consulta [Autenticazione del server](server-authentication.html).


**AWS IoT endpoint per dispositivi**  

|  Scopo dell'endpoint  |  `endpointType` value  |  Description  | 
| --- | --- | --- | 
|  Operazioni del piano dati AWS IoT Core  |  `iot:Data-ATS`  |  Utilizzato per inviare e ricevere dati da e verso i componenti Broker di messaggi, [Device Shadow](iot-device-shadows.md) e [Motore di regole](iot-rules.md), di AWS IoT. `iot:Data-ATS` restituisce un endpoint di dati firmati con ATS.  | 
| operazioni del piano dati AWS IoT Core(legacy) |  `iot:Data`  | iot:Datarestituisce un endpoint di dati VeriSign firmato fornito per la compatibilità con le versioni precedenti. MQTT 5 non è supportato su endpoint Symantec (iot:Data). | 
|  AWS IoT Core accesso tramite credenziali  |  `iot:CredentialProvider`  |  Utilizzato per scambiare il certificato X.509 incorporato di un dispositivo con credenziali temporanee per connettersi direttamente con altri servizi AWS . Per ulteriori informazioni sulla connessione ad altri AWS servizi, vedere [Autorizzazione delle chiamate dirette ai AWS](authorizing-direct-aws.md) servizi.  | 
|  Operazioni di dati dei processi AWS IoT Device Management  |  `iot:Jobs`  |  Utilizzato per consentire ai dispositivi di interagire con il servizio AWS IoT Jobs utilizzando il [Jobs Device HTTPS APIs](jobs-mqtt-api.md). `iot:Jobs`può essere utilizzato IPv4 solo per. Se utilizzi endpoint dual-stack (IPv4 and IPv6), usa il tipo di endpoint. `iot:Data-ATS`  | 
|  AWS IoT Operazioni Device Advisor  |  `iot:DeviceAdvisor`  |  Tipo di endpoint di prova utilizzato per testare i dispositivi con Device Advisor. Per ulteriori informazioni, consulta [Device Advisor](device-advisor.md).  | 
|  AWS IoT Core data beta (anteprima)  |  `iot:Data-Beta`  |  Un tipo di endpoint riservato alle versioni beta. Per informazioni sul suo utilizzo corrente, consulta [Configurazioni del dominio](iot-custom-endpoints-configurable.md).  | 

Puoi anche utilizzare il tuo nome di dominio completo (FQDN), ad esempio*example.com*, e il certificato del server associato a cui connettere i dispositivi utilizzando. AWS IoT [Configurazioni del dominio](iot-custom-endpoints-configurable.md)

## AWS IoT Device SDKs
<a name="iot-connect-device-sdks"></a>

Il AWS IoT dispositivo ti SDKs aiuta a connettere i tuoi dispositivi IoT AWS IoT Core e supporta i protocolli MQTT e MQTT su WSS.

Il AWS IoT dispositivo SDKs si differenzia dal fatto che SDKs supporta le esigenze di comunicazione specializzate dei dispositivi IoT, ma non supporta tutti i servizi supportati da AWS SDKs. AWS SDKs AWS IoT I AWS IoT dispositivi SDKs sono compatibili con quelli AWS SDKs che supportano tutti i AWS servizi; tuttavia, utilizzano metodi di autenticazione diversi e si connettono a diversi endpoint, il che potrebbe rendere AWS SDKs impraticabile l'utilizzo su un dispositivo IoT.

**Dispositivi mobili**  
[AWS Mobile SDKs](iot-connect-service.md#iot-connect-mobile-sdks)Supportano sia le comunicazioni dei dispositivi MQTT, alcuni AWS IoT servizi APIs, sia quelle APIs di altri servizi. AWS Se stai sviluppando su un dispositivo mobile supportato, consulta il suo SDK per verificare se è l'opzione migliore per lo sviluppo della tua soluzione IoT.

------
#### [ C\$1\$1 ]

**AWS IoT SDK per dispositivi C\$1\$1**

Il AWS IoT C\$1\$1 Device SDK consente agli sviluppatori di creare applicazioni AWS connesse utilizzando e i APIs servizi. AWS IoT Core In particolare, questo SDK è stato progettato per i dispositivi che non hanno vincoli di risorse e che richiedono caratteristiche avanzate come l'accodamento dei messaggi, il supporto per il multithreading e le più recenti caratteristiche di linguaggio. Per ulteriori informazioni, consulta gli argomenti seguenti:
+ [AWS IoT Device SDK C\$1\$1 v2 attivo GitHub](https://github.com/aws/aws-iot-device-sdk-cpp-v2)
+ [AWS IoT Readme del dispositivo SDK C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2#aws-iot-device-sdk-for-c-v2)
+ [AWS IoT Esempi di Device SDK C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2/tree/main/samples#sample-apps-for-the-aws-iot-device-sdk-for-c-v2)
+ [AWS IoT Documentazione sull'API Device SDK C\$1\$1 v2](https://aws.github.io/aws-iot-device-sdk-cpp-v2/)

------
#### [ Python ]

**AWS IoT Device SDK per Python**

Il AWS IoT Device SDK for Python consente agli sviluppatori di scrivere script Python per utilizzare i propri dispositivi per accedere alla piattaforma tramite MQTT o MQTT tramite AWS IoT il protocollo Secure (WSS). WebSocket Collegando i propri dispositivi ai AWS IoT Core servizi, gli utenti possono lavorare in sicurezza con il broker APIs di messaggi, le regole e il servizio Device Shadow che AWS IoT Core fornisce e con altri AWS servizi come AWS Lambda Amazon Kinesis e Amazon S3 e altro ancora.
+ [AWS IoT Device SDK per Python v2 attivo GitHub](https://github.com/aws/aws-iot-device-sdk-python-v2)
+ [AWS IoT Device SDK per Python v2 Readme](https://github.com/aws/aws-iot-device-sdk-python-v2#aws-iot-device-sdk-v2-for-python)
+ [AWS IoT Device SDK per esempi in Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2/tree/main/samples#sample-apps-for-the-aws-iot-device-sdk-v2-for-python)
+ [AWS IoT Documentazione dell'API Device SDK per Python v2](https://aws.github.io/aws-iot-device-sdk-python-v2/)

------
#### [ JavaScript ]

**AWS IoT Device SDK per JavaScript**

Il AWS IoT Device SDK for JavaScript consente agli sviluppatori di scrivere JavaScript applicazioni che accedono APIs a o AWS IoT Core utilizzando MQTT o MQTT tramite il protocollo. WebSocket Questo SDK può essere usato nelle applicazioni di tipo browser e negli ambienti Node.js. Per ulteriori informazioni, consulta gli argomenti seguenti:
+ [AWS IoT Device SDK per la versione 2 attivo JavaScript GitHub](https://github.com/aws/aws-iot-device-sdk-js-v2)
+ [AWS IoT SDK del dispositivo per Readme v2 JavaScript ](https://github.com/aws/aws-iot-device-sdk-js-v2#aws-iot-device-sdk-for-javascript-v2)
+ [AWS IoT Device SDK per esempi per la versione 2 JavaScript ](https://github.com/aws/aws-iot-device-sdk-js-v2/tree/main/samples#sample-apps-for-the-aws-iot-device-sdk-for-javascript-v2)
+ [AWS IoT Documentazione relativa all'API Device SDK per la versione 2 JavaScript ](https://aws.github.io/aws-iot-device-sdk-js-v2/index.html)

------
#### [ Java ]

**AWS IoT SDK per dispositivi per Java**

Il AWS IoT Device SDK for Java consente agli sviluppatori Java di accedervi APIs tramite MQTT o MQTT tramite AWS IoT Core il protocollo. WebSocket L'SDK supporta il servizio Device Shadow. Puoi accedere alle copie shadow tramite i metodi HTTP, tra cui GET, UPDATE e DELETE. L'SDK supporta anche un modello di accesso semplificato alle copie shadow che permette agli sviluppatori di scambiare i dati con le copie shadow semplicemente utilizzando i metodi getter e setter, senza dover serializzare o deserializzare documenti JSON. Per ulteriori informazioni, consulta gli argomenti seguenti:
+ [AWS IoT SDK del dispositivo per Java v2 attivo GitHub](https://github.com/aws/aws-iot-device-sdk-java-v2)
+ [AWS IoT SDK del dispositivo per Java v2 Readme](https://github.com/aws/aws-iot-device-sdk-java-v2#aws-iot-device-sdk-for-java-v2)
+ [AWS IoT Esempi di Device SDK for Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2/tree/main/samples#sample-apps-for-the-aws-iot-device-sdk-for-java-v2)
+ [AWS IoT Documentazione sull'API Device SDK for Java v2](https://aws.github.io/aws-iot-device-sdk-java-v2/)

------
#### [ Embedded C ]

**AWS IoT Device SDK per Embedded C**

**Importante**  
Questo SDK è destinato all'uso da parte di sviluppatori di software integrati esperti.

Il SDK per dispositivi AWS IoT per Embedded C (C-SDK) è una raccolta di file sorgente C con licenza open source MIT che può essere utilizzata in applicazioni integrate per connettere in modo sicuro i dispositivi IoT a AWS IoT Core. Include le librerie MQTT, JSON Parser e AWS IoT Device Shadow e altre. Viene distribuito come codice sorgente ed è pensato per essere integrato nel firmware del cliente con il codice dell'applicazione, altre librerie ed eventualmente un Real Time Operating System (RTOS). 

 SDK per dispositivi AWS IoT per Embedded C È generalmente destinato a dispositivi con risorse limitate che richiedono un runtime ottimizzato in linguaggio C. È possibile utilizzare l'SDK su qualsiasi sistema operativo e ospitarlo su qualsiasi tipo di processore (ad esempio, MCUs e). MPUs Se il tuo dispositivo dispone di memoria e risorse di elaborazione sufficienti, ti consigliamo di utilizzare uno degli altri AWS IoT dispositivi e dispositivi mobili SDKs, ad esempio AWS IoT Device SDK for C\$1\$1, JavaScript Java o Python.

Per ulteriori informazioni, consulta gli argomenti seguenti:
+ [AWS IoT Device SDK per Embedded C su GitHub](https://github.com/aws/aws-iot-device-sdk-embedded-C)
+ [AWS IoT SDK del dispositivo per il file Readme C incorporato](https://github.com/aws/aws-iot-device-sdk-embedded-C#aws-iot-device-sdk-for-embedded-c)
+ [AWS IoT SDK del dispositivo per esempi C incorporati](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/docs/doxygen/output/html/demos_main.html)

------

# Protocolli di dispositivo di comunicazione
<a name="protocols"></a><a name="iot-message-broker"></a>

AWS IoT Core supporta dispositivi e client che utilizzano i protocolli MQTT e MQTT over WebSocket Secure (WSS) per pubblicare e sottoscrivere messaggi e dispositivi e client che utilizzano il protocollo HTTPS per pubblicare messaggi. Tutti i protocolli supportano e. IPv4 IPv6 In questa sezione vengono descritte le diverse opzioni di connessione per dispositivi e client.

## Versioni del protocollo TLS
<a name="connection-protocol-tls"></a>

AWS IoT Core utilizza la [versione [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) 1.2 e la versione](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) [TLS 1.3 per crittografare tutte](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3) le comunicazioni. È possibile configurare versioni aggiuntive delle policy TLS per l'endpoint configurando le impostazioni TLS nelle [configurazioni](https://docs.aws.amazon.com//iot/latest/developerguide/iot-endpoints-tls-config.html) del dominio. [Quando si collegano i dispositivi AWS IoT Core, i client possono inviare l'[estensione Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1), necessaria per funzionalità come la [registrazione di più account](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), endpoint [configurabili, [domini personalizzati](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html) ed endpoint](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html) VPC.](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html) Per ulteriori informazioni, vedere [Protezione del trasporto in AWS IoT](transport-security.html).

[AWS IoT Device SDKs](iot-connect-devices.md#iot-connect-device-sdks) supportano MQTT e MQTT su WSS e supportano i requisiti di sicurezza delle connessioni client. Si consiglia di utilizzare il [AWS IoT Device SDKs](iot-connect-devices.md#iot-connect-device-sdks) per connettere i client a AWS IoT.

## Protocolli, mappature delle porte e autenticazione
<a name="protocol-mapping"></a><a name="protocol-port-mapping"></a>

[Il modo in cui un dispositivo o un client si connette al broker di messaggi è configurabile utilizzando un tipo di autenticazione.](#connection-protocol-auth-mode) Per impostazione predefinita o quando non viene inviata alcuna estensione SNI, il metodo di autenticazione si basa sul protocollo dell'applicazione, sulla porta e sull'estensione TLS Application Layer Protocol Negotiation (ALPN) utilizzati dai dispositivi. La tabella seguente elenca l'autenticazione prevista in base a porta, porta e ALPN.


**Mappature tra protocolli, autenticazione e porte**  

| Protocollo | Operazioni supportate | Autenticazione | Porta | Nome del protocollo ALPN | 
| --- | --- | --- | --- | --- | 
|  MQTT su WebSocket  | Pubblicazione, sottoscrizione | Signature Version 4 | 443 |  N/D  | 
|  MQTT finito WebSocket  | Pubblicazione, sottoscrizione | Autenticazione personalizzata | 443 |  N/D  | 
|  MQTT  | Pubblicazione, sottoscrizione |  Certificato client X.509  |  443†  |  `x-amzn-mqtt-ca`  | 
| MQTT | Pubblicazione, sottoscrizione | Certificato client X.509 | 8883 | N/D | 
|  MQTT  | Pubblicazione, sottoscrizione |  Autenticazione personalizzata  |  443†  |  `mqtt`  | 
|  HTTPS  | Solo pubblicazione |  Signature Version 4  |  443  |  N/D  | 
|  HTTPS  | Solo pubblicazione |  Certificato client X.509  |  443†  |  `x-amzn-http-ca`  | 
| HTTPS | Solo pubblicazione | Certificato client X.509 | 8443 | N/D | 
| HTTPS | Solo pubblicazione | Autenticazione personalizzata | 443 | N/D | 

**Application Layer Protocol Negotiation (ALPN)**  
† Quando si utilizzano configurazioni endpoint predefinite, i client che si connettono alla porta 443 con l'autenticazione del certificato client X.509 devono implementare l'estensione TLS [Application Layer Protocol Negotiation (ALPN)](https://tools.ietf.org/html/rfc7301) e utilizzare il [nome del protocollo ALPN elencato nell'ALPN](https://tools.ietf.org/html/rfc7301#section-3.1) inviato dal client come parte del messaggio. ProtocolNameList `ClientHello`  
[Sulla porta 443, l'endpoint IoT:Data-ATS supporta ALPN HTTP, ma l'endpoint [IoT:Jobs no](iot-connect-devices.md#iot-connect-device-endpoint-table). x-amzn-http-ca](iot-connect-devices.md#iot-connect-device-endpoint-table)  
[Sulla porta 8443 HTTPS e sulla porta 443 MQTT con ALPN, l'autenticazione personalizzata non può essere utilizzata. x-amzn-mqtt-ca](custom-authentication.md)

I client si connettono agli endpoint dei propri dispositivi. Account AWS Consulta [AWS IoT dati del dispositivo e endpoint di servizio](iot-connect-devices.md#iot-connect-device-endpoints) per informazioni su come trovare gli endpoint del dispositivo dell'account.

**Nota**  
AWS SDKs non richiedono l'intero URL. Richiedono solo il nome host dell'endpoint, ad [`pubsub.py`esempio per AWS IoT Device SDK for Python on](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py#L100). GitHub Il passaggio dell'intero URL come indicato nella tabella seguente può generare un errore come nome host non valido.


**Connessione a AWS IoT Core**  

|  Protocollo  |  Endpoint o URL  | 
| --- | --- | 
|  MQTT  |  `iot-endpoint`  | 
|  MQTT su WSS  |  `wss://iot-endpoint/mqtt`  | 
|  HTTPS  |  `https://iot-endpoint/topics`  | 

## Scelta di un protocollo applicativo per la comunicazione del dispositivo
<a name="protocol-selection"></a>

Per la maggior parte delle comunicazioni tra dispositivi IoT attraverso gli endpoint del dispositivo, ti consigliamo di utilizzare i protocolli Secure MQTT o MQTT over WebSocket Secure (WSS); tuttavia, gli endpoint del dispositivo supportano anche HTTPS.

La tabella seguente confronta il modo in cui vengono AWS IoT Core utilizzati i due protocolli di alto livello (MQTT e HTTPS) per la comunicazione tra dispositivi.


**AWS IoT protocolli dei dispositivi (MQTT e HTTPS) side-by-side**  

|  Funzionalità  |  [MQTT](mqtt.md)  |  [HTTPS](http.md)  | 
| --- | --- | --- | 
|  Supporto pubblicazione/sottoscrizione  |  Pubblicazione e sottoscrizione  |  Solo pubblicazione  | 
|  Supporto SDK  |  [AWS Il dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) supporta i protocolli MQTT e WSS  |  Nessun supporto SDK, ma è possibile utilizzare metodi specifici della lingua per effettuare richieste HTTPS  | 
|  Supporto Qualità del servizio  |  [QoS MQTT livelli 0 e 1](mqtt.md#mqtt-qos)  | QoS è supportato passando un parametro di stringa di query ?qos=qos dove il valore può essere 0 o 1. È possibile aggiungere questa stringa di query per pubblicare un messaggio con il valore QoS desiderato. | 
| È possibile ricevere messaggi mancanti mentre il dispositivo era offline | Sì | No | 
|  Supporto del campo `clientId`  |  Sì  |  No  | 
|  Rilevamento disconnessione dispositivo  |  Sì  |  No  | 
|  Sicurezza delle comunicazioni  |  Sì. Consulta [Protocolli, mappature delle porte e autenticazione](#protocol-mapping)  |  Sì. Consulta [Protocolli, mappature delle porte e autenticazione](#protocol-mapping)  | 
|  Definizioni degli argomenti  |  Applicazione definita  |  Applicazione definita  | 
|  Formato dei dati del messaggio  |  Applicazione definita  |  Applicazione definita  | 
| Sovraccarico del protocollo | Più basso | Più alto | 
| Consumo energetico | Più basso | Più alto | 

## Scelta del tipo di autenticazione per la comunicazione del dispositivo
<a name="connection-protocol-auth-mode"></a>

Puoi configurare il tipo di autenticazione per il tuo endpoint IoT utilizzando endpoint configurabili. In alternativa, utilizza la configurazione predefinita e determina in che modo i dispositivi si autenticano con la combinazione di protocollo applicativo, porta e estensione TLS ALPN. Il tipo di autenticazione scelto determina il modo in cui i dispositivi si autenticheranno durante la connessione a. AWS IoT Core Esistono cinque tipi di autenticazione: 

**certificato X.509**

Autentica i dispositivi utilizzando i [certificati client X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html), che AWS IoT Core convalidano l'autenticazione del dispositivo. Questo tipo di autenticazione funziona con i protocolli Secure MQTT (MQTT over TLS) e HTTPS.

**Certificato X.509 con autorizzatore personalizzato**

Autentica i dispositivi utilizzando [certificati client X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) ed esegui azioni di autenticazione aggiuntive utilizzando un [autorizzatore personalizzato](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html), che riceverà le informazioni sul certificato client X.509. Questo tipo di autenticazione funziona con i protocolli Secure MQTT (MQTT over TLS) e HTTPS. Questo tipo di autenticazione è possibile solo utilizzando endpoint configurabili con autenticazione personalizzata X.509. Non è disponibile alcuna opzione ALPN.

**AWS Signature versione 4 (SigV4)**

Autentica i dispositivi utilizzando Cognito o il tuo servizio di backend, supportando la federazione sociale e aziendale. Questo tipo di autenticazione funziona con i protocolli MQTT over WebSocket Secure (WSS) e HTTPS.

**Autorizzatore personalizzato**

Autentica i dispositivi configurando una funzione Lambda per elaborare le informazioni di autenticazione personalizzate inviate a. AWS IoT Core Questo tipo di autenticazione funziona con i protocolli Secure MQTT (MQTT over TLS), HTTPS e MQTT over Secure (WSS). WebSocket 

**Impostazione predefinita**

Autentica i dispositivi in base all'estensione ALPN (Port and/or Application Layer Protocol Negotiation) utilizzata dai dispositivi. Alcune opzioni di autenticazione aggiuntive non sono supportate. Per ulteriori informazioni, consulta [Protocolli, mappature delle porte e autenticazione](#protocol-mapping).

La tabella seguente mostra tutte le combinazioni supportate di tipi di autenticazione e protocolli applicativi.


**Combinazioni supportate di tipi di autenticazione e protocolli applicativi**  

| Tipo di autenticazione | MQTT sicuro (MQTT su TLS) | MQTT su WebSocket Secure (WSS) | HTTPS | Predefinita | 
| --- | --- | --- | --- | --- | 
| certificato X.509 | ✓ |  | ✓ |  | 
| Certificato X.509 con autorizzatore personalizzato | ✓ |  | ✓ |  | 
| AWS Signature versione 4 (SigV4) |  | ✓ | ✓ |  | 
| Autorizzatore personalizzato | ✓ | ✓ | ✓ |  | 
| Impostazione predefinita |  |  |  | ✓ | 

## Limiti di durata della connessione
<a name="connection-duration"></a>

Le connessioni HTTPS non durano più a lungo del tempo necessario per ricevere e rispondere alle richieste.

La durata della connessione MQTT dipende dalla caratteristica di autenticazione utilizzata. La tabella seguente elenca la durata massima della connessione nelle condizioni ideali per ciascuna caratteristica.


**Durata della connessione MQTT per caratteristica di autenticazione**  

|  Funzionalità  |  Durata massima \$1  | 
| --- | --- | 
|  Certificato client X.509  |  1—2 settimane  | 
|  Autenticazione personalizzata  |  1—2 settimane  | 
|  Signature Version 4  |  Fino a 24 ore  | 

\$1 Non garantito

Con i certificati X.509 e l'autenticazione personalizzata, la durata della connessione non ha limiti rigidi, ma può durare pochi minuti. Per vari motivi si possono verificare interruzioni di connessione. L'elenco seguente contiene alcuni dei motivi più comuni.
+ Interruzioni di disponibilità Wi-Fi
+ Interruzioni della connessione fornitore di servizi Internet (ISP)
+ Patch di servizi
+ Implementazioni di servizi
+ Scalabilità automatica del servizio
+ Host del servizio non disponibile
+ Problemi e aggiornamenti del bilanciamento del carico
+ Errori lato client

I dispositivi devono implementare strategie per rilevare le disconnessioni e la riconnessione. Per informazioni sulla disconnessione di eventi e indicazioni su come gestirli, consulta [Eventi di connessione/disconnessione](life-cycle-events.md#connect-disconnect) in [Eventi del ciclo di vita](life-cycle-events.md).

# MQTT
<a name="mqtt"></a>

[MQTT](http://mqtt.org/) (Message Queuing Telemetry Transport) è un protocollo di messaggistica leggero e ampiamente adottato, progettato per dispositivi vincolati. Il supporto AWS IoT Core per MQTT si basa sulla [specifica MQTT v3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) e la [specifica MQTT v5.0](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html), con alcune differenze come documentato in [AWS IoT differenze rispetto alle specifiche MQTT](#mqtt-differences). Essendo la versione più recente dello standard, MQTT 5 introduce diverse funzionalità chiave che rendono un sistema basato su MQTT più affidabile, inclusi nuovi miglioramenti della scalabilità, segnalazione degli errori migliorata con risposte codice motivo, timer di scadenza dei messaggi e delle sessioni e intestazioni messaggi utente personalizzate. Per ulteriori informazioni sulle funzionalità supportate da MQTT 5, consultate Funzionalità AWS IoT Core supportate da [MQTT 5](#mqtt5). AWS IoT Core supporta anche la comunicazione tra versioni MQTT (MQTT 3 e MQTT 5). Un autore MQTT 3 può inviare un messaggio MQTT 3 a un sottoscrittore MQTT 5 che riceverà un messaggio di pubblicazione MQTT 5, e viceversa.

 AWS IoT Core *supporta connessioni di dispositivi che utilizzano il protocollo MQTT e il protocollo MQTT over WSS e che sono identificate da un ID client.* [AWS IoT Device SDKs](iot-connect-devices.md#iot-connect-device-sdks) supportano entrambi i protocolli e sono i modi consigliati per connettere i dispositivi a AWS IoT Core. Il AWS IoT dispositivo SDKs supporta le funzioni necessarie ai dispositivi e ai client per connettersi e accedere ai servizi. AWS IoT Il dispositivo SDKs supporta i protocolli di autenticazione richiesti dai AWS IoT servizi e i requisiti di ID di connessione richiesti dal protocollo MQTT e dai protocolli MQTT su WSS. Per informazioni su come connettersi AWS IoT utilizzando il AWS dispositivo SDKs e collegamenti ad esempi delle lingue AWS IoT supportate, vedere. [Connessione con MQTT tramite il dispositivo AWS IoT SDKs](#mqtt-sdk) Per ulteriori informazioni sull’autenticazione e sulla mappatura delle porte per i messaggi MQTT, consulta [Protocolli, mappature delle porte e autenticazione](protocols.md#protocol-mapping).

Sebbene consigliamo di utilizzare il AWS IoT Dispositivo SDKs a cui connettersi AWS IoT, non sono necessari. Se non si utilizza il AWS IoT Dispositivo SDKs, tuttavia, è necessario fornire la necessaria sicurezza di connessione e comunicazione. I client devono inoltre inviare la [Estensione TLS di Server Name Indication](https://tools.ietf.org/html/rfc3546#section-3.1) per impedire che le connessioni vengano rifiutate. I tentativi di connessione che non includono l'SNI vengono rifiutati. Per ulteriori informazioni, vedere [Transport Security in AWS IoT](transport-security.html). I client che utilizzano utenti e AWS credenziali IAM per autenticare i client devono fornire l'autenticazione [Signature Version 4](https://docs.aws.amazon.com//general/latest/gr/signature-version-4.html) corretta.

Dopo aver connesso i client, puoi monitorare e gestire le loro connessioni client MQTT utilizzando. APIs Per ulteriori informazioni, consulta [Gestione delle connessioni MQTT](#mqtt-client-disconnect).

**Topics**
+ [

## Connessione con MQTT tramite il dispositivo AWS IoT SDKs
](#mqtt-sdk)
+ [

## Opzioni di qualità del servizio MQTT (QoS)
](#mqtt-qos)
+ [

## Sessioni persistenti MQTT
](#mqtt-persistent-sessions)
+ [

## Messaggi conservati da MQTT
](#mqtt-retain)
+ [

## Messaggi MQTT Last Will and Testament (LWT)
](#mqtt-lwt)
+ [

## Utilizzo degli Attributi Connect
](#connect-attribute)
+ [

## Caratteristiche supportate da MQTT 5
](#mqtt5)
+ [

## Proprietà MQTT 5
](#mqtt5-properties)
+ [

## Codici motivo MQTT
](#mqtt5-reason-codes)
+ [

## AWS IoT differenze rispetto alle specifiche MQTT
](#mqtt-differences)
+ [

## Gestione delle connessioni MQTT
](#mqtt-client-disconnect)

## Connessione con MQTT tramite il dispositivo AWS IoT SDKs
<a name="mqtt-sdk"></a>

Questa sezione contiene collegamenti al AWS IoT dispositivo SDKs e al codice sorgente di programmi di esempio che illustrano come collegare un dispositivo a. AWS IoT Le app di esempio collegate qui mostrano come connettersi AWS IoT utilizzando il protocollo MQTT e MQTT tramite WSS.

**Nota**  
The AWS IoT Device SDKs ha rilasciato un client MQTT 5.

------
#### [ C\$1\$1 ]

**Utilizzo del AWS IoT C\$1\$1 Device SDK per connettere i dispositivi**
+  [Codice sorgente di un'app di esempio che mostra un esempio di connessione MQTT in C\$1\$1](https://github.com/aws/aws-iot-device-sdk-cpp-v2/blob/main/samples/mqtt/basic_connect/main.cpp) 
+ [AWS IoT SDK del dispositivo per C\$1\$1 v2 attivo GitHub](https://github.com/aws/aws-iot-device-sdk-cpp-v2)

------
#### [ Python ]

**Utilizzo del AWS IoT Device SDK per Python per connettere i dispositivi**
+  [Codice sorgente di un'app di esempio che mostra un esempio di connessione MQTT in Python](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py) 
+ [AWS IoT Device SDK v2 per Python attivo GitHub](https://github.com/aws/aws-iot-device-sdk-python-v2)

------
#### [ JavaScript ]

**Utilizzo del AWS IoT Device SDK per connettere i dispositivi JavaScript **
+  [Codice sorgente di un'app di esempio che mostra un esempio di connessione MQTT in JavaScript](https://github.com/aws/aws-iot-device-sdk-js-v2/blob/master/samples/node/pub_sub/index.ts) 
+ [AWS IoT Device SDK per JavaScript la versione 2 attivo GitHub](https://github.com/aws/aws-iot-device-sdk-js-v2)

------
#### [ Java ]

**Utilizzo del AWS IoT Device SDK for Java per connettere i dispositivi**

**Nota**  
Il AWS IoT Device SDK for Java v2 ora supporta lo sviluppo Android. Per ulteriori informazioni, consulta [AWS IoT Device SDK for Android](https://github.com/aws/aws-iot-device-sdk-java-v2/blob/main/documents/ANDROID.md).
+  [Codice sorgente di un'app di esempio che mostra un esempio di connessione MQTT in Java](https://github.com/aws/aws-iot-device-sdk-java-v2/blob/master/samples/BasicPubSub/src/main/java/pubsub/PubSub.java) 
+ [AWS IoT SDK del dispositivo per Java v2 attivo GitHub](https://github.com/aws/aws-iot-device-sdk-java-v2)

------
#### [ Embedded C ]

**Utilizzo del AWS IoT Device SDK for Embedded C per connettere i dispositivi**

**Importante**  
Questo SDK è destinato all'uso da parte di sviluppatori esperti di software integrato.
+  [Codice sorgente di un'app di esempio che mostra un esempio di connessione MQTT in Embedded C](https://github.com/aws/aws-iot-device-sdk-embedded-C/blob/master/demos/mqtt/mqtt_demo_basic_tls/mqtt_demo_basic_tls.c) 
+ [AWS IoT Device SDK per Embedded C attivo GitHub](https://github.com/aws/aws-iot-device-sdk-embedded-C)

------

## Opzioni di qualità del servizio MQTT (QoS)
<a name="mqtt-qos"></a>

AWS IoT e il AWS IoT dispositivo SDKs supporta i livelli di [qualità del servizio (QoS) `0` MQTT](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc385349263) e. `1` Il protocollo MQTT definisce un terzo livello di QoS, `2` livello, AWS IoT ma non lo supporta. Solo il protocollo MQTT supporta la caratteristica QoS. HTTPS supporta QoS passando un parametro di stringa di query `?qos=qos` dove il valore può essere 0 o 1.

Questa tabella descrive come ogni livello QoS influisce sui messaggi pubblicati da e per il broker messaggi. 


|  Con un livello QoS di...  |  Il messaggio è...  |  Commenti  | 
| --- | --- | --- | 
|  QoS livello 0  |  Inviato zero o più volte  |  Questo livello deve essere utilizzato per i messaggi inviati tramite collegamenti di comunicazione affidabili o che possono essere persi senza problemi.  | 
|  Livello QoS 1  |  Inviato almeno una volta e poi ripetutamente fino a quando non si riceve una risposta `PUBACK`  |  Il messaggio non viene considerato completo fino a quando il mittente non riceve una risposta `PUBACK` per indicare la riuscita della consegna.  | 

## Sessioni persistenti MQTT
<a name="mqtt-persistent-sessions"></a>

Le sessioni persistenti archiviano le sottoscrizioni e i messaggi di un client, con una qualità del servizio (QoS) pari a 1, che non sono stati riconosciuti dal client. Quando il dispositivo si riconnette a una sessione persistente, la sessione riprende, le relative sottoscrizioni vengono reintegrate e i messaggi sottoscritti non riconosciuti ricevuti e archiviati prima della riconnessione vengono inviati al client.

L'elaborazione dei messaggi archiviati viene registrata in CloudWatch metriche e registri. CloudWatch Per informazioni sulle voci scritte in CloudWatch and CloudWatch Logs, vedere e. [Parametri del broker di messaggi](metrics_dimensions.md#message-broker-metrics) [Voce di log Queued](cwl-format.md#log-mb-queued)

### Creazione di una sessione persistente
<a name="mqtt-persistent-sessions-create"></a>

In MQTT3, è possibile creare una sessione persistente MQTT inviando un messaggio `CONNECT` e impostando il flag `cleanSession` su `0`. Se non esiste alcuna sessione per il client che invia il messaggio `CONNECT`, viene creata una nuova sessione persistente. Se esiste una sessione per il client, il client riprende la sessione esistente. Per creare una sessione pulita, è possibile inviare un messaggio `CONNECT` e impostare il flag `cleanSession` su `1`. Il broker non memorizzerà alcuno stato della sessione quando il client si disconnette.

In MQTT 5, è possibile gestire le sessioni persistenti impostando il flag `Clean Start` e `Session Expiry Interval`. Avvio pulito controlla l'inizio della sessione di connessione e la fine della sessione precedente. Quando si imposta `Clean Start` = `1`, viene creata una nuova sessione e una sessione precedente viene terminata, se esiste. Quando si imposta `Clean Start`= `0`, la sessione di connessione riprende una sessione precedente, se esiste. L'intervallo di scadenza della sessione controlla la fine della sessione di connessione. L'intervallo di scadenza della sessione specifica il tempo, in secondi (numero intero a 4 byte), di persistenza di una sessione dopo la disconnessione. L'impostazione `Session Expiry interval`=`0` causa la terminazione immediata della sessione dopo la disconnessione. Se l'intervallo di scadenza della sessione non è specificato nel messaggio CONNECT, il valore predefinito è 0.


**Avvio pulito e scadenza della sessione MQTT 5**  

| Valore proprietà | Description | 
| --- | --- | 
| Clean Start= 1 | Crea una nuova sessione e termina una sessione precedente, se una esiste. | 
| Clean Start= 0 | Ripristina una sessione, se esiste una sessione precedente. | 
| Session Expiry Interval> 0 | Mantiene una sessione. | 
| Session Expiry interval= 0 | Non mantiene una sessione. | 

In MQTT 5, se si imposta `Clean Start` = `1` e `Session Expiry Interval` = `0`, questo è l'equivalente di una sessione pulita MQTT 3. Se si imposta `Clean Start` = `0` e `Session Expiry Interval`> `0`, è l'equivalente di una sessione persistente MQTT 3.

**Nota**  
Le sessioni persistenti tra versioni MQTT (MQTT 3 e MQTT 5) non sono supportate. Una sessione persistente MQTT 3 non può essere ripristinata come una sessione MQTT 5, e viceversa. 

### Operazioni durante una sessione persistente
<a name="mqtt-persistent-sessions-operation"></a>

I dispositivi utilizzano l'attributo `sessionPresent` nel messaggio `CONNACK` (Connection Acknowledged) per determinare l'eventuale presenza di una sessione persistente. Se `sessionPresent` è `1`, è presente una sessione persistente e tutti i messaggi archiviati per il client vengono distribuiti al client dopo che il client riceve il `CONNACK`, come descritto in [Traffico dei messaggi dopo la riconnessione a una sessione persistente](#persistent-session-reconnect). Se `sessionPresent` è impostato su `1`, non è necessario che il client esegua di nuovo la sottoscrizione. Se `sessionPresent` è impostato su `0`, non è presente alcuna sessione persistente e il client deve eseguire nuovamente la sottoscrizione nei filtri degli argomenti.

Dopo che il client si unisce ad una sessione persistente, può pubblicare messaggi e sottoscrivere filtri argomento senza ulteriori flag in ogni operazione.

### Traffico dei messaggi dopo la riconnessione a una sessione persistente
<a name="persistent-session-reconnect"></a>

Una sessione persistente rappresenta una connessione continua tra un cliente e un broker di messaggi MQTT. Quando un client si connette a un broker di messaggi utilizzando una sessione persistente, il broker di messaggi salva tutte le sottoscrizioni che il client effettua durante la connessione. Quando il client si disconnette, il broker di messaggi archivia i messaggi QoS 1 non riconosciuti e i nuovi messaggi QoS 1 pubblicati in argomenti di cui il client ha eseguito la sottoscrizione. I messaggi vengono archiviati in base al limite dell'account. I messaggi che superano il limite verranno eliminati. Per ulteriori informazioni sui limiti dei messaggi persistenti, consulta [Endpoint e quote di AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Quando il client si riconnette alla sessione persistente, tutte le sottoscrizioni vengono ripristinate e tutti i messaggi archiviati vengono inviati al client a una velocità massima di 10 messaggi al secondo. In MQTT 5, se un QoS 1 in uscita con Intervallo di scadenza dei messaggi scade quando un client è offline, dopo la ripresa della connessione, il client non riceverà il messaggio scaduto.

Dopo la riconnessione, i messaggi archiviati vengono inviati al client, a una velocità limitata di 10 messaggi archiviati al secondo, insieme a qualsiasi traffico di messaggi corrente fino a quando il limite di [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits) viene raggiunto. Poiché la velocità di distribuzione dei messaggi archiviati è limitata, ci vorranno alcuni secondi per distribuire tutti i messaggi archiviati se una sessione ha più di 10 messaggi archiviati da distribuire dopo la riconnessione.

Per gli abbonati condivisi, i messaggi verranno messi in coda se almeno un abbonato di un gruppo utilizza una sessione persistente e nessun abbonato è online per ricevere il messaggio QoS 1. La rimozione dalla coda dei messaggi viene effettuata a una velocità massima di 20 messaggi al secondo per abbonato attivo in un gruppo. Per ulteriori informazioni, consulta Accodamento dei messaggi relativi alle sottoscrizioni [condivise](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html#mqtt5-shared-subscription-queuing).

### Termine di una sessione persistente
<a name="ending-a-persistent-session"></a>

Le sessioni persistenti possono terminare nei modi seguenti:
+ Il tempo di scadenza della sessione persistente è trascorso. Il timer di scadenza della sessione persistente inizia quando il broker messaggi rileva che un client si è disconnesso, tramite la disconnessione del client o il timeout della connessione. 
+ Il client invia un messaggio `CONNECT` che imposta il flag `cleanSession` su `1`.
+ Si disconnette manualmente il client e si cancella la sessione utilizzando `DeleteConnection` l'API. Per ulteriori informazioni, consulta [Gestione delle connessioni MQTT](#mqtt-client-disconnect).

In MQTT 3, il valore predefinito del tempo di scadenza delle sessioni persistenti è un'ora e si applica a tutte le sessioni nell'account.

In MQTT 5, è possibile impostare Intervallo di scadenza della sessione per ogni sessione sui pacchetti CONNECT e DISCONNECT. 

Per intervallo di scadenza della sessione sul pacchetto DISCONNECT: 
+ Se l'intervallo di scadenza della sessione corrente è impostato su 0, non è possibile impostare un intervallo di scadenza della sessione su un valore maggiore di 0 sul pacchetto DISCONNECT.
+ Se l'intervallo di scadenza della sessione corrente è maggiore di 0 e si imposta l'intervallo di scadenza della sessione su 0 nel pacchetto DISCONNECT, la sessione verrà terminata su DISCONNECT.
+ In caso contrario, l'Intervallo di scadenza della sessione sul pacchetto DISCONNECT aggiornerà l'Intervallo di scadenza della sessione corrente.

**Nota**  
I messaggi archiviati in attesa di essere inviati al client al termine di una sessione vengono eliminati; tuttavia, vengono comunque fatturati alla tariffa standard di messaggistica, anche se non è stato possibile inviarli. Per ulteriori informazioni sui prezzi delle prenotazioni, consulta [Prezzi di AWS IoT Core](https://aws.amazon.com/iot-core/pricing). È possibile configurare l'intervallo del tempo di scadenza.

### Riconnessione dopo la scadenza di una sessione persistente
<a name="reconnect-a-persistent-session"></a>

Se un client non si riconnette alla sessione persistente prima della scadenza, la sessione termina e i messaggi archiviati vengono eliminati. Quando un client si riconnette dopo la scadenza della sessione e imposta il flag `cleanSession` su `0`, il servizio crea una nuova sessione persistente. Gli abbonamenti o i messaggi della sessione precedente non sono disponibili per questa sessione perché sono stati scartati alla scadenza della sessione precedente.

### Addebito dei messaggi di sessione persistente
<a name="persistent-session-message-charges"></a>

I messaggi vengono addebitati all'utente Account AWS quando il broker di messaggi invia un messaggio a un cliente o a una sessione persistente offline. Quando un dispositivo offline con una sessione persistente si riconnette e riprende la sessione, i messaggi archiviati vengono recapitati al dispositivo e vengono nuovamente addebitati sul tuo account. Per ulteriori informazioni sui prezzi dei messaggi, consulta [AWS IoT Core pricing - Messagging (Prezzi di Amazon IoT Core - Messaggistica)](https://aws.amazon.com/iot-core/pricing/#Messaging).

Si può aumentare il tempo di scadenza predefinito di un’ora della sessione persistente utilizzando il processo di aumento del limite standard. Si noti che l'aumento del tempo di scadenza della sessione potrebbe aumentare gli addebiti dei messaggi. Infatti, il tempo aggiuntivo potrebbe consentire l'archiviazione di più messaggi per il dispositivo offline e tali messaggi aggiuntivi verranno addebitati all'account alla tariffa di messaggistica standard. Il tempo di scadenza della sessione è approssimativo e una sessione potrebbe persistere fino a 30 minuti più a lungo rispetto al limite dell'account; tuttavia, una sessione non può essere inferiore al limite dell'account. Per ulteriori informazioni sui limiti di sessione, consulta [Service Quotas di AWS](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits).

## Messaggi conservati da MQTT
<a name="mqtt-retain"></a>

AWS IoT Core supporta il `RETAIN` flag descritto nel protocollo MQTT. Quando un client imposta il `RETAIN` flag su un messaggio MQTT che pubblica, AWS IoT Core salva il messaggio. Può quindi essere inviato a nuovi sottoscrittori, recuperato chiamando l'operazione [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html) e visualizzato nella [console AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages).

**Esempi di utilizzo di messaggi conservati da MQTT**
+ 

**Come messaggio di configurazione iniziale**  
I messaggi conservati MQTT vengono inviati a un client dopo che il client si è sottoscritto a un argomento. Se desiderate che tutti i client che sottoscrivono un argomento ricevano il messaggio MQTT conservato subito dopo la sottoscrizione, potete pubblicare un messaggio di configurazione con il flag impostato. `RETAIN` I client sottoscrittori ricevono anche aggiornamenti di tale configurazione ogni volta che viene pubblicato un nuovo messaggio di configurazione.
+ 

**Come ultimo messaggio di stato noto**  
I dispositivi possono impostare il `RETAIN` flag sui messaggi con lo stato attuale in modo da salvarli. AWS IoT Core Quando le applicazioni si connettono o si riconnettono, possono iscriversi a questo argomento e visualizzare l'ultimo stato segnalato subito dopo la sottoscrizione all'argomento del messaggio selezionato. In questo modo possono evitare di dover attendere il prossimo messaggio dal dispositivo per vedere lo stato corrente.

**Topics**
+ [

### Le attività più comuni con MQTT hanno mantenuto i messaggi in AWS IoT Core
](#mqtt-retain-using)
+ [

### Messaggi di fatturazione e conservati
](#mqtt-retain-billing)
+ [

### Confronto tra i messaggi conservati MQTT e le sessioni persistenti MQTT
](#mqtt-retain-persist)
+ [

### MQTT ha mantenuto i messaggi e i Device Shadows AWS IoT
](#mqtt-retain-shadow)

### Le attività più comuni con MQTT hanno mantenuto i messaggi in AWS IoT Core
<a name="mqtt-retain-using"></a>

AWS IoT Core salva i messaggi MQTT con il `RETAIN` flag impostato. Questi *messaggi conservati* vengono inviati a tutti i client che hanno sottoscritto l'argomento, come un normale messaggio MQTT, e vengono archiviati anche per essere inviati ai nuovi sottoscrittori all'argomento.

I messaggi conservati MQTT richiedono azioni di policy specifiche per autorizzare i client ad accedervi. Per esempi di utilizzo di policy dei messaggi conservati, consulta [Esempi di policy per i messaggi conservati](retained-message-policy-examples.md).

Questa sezione descrive le operazioni comuni che comportano messaggi conservati.
+ 

**Creazione di un messaggio conservato**  
Il client determina se un messaggio viene conservato quando pubblica un messaggio MQTT. I client possono impostare il `RETAIN` flag quando pubblicano un messaggio utilizzando un [Device SDK](iot-sdks.md). Le applicazioni e i servizi possono impostare il `RETAIN` flag quando utilizzano l'[`Publish`azione](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html) per pubblicare un messaggio MQTT.

  Viene conservato un solo messaggio per nome argomento. Un nuovo messaggio con il flag RETAIN impostato pubblicato su un argomento sostituisce qualsiasi messaggio conservato esistente inviato all'argomento in precedenza. 
**Nota**  
Non è possibile pubblicare su un [argomento riservato](reserved-topics.md) con il `RETAIN` flag impostato.
+ 

**Iscrizione di un argomento del messaggio conservato**  
I clienti si iscrivono agli argomenti dei messaggi conservati come qualsiasi altro argomento del messaggio MQTT. Il contrassegno è impostato per i messaggi conservati ricevuti mediante sottoscrizione a un argomento riservato`RETAIN`. 

  I messaggi conservati vengono eliminati AWS IoT Core quando un client pubblica un messaggio conservato con un payload di messaggi da 0 byte nell'argomento del messaggio conservato. I client che hanno sottoscritto l'argomento del messaggio conservato riceveranno anche il messaggio da 0 byte.

  La sottoscrizione a un filtro argomento jolly che include un argomento del messaggio conservato consente al client di ricevere messaggi successivi pubblicati sull'argomento del messaggio conservato, ma non recapita il messaggio conservato al momento della sottoscrizione.
**Nota**  
Per ricevere un messaggio conservato al momento della sottoscrizione, il filtro degli argomenti nella richiesta di iscrizione deve corrispondere esattamente all'argomento del messaggio salvato.

  Per i messaggi conservati ricevuti al momento della sottoscrizione a un argomento del messaggio mantenuto è impostato il flag. `RETAIN` I messaggi conservati ricevuti da un cliente abbonato dopo l'abbonamento non lo hanno.
+ 

**Recupero di un messaggio conservato**  
I messaggi conservati vengono recapitati automaticamente ai client quando si sottoscrivono all'argomento con il messaggio conservato. Affinché un cliente riceva il messaggio conservato al momento dell'abbonamento, deve sottoscrivere il nome esatto dell'argomento del messaggio conservato. La sottoscrizione a un filtro argomento jolly che include un argomento del messaggio conservato consente al client di ricevere messaggi successivi pubblicati sull'argomento del messaggio conservato, ma non recapita il messaggio conservato al momento della sottoscrizione.

  I servizi e le app possono elencare e recuperare i messaggi conservati chiamando [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html) e [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html).

  *A un client non viene impedito di pubblicare messaggi su un argomento del messaggio mantenuto senza impostare il contrassegno.* `RETAIN` Ciò potrebbe causare risultati imprevisti, ad esempio il messaggio conservato che non corrisponde al messaggio ricevuto sottoscrivendo l'argomento.

  Con MQTT 5, se in un messaggio conservato l'intervallo di scadenza del messaggio è impostato e il messaggio conservato scade, un nuovo sottoscrittore che effettua la sottoscrizione a quell'argomento non riceverà il messaggio conservato al termine della sottoscrizione.
+ 

**Elenco di argomenti di messaggio conservati**  
È possibile elencare i messaggi conservati chiamando [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html) e i messaggi conservati possono essere visualizzati nella [console AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages). 
+ 

**Ricevere i dettagli del messaggio conservati**  
È possibile ottenere i dettagli del messaggio conservati chiamando [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html) e possono essere visualizzati nella [ console AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages).
+ 

**Conservazione di un messaggio Will**  
I [messaggi *Will*](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag) MQTT che vengono creati quando un dispositivo si connette può essere conservato impostando flag `Will Retain` nel campo `Connect Flag bits`.
+ 

**Eliminazione di un messaggio conservato**  
I dispositivi, le applicazioni e i servizi possono eliminare un messaggio conservato pubblicando un messaggio con il `RETAIN` flag impostato e un payload di messaggi vuoto (0 byte) sul nome dell'argomento del messaggio salvato da eliminare. Tali messaggi eliminano il messaggio conservato AWS IoT Core, vengono inviati ai client abbonati all'argomento, ma non vengono conservati da. AWS IoT Core

  I messaggi conservati possono anche essere eliminati in modo interattivo accedendo al messaggio conservato nella [console AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages). Messaggi conservati che vengono eliminati utilizzando la [console AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages)inviano anche un messaggio a 0 byte ai client che hanno sottoscritto l'argomento del messaggio conservato.

  I messaggi conservati non possono essere ripristinati dopo che sono stati eliminati. Un client dovrebbe pubblicare un nuovo messaggio conservato per sostituire il messaggio eliminato.
+ 

**Debugging e risoluzione dei problemi dei messaggi conservati**  
La [console AWS IoT](https://console.aws.amazon.com//iot/home#) fornisce diversi strumenti per aiutarti a risolvere i problemi dei messaggi conservati:
  + 

**La pagina **[Messaggi conservati](https://console.aws.amazon.com//iot/home#/retainedMessages)****  
La pagina **Messaggi conservati** nella console AWS IoT fornisce un elenco impaginato dei messaggi conservati che sono stati memorizzati dal tuo Account nella regione corrente. In questa pagina, è possibile:
    + Visualizzare i dettagli di ogni messaggio conservato, ad esempio il payload del messaggio, il QoS, l'ora in cui è stato ricevuto.
    + Aggiornare il contenuto di un messaggio conservato.
    + Eliminare un messaggio conservato.
  + 

**Il **[client di test MQTT](https://console.aws.amazon.com//iot/home#/test)****  
La pagina **Client di test MQTT** nella console AWS IoT può iscriversi e pubblicare argomenti MQTT. L'opzione di pubblicazione consente di impostare il flag RETAIN sui messaggi pubblicati per simulare il comportamento dei dispositivi. È inoltre possibile utilizzare il client di test MQTT per monitorare i messaggi provenienti dai client connessi gestiti tramite l'interfaccia delle connessioni client. Per ulteriori informazioni sulla gestione delle connessioni client, vedere[Gestione delle connessioni MQTT](#mqtt-client-disconnect).

  Alcuni risultati imprevisti potrebbero essere il risultato di questi aspetti del modo in cui vengono implementati i messaggi conservati in AWS IoT Core.
  + 

**Limiti di messaggi conservati**  
Quando un account ha archiviato il numero massimo di messaggi conservati, AWS IoT Core restituisce una risposta limitata ai messaggi pubblicati con il set RETAIN e carica più di 0 byte fino a quando alcuni messaggi conservati non vengono eliminati e il numero di messaggi conservati non scende al di sotto del limite.
  + 

**Ordine di consegna dei messaggi conservati**  
La sequenza di messaggi conservati e di recapito del messaggio sottoscritto non è garantita.

### Messaggi di fatturazione e conservati
<a name="mqtt-retain-billing"></a>

[La pubblicazione di messaggi con il `RETAIN` flag impostato da un client, utilizzando la AWS IoT console o chiamando [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html)comporta costi di messaggistica aggiuntivi descritti in Pricing - Messaging.AWS IoT Core](https://aws.amazon.com//iot-core/pricing/#Messaging)

Il recupero dei messaggi conservati da un client, utilizzando la AWS IoT console o tramite chiamata [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html)comporta costi di messaggistica oltre ai normali costi di utilizzo dell'API. I costi aggiuntivi sono descritti nella sezione [Prezzi di AWS IoT Core - Messaggistica](https://aws.amazon.com//iot-core/pricing/#Messaging).

I messaggi [*Will* MQTT](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag) che vengono pubblicati quando un dispositivo si disconnette inaspettatamente comportano i costi di messaggistica descritti in [Prezzi di AWS IoT Core - Messaggistica](https://aws.amazon.com//iot-core/pricing/#Messaging).

Per ulteriori informazioni sui prezzi dei messaggi, consulta la sezione [Prezzi di AWS IoT Core - Messaggistica](https://aws.amazon.com//iot-core/pricing/#Messaging).

### Confronto tra i messaggi conservati MQTT e le sessioni persistenti MQTT
<a name="mqtt-retain-persist"></a>

I messaggi conservati e le sessioni persistenti sono caratteristiche standard di MQTT che consentono ai dispositivi di ricevere messaggi pubblicati mentre erano offline. I messaggi conservati possono essere pubblicati da sessioni persistenti. In questa sezione vengono descritti gli aspetti chiave di queste caratteristiche e come funzionano insieme.


|    |  Messaggi conservati  |  Sessioni persistenti  | 
| --- | --- | --- | 
|  **Caratteristiche principali**  |  I messaggi conservati possono essere utilizzati per configurare o notificare grandi gruppi di dispositivi dopo la connessione. I messaggi conservati possono essere utilizzati anche quando si desidera che i dispositivi ricevano solo l'ultimo messaggio pubblicato su un argomento dopo una riconnessione.  |  Le sessioni persistenti sono utili per i dispositivi con connettività intermittente e potrebbero mancare diversi messaggi importanti. I dispositivi possono connettersi a una sessione persistente per ricevere messaggi inviati mentre sono offline.  | 
|  **Esempi**  |  I messaggi conservati possono fornire informazioni sulla configurazione dei dispositivi sul loro ambiente quando vengono online. La configurazione iniziale potrebbe includere un elenco di altri argomenti di messaggio a cui deve sottoscrivere o informazioni su come configurare il fuso orario locale.  |  I dispositivi che si connettono su una rete cellulare con connettività intermittente potrebbero utilizzare sessioni persistenti per evitare di perdere messaggi importanti inviati mentre un dispositivo è fuori copertura di rete o deve spegnere la radio cellulare.   | 
|  **Messaggi ricevuti durante la sottoscrizione iniziale a un argomento**  |  Dopo aver sottoscritto un argomento con un messaggio conservato, viene ricevuto il messaggio conservato più recente.  |  Dopo aver effettuato la sottoscrizione a un argomento senza un messaggio conservato, non viene ricevuto alcun messaggio finché non viene pubblicato sull'argomento.  | 
|  **Argomenti iscritti dopo la riconnessione**  |  Senza una sessione persistente, il client deve iscriversi agli argomenti dopo la riconnessione.  |  Gli argomenti sottoscritti vengono ripristinati dopo la riconnessione.  | 
|  **Messaggi ricevuti dopo la riconnessione**  |  Dopo aver sottoscritto un argomento con un messaggio conservato, viene ricevuto il messaggio conservato più recente.   |  Tutti i messaggi pubblicati con QOS = 1 e sottoscritti con un QOS =1 mentre il dispositivo è stato disconnesso vengono inviati dopo la riconnessione del dispositivo.  | 
|  **Scadenza della sessione/dati**   |  In MQTT 3, i messaggi conservati non scadono. Sono archiviati fino a quando non vengono sostituiti o eliminati. In MQTT 5, i messaggi conservati scadono dopo l'intervallo di scadenza dei messaggi impostato. Per ulteriori informazioni, consulta [Scadenza dei messaggi](#mqtt5).  |  Le sessioni persistenti scadono se il client non si riconnette entro il periodo di timeout. Dopo la scadenza di una sessione persistente, vengono eliminati gli abbonamenti e i messaggi salvati del client pubblicati con un QOS = 1 e sottoscritti con un QOS =1 mentre il dispositivo è stato disconnesso. I messaggi scaduti non verranno distribuiti. Per ulteriori informazioni sulle scadenze di sessione con sessioni persistenti, consulta [Sessioni persistenti MQTT](#mqtt-persistent-sessions).  | 

Per informazioni sulle sessioni persistenti, consulta [Sessioni persistenti MQTT](#mqtt-persistent-sessions).

Con i messaggi mantenuti, il client di pubblicazione determina se un messaggio deve essere conservato e recapitato a un dispositivo dopo la connessione, indipendentemente dal fatto che abbia avuto una sessione precedente o meno. La scelta di archiviare un messaggio viene effettuata dall'editore e il messaggio archiviato viene recapitato a tutti i client attuali e futuri che sottoscrivono abbonamenti QoS 0 o QoS 1. I messaggi conservati conservano un solo messaggio su un determinato argomento alla volta.

Quando un account ha archiviato il numero massimo di messaggi conservati, AWS IoT Core restituisce una risposta limitata ai messaggi pubblicati con impostazione RETAIN e payload superiori a 0 byte fino a quando alcuni messaggi conservati non vengono eliminati e il conteggio dei messaggi conservati scende al di sotto del limite.

### MQTT ha mantenuto i messaggi e i Device Shadows AWS IoT
<a name="mqtt-retain-shadow"></a>

I messaggi conservati e i Device Shadow conservano entrambi i dati da un dispositivo, ma si comportano in modo diverso e hanno scopi diversi. In questa sezione vengono descritti somiglianze e differenze.


|    |  Messaggi conservati  |  Device Shadow  | 
| --- | --- | --- | 
|  **Il payload del messaggio ha una struttura o uno schema predefinito**  | Come definito dall'implementazione. MQTT non specifica una struttura o uno schema per il payload dei messaggi. |  AWS IoT supporta una struttura di dati specifica.  | 
|  **L'aggiornamento del payload del messaggio genera messaggi di evento**  | La pubblicazione di un messaggio conservato invia il messaggio ai client sottoscritti, ma non genera ulteriori messaggi di aggiornamento. |  L'aggiornamento di un Device Shadow produce [messaggi di aggiornamento che descrivono la modifica](https://docs.aws.amazon.com//iot/latest/developerguide/device-shadow-mqtt.html#update-delta-pub-sub-topic).  | 
|  **Gli aggiornamenti dei messaggi sono numerati**  | I messaggi conservati non vengono numerati automaticamente. | I documenti Device Shadow hanno numeri di versione e timestamp automatici. | 
|  **Il payload dei messaggi è collegato a una risorsa oggetto**  | I messaggi conservati non sono allegati a una risorsa oggetto. |  I Device Shadow Device Shadow sono collegati a una risorsa oggetto.  | 
|  **Aggiornamento di singoli elementi del payload del messaggio**  |  I singoli elementi del messaggio non possono essere modificati senza aggiornare l'intero payload del messaggio.  |  I singoli elementi di un documento Device Shadow possono essere aggiornati senza dover aggiornare l'intero documento Device Shadow.  | 
|  **Il client riceve i dati dei messaggi al momento dell'sottoscrizione**  |  Il client riceve automaticamente un messaggio conservato dopo aver sottoscritto un argomento con un messaggio conservato.  |  I client possono iscriversi agli aggiornamenti Device Shadow, ma devono richiedere deliberatamente lo stato corrente.  | 
|  **Indicizzazione e ricercabilità**  |  I messaggi conservati non sono indicizzati per la ricerca.  |  L'indicizzazione del parco istanze indicizza i dati di Device Shadow per la ricerca e l'aggregazione.  | 

## Messaggi MQTT Last Will and Testament (LWT)
<a name="mqtt-lwt"></a>

Last Will and Testament (LWT) è una funzionalità di MQTT. Con LWT, i clienti possono specificare un messaggio che il broker pubblicherà su un argomento definito dal client e invierà a tutti i client che hanno sottoscritto l'argomento quando si verifica una disconnessione non iniziata. Il messaggio specificato dai client è chiamato messaggio LWT o messaggio Will e l'argomento definito dai client viene definito argomento Will. Puoi specificare un messaggio LWT quando un dispositivo si connette al broker. Questi messaggi possono essere conservati impostando il flag `Will Retain` nel campo `Connect Flag bits` durante la connessione. Ad esempio, se il flag `Will Retain` è impostato su `1`, un messaggio Will verrà archiviato nel broker nell’argomento Will associato. Per ulteriori informazioni, consulta [Messaggi Will](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc479576982).

Quando gestisci le connessioni client, puoi controllare se i messaggi LWT vengono pubblicati quando disconnetti un client. Per ulteriori informazioni, consulta [Gestione delle connessioni MQTT](#mqtt-client-disconnect).

Il broker memorizzerà i messaggi Will fino a quando non si verificherà una disconnessione non avviata. Quando ciò accade, il broker pubblicherà i messaggi a tutti i clienti che si sono iscritti all’argomento Will per notificare la disconnessione. Se il client si disconnette dal broker con una disconnessione avviata dal client utilizzando il messaggio MQTT DISCONNECT, il broker non pubblicherà i messaggi LWT memorizzati. In tutti gli altri casi, i messaggi LWT verranno inviati. A causa della natura asincrona dell'elaborazione delle disconnessioni, non è garantito che i messaggi LWT vengano inviati in ordine durante la riconnessione. Si consiglia di utilizzare gli eventi del [ciclo di vita per migliorare l'accuratezza del rilevamento dello stato di connettività, poiché questi eventi](life-cycle-events.md) forniscono attributi come timestamp e numeri di versione per gestire gli eventi. out-of-order Per un elenco completo degli scenari di disconnessione in cui il broker invierà i messaggi LWT, vedi[Eventi di connessione/disconnessione](https://docs.aws.amazon.com//iot/latest/developerguide/life-cycle-events.html#connect-disconnect).

## Utilizzo degli Attributi Connect
<a name="connect-attribute"></a>

`ConnectAttributes` consentono di specificare quali attributi si desidera utilizzare nel messaggio di connessione delle policy IAM, ad esempio `PersistentConnect` e `LastWill`. Con `ConnectAttributes`, puoi creare criteri che non consentono ai dispositivi di accedere alle nuove funzionalità per impostazione predefinita, cosa che può essere utile in caso di compromissione di un dispositivo.

`connectAttributes` supporta le caratteristiche seguenti:

`PersistentConnect`  
Utilizzo del `PersistentConnect` per salvare tutte le sottoscrizioni che il client effettua durante la connessione quando essa viene interrotta tra il client e il broker.

`LastWill`  
Utilizzo del `LastWill` per pubblicare un messaggio nel `LastWillTopic` quando un client si disconnette in modo imprevisto.

Per impostazione predefinita, la policy dispone di una connessione non persistente e non esistono attributi passati per questa connessione. È necessario specificare una connessione permanente nella policy IAM se si desidera averne una.

Quando si gestiscono le connessioni client, è possibile visualizzare gli attributi di connessione e la configurazione della sessione per i client connessi. Per ulteriori informazioni, consulta [Gestione delle connessioni MQTT](#mqtt-client-disconnect).

Per esempi di `ConnectAttributes`, consulta [Esempi di policy di connessione](connect-policy.md).

## Caratteristiche supportate da MQTT 5
<a name="mqtt5"></a>

AWS IoT Core il supporto per MQTT 5 si basa sulla [specifica MQTT v5.0](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html) con alcune differenze, come documentato in. [AWS IoT differenze rispetto alle specifiche MQTT](#mqtt-differences)

**Topics**
+ [

### Abbonamenti condivisi
](#mqtt5-shared-subscription)
+ [

### Avvio pulito e scadenza della sessione
](#mqtt5-clean-start)
+ [

### Codice motivo su tutti ACKs
](#mqtt5-reason-code)
+ [

### Alias degli argomenti
](#mqtt5-topic-alias)
+ [

### Scadenza del messaggio
](#mqtt5-message-expiry)
+ [

### Altre caratteristiche MQTT 5
](#mqtt5-other-features)

### Abbonamenti condivisi
<a name="mqtt5-shared-subscription"></a>

AWS IoT Core supporta sottoscrizioni condivise sia per MQTT 3.1.1 che per MQTT 5. Gli abbonamenti condivisi consentono a più client di condividere un abbonamento a un argomento e solo un client riceverà i messaggi pubblicati su quell'argomento utilizzando una distribuzione casuale. Le sottoscrizioni condivise possono bilanciare efficacemente il carico dei messaggi MQTT tra più abbonati. Ad esempio, si supponga di avere 1.000 dispositivi che pubblicano sullo stesso argomento e 10 applicazioni di back-end che elaborano tali messaggi. In tal caso, le applicazioni di backend possono sottoscrivere lo stesso argomento e ognuna riceverà in modo casuale i messaggi pubblicati dai dispositivi sull'argomento condiviso. Questo consente effettivamente di "condividere" il carico di tali messaggi. Le sottoscrizioni condivise consentono inoltre una migliore resilienza. Quando un'applicazione di back-end si disconnette, il broker distribuisce il carico agli abbonati rimanenti nel gruppo. Quando tutti gli abbonati si disconnettono, i messaggi vengono messi in coda.

Le funzionalità di accodamento dei messaggi sono disponibili per gli abbonamenti condivisi su entrambe le connessioni MQTT 3.1.1 e MQTT 5 per migliorare l'affidabilità della consegna dei messaggi.

[Per utilizzare gli abbonamenti condivisi, i clienti sottoscrivono il filtro degli argomenti di un abbonamento condiviso nel modo seguente:](https://docs.aws.amazon.com//iot/latest/developerguide/topics.html#topicfilters)

```
$share/{ShareName}/{TopicFilter}
```
+ `$share` è una stringa letterale per indicare il filtro di argomenti di una Sottoscrizione condivisa, che deve iniziare con `$share`.
+ `{ShareName}` è una stringa di caratteri per specificare il nome condiviso utilizzato da un gruppo di abbonati. Il filtro per argomenti di un abbonamento condiviso deve contenere un `ShareName` ed essere seguito dal `/` carattere. Il `{ShareName}` non deve includere i seguenti caratteri: `/`, `+` o`#`. La dimensione massima per `{ShareName}` è di 128 caratteri UTF-8. 
+ `{TopicFilter}`segue la stessa sintassi del [filtro degli argomenti](https://docs.aws.amazon.com//iot/latest/developerguide/topics.html#topicfilters) di un abbonamento non condiviso. La dimensione massima per `{TopicFilter}` è di 256 caratteri UTF-8.
+ Le due barre obbligatorie (`/`) per `$share/{ShareName}/{TopicFilter}` non sono incluse nel limite [Numero massimo di barre negli argomenti e nel filtro argomenti](https://console.aws.amazon.com/servicequotas/home/services/iotcore/quotas/L-AD5A8D4F). 

Le sottoscrizioni uguali `{ShareName}/{TopicFilter}` appartengono allo stesso gruppo di sottoscrizioni condiviso. Puoi creare più gruppi di abbonamenti condivisi e non superare il limite di [sottoscrizioni condivise per gruppo](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Per ulteriori informazioni, consulta [Endpoint e quote di AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) nella *Documentazione generale di riferimento di AWS *.

Le tabelle seguenti confrontano le sottoscrizioni non condivise e le sottoscrizioni condivise:


****  

| Subscription | Description | Esempi di filtro di argomenti | 
| --- | --- | --- | 
| Sottoscrizioni non condivise | Ogni client crea una sottoscrizione separata per ricevere i messaggi pubblicati. Quando un messaggio viene pubblicato su un argomento, tutti gli abbonati a tale argomento ricevono una copia del messaggio. | <pre>sports/tennis<br />sports/#</pre> | 
| Abbonamenti condivisi | Più client possono condividere una sottoscrizione a un argomento e solo un client riceverà i messaggi pubblicati su tale argomento utilizzando una distribuzione casuale. |  <pre>$share/consumer/sports/tennis<br />$share/consumer/sports/#</pre>  | 


****  

| Flusso di sottoscrizioni non condivise  | Flusso di sottoscrizioni condivise | 
| --- | --- | 
|  ![\[Abbonamenti regolari per MQTT 3 e MQTT 5 pollici. AWS IoT Core\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/mqtt_regular_subscription.gif)  |  ![\[Abbonamenti condivisi per MQTT 3 e MQTT 5 in. AWS IoT Core\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/mqtt_shared_subscription.gif)  | 

**Note importanti per l'utilizzo degli abbonamenti condivisi**
+ Se il gruppo di sottoscrittori condiviso è composto da sottoscrittori di sessione persistenti, quando tutti gli abbonati del gruppo condiviso sono disconnessi o se alcuni sottoscrittori violano il limite di richieste di pubblicazione al secondo per connessione, tutti i messaggi QoS 1 non riconosciuti e i messaggi QoS 1 non consegnati pubblicati su un gruppo di sottoscrizioni condiviso verranno messi in coda. Per ulteriori [informazioni](#mqtt5-shared-subscription-message-queuing), consulta Accodamento dei messaggi relativi alle sottoscrizioni condivise.
+ I messaggi QoS 0 pubblicati su un gruppo di sottoscrizioni condiviso verranno eliminati in caso di errore.
+ Le sottoscrizioni condivise non ricevono [messaggi conservati](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html#mqtt-retain) quando si sottoscrivono modelli di argomenti come parte di un gruppo di abbonati condiviso. I messaggi pubblicati su argomenti con sottoscrittori condivisi e con il `RETAIN` flag impostato vengono recapitati agli abbonati condivisi come qualsiasi altro messaggio di pubblicazione.
+ Quando le sottoscrizioni condivise contengono caratteri jolly (\$1 o \$1), potrebbero esserci più sottoscrizioni condivise corrispondenti a un argomento. In tal caso, il broker di messaggi copia il messaggio di pubblicazione e lo invia a un client casuale in ogni abbonamento condiviso corrispondente. Il comportamento jolly degli abbonamenti condivisi può essere spiegato nel diagramma seguente.  
![\[Abbonamenti condivisi con caratteri jolly in. AWS IoT Core\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/mqtt_shared_subscriptions_wildcard.gif)

  In questo esempio, ci sono tre sottoscrizioni condivise corrispondenti all'argomento MQTT di pubblicazione. `sports/tennis` Il broker di messaggi copia il messaggio pubblicato e lo invia a un client casuale in ciascun gruppo corrispondente.

  Client 1 e client 2 condividono la sottoscrizione: `$share/consumer1/sports/tennis`

  Client 3 e client 4 condividono la sottoscrizione: `$share/consumer1/sports/#`

  Client 5 e client 6 condividono la sottoscrizione: `$share/consumer2/sports/tennis`

*Per ulteriori informazioni sui limiti delle sottoscrizioni condivise, consulta [AWS IoT Core endpoint e quote](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) nel General Reference.AWS * [Per testare gli abbonamenti condivisi utilizzando il client AWS IoT MQTT nella console, vedere.AWS IoT](https://console.aws.amazon.com/iot/home) [Test delle sottoscrizioni condivise nel client MQTT](view-mqtt-messages.md#view-mqtt-shared-subscriptions) È inoltre possibile visualizzare a quali argomenti sono abbonati i client connessi, incluse le sottoscrizioni condivise, utilizzando le funzionalità di gestione della connessione client. Per ulteriori informazioni, consulta [Gestione delle connessioni MQTT](#mqtt-client-disconnect). Per ulteriori informazioni sugli abbonamenti condivisi, vedere Sottoscrizioni [condivise della specifica](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901250) 2.0. MQTTv5

#### Abbonamenti condivisi, accodamento dei messaggi
<a name="mqtt5-shared-subscription-message-queuing"></a>

Per migliorare l'affidabilità della consegna dei messaggi, gli abbonamenti condivisi includono funzionalità di accodamento dei messaggi che archiviano i messaggi quando non sono disponibili abbonati online. Quando un gruppo di sottoscrizioni condiviso contiene almeno un membro con una sessione persistente, la funzionalità di accodamento è abilitata per il gruppo. Quando si distribuiscono messaggi, i membri online vengono selezionati come destinatari. I messaggi QoS 1 vengono messi in coda quando nessun membro viene trovato online o quando gli abbonati superano il limite. [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits) I messaggi in coda vengono recapitati quando i membri esistenti riprendono le sessioni permanenti o nuovi membri si uniscono al gruppo. I messaggi in coda vengono recapitati fino a 20 messaggi in coda al secondo per abbonato attivo del gruppo, insieme a tutti gli altri messaggi recapitati all'abbonato in base agli abbonamenti.

Per impostazione predefinita, la conservazione dei messaggi in coda segue la quota. [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits) Tuttavia, se nel messaggio di pubblicazione in entrata è impostato un MEI (Message Expiry Interval), il MEI ha la precedenza. Quando è presente, il MEI determina il periodo di conservazione dei messaggi, indipendentemente dal periodo di scadenza della sessione persistente.

Le velocità di coda dei messaggi sono limitate in base alla [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits)quota e il numero di messaggi è limitato dalla quota. [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits) Per visualizzare e gestire le quote, accedi alla console [Service Quotas](https://console.aws.amazon.com/servicequotas/home).

Puoi monitorare la coda CloudWatch effettuando una ricerca nello spazio dei `ApproximateQueueDepth` `AWS/Usage` nomi oppure puoi utilizzare il seguente comando CLI per elencare le metriche associate alla profondità della coda di ogni gruppo di sottoscrizioni condiviso. 

```
aws cloudwatch list-metrics --namespace "AWS/Usage" --dimensions Name=Resource,Value='ApproximateQueueDepth'
```

Quando questi limiti vengono superati, vengono conservati solo i messaggi che erano già in coda prima di raggiungere il limite. I nuovi messaggi in arrivo che supererebbero i limiti vengono eliminati. Il sistema non sostituisce i vecchi messaggi in coda con quelli più recenti.

L'accodamento dei messaggi viene registrato in metriche e registri. CloudWatch CloudWatch Per informazioni sulle voci scritte in CloudWatch and CloudWatch Logs, vedere e. [Parametri del broker di messaggi](metrics_dimensions.md#message-broker-metrics) [Voce di log Queued](cwl-format.md#log-mb-queued) I messaggi in coda vengono comunque fatturati alla tariffa di messaggistica standard. Per ulteriori informazioni sui prezzi delle prenotazioni, consulta [Prezzi di AWS IoT Core](https://aws.amazon.com/iot-core/pricing).

**Ciclo di vita della sessione in un gruppo di sottoscrizioni condiviso**

Quando una sessione pulita si iscrive a un gruppo, diventa un membro online del gruppo. Quando annulla l'iscrizione o si disconnette, la sessione pulita abbandona il gruppo.

Quando una sessione persistente si iscrive a un gruppo, diventa un membro online del gruppo. Quando si disconnette, rimane comunque nel gruppo, ma ne diventa un membro offline. Quando si riconnette, diventa nuovamente un membro online. La sessione persistente lascia il gruppo quando annulla esplicitamente l'iscrizione o quando scade dopo la disconnessione.

### Avvio pulito e scadenza della sessione
<a name="mqtt5-clean-start"></a>

È possibile utilizzare Avvio pulito e Scadenza della sessione per gestire le sessioni persistenti con maggiore flessibilità. Un flag Avvio pulito indica se la sessione deve iniziare senza utilizzare una sessione esistente. Un intervallo di scadenza della sessione indica per quanto tempo mantenere la sessione dopo una disconnessione. L'intervallo di scadenza della sessione può essere modificato al momento della disconnessione. Per ulteriori informazioni, consulta [Sessioni persistenti MQTT](#mqtt-persistent-sessions).

### Codice motivo su tutti ACKs
<a name="mqtt5-reason-code"></a>

È possibile eseguire il debug o elaborare i messaggi di errore più facilmente utilizzando i codici motivo. I codici motivo vengono restituiti dal broker di messaggi in base al tipo di interazione con il broker (sottoscrizione, pubblicazione, conferma). Per ulteriori informazioni, consulta [Codici motivo MQTT](#mqtt5-reason-codes). Per un elenco completo dei codici motivo MQTT, consulta [Specifiche MQTT v5](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901031).

### Alias degli argomenti
<a name="mqtt5-topic-alias"></a>

È possibile sostituire un nome argomento con un alias argomento, che è un numero intero a due byte. L'utilizzo degli alias degli argomenti può ottimizzare la trasmissione dei nomi degli argomenti per ridurre potenzialmente i costi dei dati sui servizi di dati misurati. AWS IoT Core ha un limite predefinito di 8 alias tematici. Per ulteriori informazioni, consulta [Endpoint e quote di AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) nella *Documentazione generale di riferimento di AWS *.

### Scadenza del messaggio
<a name="mqtt5-message-expiry"></a>

È possibile aggiungere valori di scadenza del messaggio ai messaggi pubblicati. Questi valori rappresentano l'intervallo di scadenza dei messaggi (MEI) in secondi. Se i messaggi non sono stati inviati ai sottoscrittori entro tale intervallo, il messaggio scadrà e verrà rimosso. Se non si imposta il valore di scadenza del messaggio, il messaggio non scadrà.

In uscita, il sottoscrittore riceverà un messaggio con il tempo rimanente nell'intervallo di scadenza. Ad esempio, se per un messaggio di pubblicazione in entrata è impostata una scadenza del messaggio di 30 secondi e il messaggio viene instradato al sottoscrittore dopo 20 secondi, il campo di scadenza del messaggio verrà aggiornato a 10. È possibile che il messaggio ricevuto dal sottoscrittore abbia un MEI aggiornato pari a 0. Questo perché non appena il tempo rimanente è pari o inferiore a 999 ms, verrà aggiornato a 0.

In AWS IoT Core, il MEI minimo è 1. Se l'intervallo è impostato su 0 dal lato client, verrà modificato su 1. L'intervallo massimo di scadenza del messaggio è 604800 (7 giorni). Qualsiasi valore superiore a questo verrà modificato nel valore massimo.

Nella comunicazione tra versioni, il comportamento della scadenza del messaggio viene deciso dalla versione MQTT del messaggio di pubblicazione in entrata. Ad esempio, un messaggio con scadenza inviato da una sessione connessa tramite MQTT5 può scadere per i dispositivi abbonati alle sessioni. MQTT3 Nella tabella seguente viene elencato in che modo la scadenza del messaggio supporta i seguenti tipi di messaggi di pubblicazione:


****  

| Tipo di messaggio di pubblicazione | Message Expiry Interval | 
| --- | --- | 
| Pubblicazione regolare | Se un server non riesce a recapitare il messaggio entro il tempo specificato, il messaggio scaduto verrà rimosso e non verrà ricevuto dal sottoscrittore. Ciò include situazioni come quando un dispositivo non effettua il back-up dei messaggi QoS 1.  | 
| Mantenimento | Se un messaggio conservato scade e un nuovo client effettua la sottoscrizione all'argomento, il client non riceverà il messaggio al momento della sottoscrizione. | 
| Conclusivo | L'intervallo per i messaggi conclusivi inizia dopo che il client si disconnette e il server tenta di distribuire il messaggio conclusivo ai suoi sottoscrittori. | 
| Messaggi in coda | Se un QoS 1 in uscita con intervallo di scadenza dei messaggi scade quando un client è offline, dopo [la ripresa della sessione persistente, il](#mqtt-persistent-sessions) client non riceverà il messaggio scaduto. | 

### Altre caratteristiche MQTT 5
<a name="mqtt5-other-features"></a>

**Disconnessione server**

Quando si verifica una disconnessione, il server può inviare in modo proattivo al client un messaggio DISCONNECT per segnalare la chiusura della connessione con un codice motivo della disconnessione.

**Richiesta/Risposta**

Gli autori possono richiedere che il destinatario invii una risposta a un argomento specificato dall'autore al momento della ricezione.

**Dimensione massima del pacchetto**

Client e server possono specificare in modo indipendente la dimensione massima dei pacchetti supportati.

**Formato payload e tipo di contenuto**

È possibile specificare il formato payload (binario, testo) e il tipo di contenuto quando viene pubblicato un messaggio. Questi dati vengono inoltrati al destinatario del messaggio.

## Proprietà MQTT 5
<a name="mqtt5-properties"></a>

Le proprietà MQTT 5 sono importanti aggiunte allo standard MQTT per supportare nuove funzionalità MQTT 5 come Session Expiry e il pattern. Request/Response In AWS IoT Core, è possibile creare [regole](https://docs.aws.amazon.com//iot/latest/developerguide/republish-rule-action.html) in grado di inoltrare le proprietà nei messaggi in uscita o utilizzare [HTTP Publish per pubblicare](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html) messaggi MQTT con alcune delle nuove proprietà.

Nella tabella seguente sono elencate tutte le proprietà MQTT 5 supportate. AWS IoT Core 


| Proprietà | Description | Tipo di input | Pacchetto | 
| --- | --- | --- | --- | 
| Payload Format Indicator | Un valore booleano che indica se il payload è formattato come UTF-8. | Byte | PUBLISH, CONNECT | 
| Content Type | Una stringa UTF-8 che descrive il contenuto del payload. | Stringa UTF-8 | PUBLISH, CONNECT | 
| Response Topic | Una stringa UTF-8 che descrive l'argomento su cui il destinatario deve pubblicare come parte del flusso di richiesta-risposta. L'argomento non deve contenere caratteri jolly. | Stringa UTF-8 | PUBLISH, CONNECT | 
| Correlation Data | Dati binari utilizzati dal mittente del messaggio di richiesta per identificare a quale richiesta è destinato il messaggio di risposta. | Binario | PUBLISH, CONNECT | 
| User Property | Una coppia di stringhe UTF-8. Questa proprietà può essere visualizzata più volte in un pacchetto. I destinatari riceveranno le coppie chiave-valore nello stesso ordine in cui vengono inviate. | Una coppia di stringhe UTF-8 | CONNECT, PUBLISH, Will Properties, SUBSCRIBE, DISCONNECT, UNSUBSCRIBE | 
| Message Expiry Interval | Un numero intero a 4 byte che rappresenta l'intervallo di scadenza del messaggio in secondi. Se assente, il messaggio non scade. | Numero intero a 4 byte | PUBLISH, CONNECT | 
| Session Expiry Interval |  Un numero intero a 4 byte che rappresenta l'intervallo di scadenza della sessione in secondi. AWS IoT Core supporta un massimo di 7 giorni, con un massimo predefinito di un'ora. Se il valore impostato supera il valore massimo del tuo account, AWS IoT Core restituirà il valore corretto nel CONNACK.  | Numero intero a 4 byte | CONNECT, CONNACK, DISCONNECT | 
| Assigned Client Identifier | Un ID client casuale generato da AWS IoT Core quando un ID client non è specificato dai dispositivi. L'ID cliente casuale deve essere un nuovo identificatore del cliente che non viene utilizzato da nessun'altra sessione attualmente gestita dal broker. | Stringa UTF-8 | CONNACK | 
| Server Keep Alive | Un numero intero a 2 byte che rappresenta il tempo keep alive assegnato dal server. Il server eseguirà la disconnessione del client se il client è inattivo per un periodo superiore al tempo keep alive. | Numero intero a 2 byte | CONNACK | 
| Request Problem Information | Un valore booleano che indica se la Reason String o User Properties vengono inviate in caso di errori. | Byte | CONNECT | 
| Receive Maximum | Un numero intero a 2 byte che rappresenta il numero massimo di pacchetti PUBLISH QOS > 0 che possono essere inviati senza ricevere un PUBACK. | Numero intero a 2 byte | CONNECT, CONNACK | 
| Topic Alias Maximum | Questo valore indica il valore massimo che verrà accettato come un alias argomento. Il valore predefinito è 0. | Numero intero a 2 byte | CONNECT, CONNACK | 
| Maximum QoS | Il valore massimo di QoS supportato. AWS IoT Core L'impostazione predefinita è 1. AWS IoT Core non supporta QoS 2. | Byte | CONNACK | 
| Retain Available |  Un valore booleano che indica se il broker di messaggi supporta i AWS IoT Core messaggi conservati. Il valore di default è 1.  | Byte | CONNACK | 
| Maximum Packet Size | La dimensione massima del pacchetto che AWS IoT Core accetta e invia. Non può superare i 128 KB. | Numero intero a 4 byte | CONNECT, CONNACK | 
| Wildcard Subscription Available |  Un valore booleano che indica se il broker di AWS IoT Core messaggi supporta Wildcard Subscription Available. Il valore di default è 1.  | Byte | CONNACK | 
| Subscription Identifier Available |  Un valore booleano che indica se il broker di AWS IoT Core messaggi supporta Subscription Identifier Available. Il valore predefinito è 0.  | Byte | CONNACK | 

## Codici motivo MQTT
<a name="mqtt5-reason-codes"></a>

MQTT 5 introduce una migliore segnalazione degli errori con risposte al codice motivo. AWS IoT Core può restituire i codici causali inclusi, a titolo esemplificativo ma non esaustivo, i seguenti raggruppati per pacchetti. Per un elenco completo dei codici motivo supportati da MQTT 5, consulta [Specifiche MQTT v5](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901031).


**Codici motivo CONNACK**  

| Valore | Hex | Nome del codice motivo | Description | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Completato | La connessione è accettata. | 
| 128 | 0x80 | Unspecified error (Errore non specificato) | Il server non desidera rivelare il motivo dell'errore o nessuno degli altri codici motivo è valido. | 
| 133 | 0x85 | Client Identifier not valid (Identificatore client non valido) | L'identificatore client è una stringa valida ma non è consentito dal server. | 
| 134 | 0x86 | Bad User Name or Password (Nome utente o password errati) | Il server non accetta il nome utente o la password specificati dal client. | 
| 135 | 0x87 | Not authorized (Non autorizzato) | Il client non è autorizzato a connettersi. | 
| 144 | 0x90 | Topic Name invalid (Nome argomento non valido) | Il formato del nome argomento conclusivo è corretto ma non è accettato dal server. | 
| 151 | 0x97 | Quota superata | È stato superato un limite imposto di implementazione o amministrativo. | 
| 155 | 0x9B | QoS not supported (QoS non supportato) | Il server non supporta il QoS impostato in Will QoS. | 


**Codici motivo PUBACK**  

| Valore | Hex | Nome del codice motivo | Description | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Completato | Il messaggio è accettato. La pubblicazione del messaggio QoS 1 avanza. | 
| 128 | 0x80 | Unspecified error (Errore non specificato) | Il ricevitore non accetta la pubblicazione, ma non vuole rivelare il motivo o questo non corrisponde a uno degli altri valori. | 
| 135 | 0x87 | Not authorized (Non autorizzato) | Il PUBLISH non è autorizzato. | 
| 144 | 0x90 | Topic Name invalid (Nome argomento non valido) | Il nome dell'argomento non è malformato, ma non è accettato dal client o dal server. | 
| 145 | 0x91 | Packet identifier in use (Identificatore pacchetto in uso) | L'identificatore pacchetto è già in uso. Ciò potrebbe indicare una mancata corrispondenza nello stato della sessione tra il client e il server. | 
| 151 | 0x97 | Quota superata | È stato superato un limite imposto di implementazione o amministrativo. | 


**Codici motivo DISCONNECT**  

| Valore | Hex | Nome del codice motivo | Description | 
| --- | --- | --- | --- | 
| 129 | 0x81 | Malformed Packet (Pacchetto non conforme) | Il pacchetto ricevuto non è conforme a questa specifica. | 
| 130 | 0x82 | Protocol Error (Errore di protocollo) | È stato ricevuto un pacchetto imprevisto o non in ordine. | 
| 135 | 0x87 | Not authorized (Non autorizzato) | La richiesta non è autorizzata. | 
| 139 | 0x8B | Server shutting down (Arresto del server) | Il server è in fase di arresto. | 
| 141 | 0x8D | Keep Alive timeout (Timeout Keep Alive) | La connessione è stata chiusa perché non è stato ricevuto alcun pacchetto per 1,5 volte il tempo Keep Alive. | 
| 142 | 0x8E | Session taken over (Sessione acquisita) | Un'altra connessione che utilizza lo stesso ClientID è stata connessa, causando la chiusura di questa connessione. | 
| 143 | 0x8F | Topic Filter invalid (Filtro argomenti non valido) | Il formato del filtro argomenti è corretto ma non è accettato dal server. | 
| 144 | 0x90 | Topic Name invalid (Nome argomento non valido) | Il formato del nome argomento è corretto ma non è accettato da questo client o dal server. | 
| 147 | 0x93 | Receive Maximum exceeded (Ricezione massima superata) | Il client o il server hanno ricevuto più della pubblicazione Receive Maximum (Ricezione massima) per la quale non hanno inviato PUBACK o PUBCOMP. | 
| 148 | 0x94 | Topic Alias invalid (Alias argomento non valido) | Il client o il server hanno ricevuto un pacchetto PUBLISH contenente un alias argomento maggiore dell'alias argomento massimo che ha inviato nel pacchetto CONNECT o CONNACK. | 
| 151 | 0x97 | Quota superata | È stato superato un limite imposto di implementazione o amministrativo. | 
| 152 | 0x98 | Administrative action (Operazione amministrativa) | La connessione viene chiusa a causa di un'operazione amministrativa. | 
| 155 | 0x9B | QoS not supported (QoS non supportato) | Il client ha specificato un QoS maggiore del QoS specificato in un QoS massimo in CONNACK. | 
| 161 | 0xA1 | Subscription Identifiers not supported (Identificatori sottoscrizione non supportati) | Il server non supporta gli identificatori sottoscrizione; la sottoscrizione non è accettata. | 


**Codici motivo SUBACK**  

| Valore | Hex | Nome del codice motivo | Description | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Granted QoS 0 (QoS concesso 0) | La sottoscrizione è accettata e il QoS massimo inviato sarà QoS 0. Potrebbe essere un QoS inferiore a quello richiesto. | 
| 1 | 0x01 | Granted QoS 1 (QoS concesso 1) | La sottoscrizione è accettata e il QoS massimo inviato sarà QoS 1. Potrebbe essere un QoS inferiore a quello richiesto. | 
| 128 | 0x80 | Unspecified error (Errore non specificato) | La sottoscrizione non è accettata e il server non desidera rivelare il motivo o nessuno degli altri codici motivo è valido. | 
| 135 | 0x87 | Not authorized (Non autorizzato) | Il client non è autorizzato a effettuare questa sottoscrizione. | 
| 143 | 0x8F | Topic Filter invalid (Filtro argomenti non valido) | Il formato del filtro argomenti è corretto ma non è consentito per questo client. | 
| 145 | 0x91 | Packet Identifier in use (Identificatore pacchetto in uso) | L'identificatore pacchetto specificato è già in uso. | 
| 151 | 0x97 | Quota superata | È stato superato un limite imposto di implementazione o amministrativo. | 


**Codici motivo UNSUBACK**  

| Valore | Hex | Nome del codice motivo | Description | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Completato | La sottoscrizione viene eliminata. | 
| 128 | 0x80 | Unspecified error (Errore non specificato) | L'annullamento della sottoscrizione non può essere completata e il server non desidera rivelare il motivo o nessuno degli altri codici motivo è valido. | 
| 143 | 0x8F | Topic Filter invalid (Filtro argomenti non valido) | Il formato del filtro argomenti è corretto ma non è consentito per questo client. | 
| 145 | 0x91 | Packet Identifier in use (Identificatore pacchetto in uso) | L'identificatore pacchetto specificato è già in uso. | 

## AWS IoT differenze rispetto alle specifiche MQTT
<a name="mqtt-differences"></a>

L'implementazione del broker di messaggi è basata sulla [specifica MQTT v3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) e la [specifica MQTT v5.0](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html) ma è diversa dalle specifiche per quanto riguarda le considerazioni seguenti:
+ AWS IoT non supporta i seguenti pacchetti per MQTT 3: PUBREC, PUBREL e PUBCOMP.
+ AWS IoT non supporta i seguenti pacchetti per MQTT 5: PUBREC, PUBREL, PUBCOMP e AUTH.
+ AWS IoT non supporta il reindirizzamento del server MQTT 5.
+ AWS IoT supporta solo i livelli di qualità del servizio (QoS) MQTT 0 e 1. AWS IoT non supporta la pubblicazione o l'abbonamento con QoS di livello 2. Il broker di messaggi non invia un messaggio PUBACK o SUBACK quando è richiesto un livello QoS 2.
+ In AWS IoT, la sottoscrizione a un argomento con livello QoS 0 significa che un messaggio viene recapitato zero o più volte. È possibile che un messaggio venga recapitato più di una volta. I messaggi recapitati più di una volta potrebbero essere inviati con un ID pacchetto diverso. In questi casi, il flag DUP non è impostato.
+ Nel rispondere a una richiesta di connessione, il broker di messaggi invia un messaggio CONNACK. Questo messaggio contiene un flag per indicare se la connessione sta riprendendo una sessione precedente.
+ Prima di inviare pacchetti di controllo aggiuntivi o una richiesta di disconnessione, il client deve attendere che broker di messaggi di AWS IoT riceva il messaggio CONNACK.
+ Quando un client sottoscrive un argomento, può verificarsi un ritardo tra il momento in cui il broker di messaggi invia un messaggio SUBACK e il momento in cui il client inizia a ricevere nuovi messaggi corrispondenti.
+ Quando un client utilizza il carattere jolly `#` nel filtro argomento per sottoscrivere un argomento, tutte le stringhe al livello e al di sotto del livello nella gerarchia degli argomenti vengono abbinate. Tuttavia, l'argomento principale non è corrispondente. Ad esempio, una sottoscrizione all'argomento `sensor/#` riceve messaggi pubblicati sugli argomenti `sensor/`, `sensor/temperature`, `sensor/temperature/room1`, ma non messaggi pubblicati su `sensor`. Per ulteriori informazioni sull'utilizzo di caratteri jolly, vedi [Filtri per i nomi degli argomenti](topics.md#topicfilters).
+ Il broker di messaggi usa l'ID client per identificare ogni client. L'ID client viene passato dal client al broker di messaggi come parte del payload MQTT. Due client con lo stesso ID client non possono essere connessi contemporaneamente al broker di messaggi. Quando un client si connette al broker di messaggi tramite un ID client usato da un altro client, viene accettata la connessione del nuovo client e il client connesso in precedenza viene disconnesso. È inoltre possibile disconnettere manualmente i client utilizzando. APIs Per ulteriori informazioni, consulta [Gestione delle connessioni MQTT](#mqtt-client-disconnect).
+ In rari casi, il broker di messaggi può inviare di nuovo lo stesso messaggio PUBLISH logico con un ID pacchetto diverso.
+ La sottoscrizione ai filtri degli argomenti che contengono un carattere jolly non può ricevere messaggi conservati. Per ricevere un messaggio conservato, la richiesta di sottoscrizione deve contenere un filtro argomento che corrisponda esattamente all'argomento del messaggio conservato.
+ Il broker di messaggi non garantisce l'ordine di ricezione dei messaggi e delle conferme.
+ AWS IoT può avere limiti diversi dalle specifiche. Per ulteriori informazioni, consulta [quote e limiti del broker di messaggistica e del protocollo AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits) nella *Guida di riferimento di AWS IoT *.
+ Il flag MQTT DUP non è supportato.

## Gestione delle connessioni MQTT
<a name="mqtt-client-disconnect"></a>

AWS IoT Core fornisce APIs assistenza nella gestione delle connessioni MQTT, inclusa la possibilità di disconnettere i client e gestirne le sessioni. Queste funzionalità offrono un maggiore controllo sulla flotta di AWS IoT clienti e aiutano a risolvere i problemi di connessione.

### DeleteConnection API
<a name="delete-connection-api"></a>

Utilizzate l'`DeleteConnection`API per disconnettere i dispositivi MQTT AWS IoT Core specificando il relativo client. IDs Quando disconnetti un client, lo AWS IoT Core disconnette dal broker di messaggi e, facoltativamente, puoi pulire lo stato della sessione e sopprimere il AWS IoT Core messaggio Last Will and Testament (LWT).

Quando chiami l'`DeleteConnection`API, AWS IoT Core esegue diverse azioni per garantire una disconnessione pulita. AWS IoT Core invia innanzitutto un messaggio di disconnessione MQTT al client per terminare la sessione MQTT. Il servizio chiude quindi il socket sottostante. TCP/TLS 

Il broker di messaggi invia un `DISCONNECT` pacchetto al dispositivo e pubblica un [evento del ciclo](life-cycle-events.md) di vita con il motivo della disconnessione. `API_INITIATED_DISCONNECT` Ciò consente di identificare quando una disconnessione è stata avviata tramite l'API anziché dal client o a causa di problemi di rete. È possibile monitorare questi eventi per scopi di visibilità, risoluzione dei problemi e controllo. Ad esempio, è possibile utilizzare AWS IoT regole per elaborare questi eventi per tenere traccia di quando e perché i client sono stati disconnessi.

Se si imposta il `cleanSession` parametro su`true`, AWS IoT Core rimuove lo stato della sessione del client, inclusi tutti gli abbonamenti e i messaggi in coda. Se si pulisce una sessione, la sessione persistente viene interrotta. Se il client era una sessione persistente e il `preventWillMessage` parametro è impostato su`false`, il servizio invia il messaggio LWT, se disponibile, utile durante le operazioni di manutenzione pianificate.

Quando si chiama l'`DeleteConnection`API, il processo di disconnessione inizia immediatamente, ma il momento esatto in cui il client riconosce la disconnessione può variare in base alle condizioni della rete e all'implementazione del client. La maggior parte dei client rileva la disconnessione entro pochi secondi, ma in alcuni casi con una connettività di rete scadente, il client potrebbe impiegare più tempo a riconoscere che è stata disconnessa.

**Nota**  
Forzando la disconnessione, un client deve autenticarsi nuovamente e autorizzarsi nuovamente con un nuovo stato di sessione. La chiamata API di per sé non impedisce la riconnessione dei client. Se lo si desidera, è inoltre necessario modificare le credenziali o la politica di un client prima di emettere la `DeleteConnection` chiamata API.

Per informazioni sui prezzi, consultare [Prezzi di AWS IoT Core](https://aws.amazon.com/iot-core/pricing/).

#### Casi d’uso
<a name="delete-connection-use-cases"></a>

L'`DeleteConnection`API è utile per gestire i client che si comportano male e che presentano comportamenti problematici o consumano risorse eccessive. Forzando la disconnessione, puoi assicurarti che i client ristabiliscano le connessioni con l'autenticazione e l'autorizzazione corrette, il che può aiutare a risolvere i problemi di consumo di risorse.

Anche gli scenari di reindirizzamento dei client traggono vantaggio da questa API. Quando devi reindirizzare i client su diversi endpoint oppure Regioni AWS puoi disconnetterli a livello di codice e farli ricollegare a un altro endpoint modificando le impostazioni DNS. AWS IoT Core Questa API può aiutare a risolvere connessioni bloccate o eliminare stati di sessione problematici che potrebbero impedire il normale funzionamento.

#### Parametri dell'API
<a name="delete-connection-parameters"></a>

L'`DeleteConnection`API accetta i seguenti parametri:

ClientID (obbligatorio)  
L'identificatore univoco del client MQTT da disconnettere. Questo è specificato nel percorso URL. L'ID client non può iniziare con il simbolo del dollaro (\$1).  
Il client MQTT IDs può contenere caratteri non validi nelle richieste HTTP. Quando si utilizza l'`DeleteConnection`API, è necessario codificare l'URL (codifica in percentuale) tutti i caratteri dell'ID client validi in MQTT ma non in HTTP. Ciò include caratteri speciali come spazi, barre (/) e caratteri UTF-8. Ad esempio, uno spazio diventa %20, una barra in avanti diventa %2F e il carattere UTF-8 ü diventa %C 3% BC. La codifica corretta garantisce che il client IDs MQTT venga trasmesso correttamente nella chiamata API basata su HTTP.

CleanSession (opzionale)  
Specifica se rimuovere lo stato della sessione del client durante la disconnessione. Imposta su per `true` eliminare tutte le informazioni sulla sessione, incluse le sottoscrizioni e i messaggi in coda. Impostato per `false` preservare lo stato della sessione. Per impostazione predefinita, è impostato su `false` (mantiene lo stato della sessione). Per le sessioni pulite questo parametro verrà ignorato.

preventWillMessage (facoltativo)  
Controlla se AWS IoT Core invia il messaggio Last Will and Testament (LWT), se disponibile, al momento della disconnessione. Impostato per impedire l'invio del `true` messaggio LWT. Impostato per consentire l'`false`invio. Per impostazione predefinita, è impostato su `false` (invia LWT se disponibile).

#### Sintassi dell'API
<a name="delete-connection-syntax"></a>

L'`DeleteConnection`API utilizza il seguente formato di richiesta HTTP:

```
DELETE /connections/<clientId>?cleanSession=<cleanSession>&preventWillMessage=<preventWillMessage> HTTP/1.1
```

Richieste di esempio:

```
// Basic disconnect (preserves session, allows LWT message)
DELETE /connections/myDevice123 HTTP/1.1

// Disconnect and clear session
DELETE /connections/myDevice123?cleanSession=TRUE HTTP/1.1

// Disconnect, clear session, and prevent LWT message
DELETE /connections/myDevice123?cleanSession=TRUE&preventWillMessage=TRUE HTTP/1.1
```

Le richieste riuscite restituiscono HTTP 200 OK senza corpo di risposta.

**Nota**  
Il nome del servizio utilizzato da [AWS Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) per firmare le richieste è: *iotdevicegateway*. Puoi trovare il tuo endpoint usando il comando. `aws iot describe-endpoint --endpoint-type iot:Data-ATS`

#### Autorizzazioni richieste
<a name="delete-connection-permissions"></a>

Per utilizzare l'`DeleteConnection`API, è necessaria la seguente autorizzazione IAM:

```
iot:DeleteConnection
```

Puoi estendere questa autorizzazione a un cliente specifico IDs utilizzando politiche basate sulle risorse. Esempio:

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:DeleteConnection",
            "Resource": "arn:aws:iot:region:account:client/myDevice*"
        }
    ]
}
```

#### Considerazioni importanti
<a name="delete-connection-considerations"></a>

I client disconnessi possono tentare immediatamente di riconnettersi a meno che non sia stata implementata una logica aggiuntiva per impedire la riconnessione. L'operazione di disconnessione termina solo la connessione corrente e non impedisce la riconnessione di una connessione. Se devi impedire la riconnessione, prendi in considerazione l'implementazione della logica lato client o la disabilitazione delle credenziali di un dispositivo.

I limiti di velocità si applicano all'API come parte della limitazione di velocità standard dell'API. AWS IoT Core Quando pianifichi operazioni di disconnessione in blocco, assicurati di tenere conto di questi limiti e di implementare una logica di ripetizione dei tentativi e strategie di batch appropriate per evitare limitazioni. Per ulteriori informazioni, consulta [Endpoint e quote per AWS IoT Core](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#message-broker-limits).

#### Risposte agli errori
<a name="delete-connection-errors"></a>

L'`DeleteConnection`API può restituire le seguenti risposte di errore:

InvalidRequestException  
La richiesta non è valida. Ciò può verificarsi se il formato dell'ID client non è valido, contiene un prefisso con il simbolo del dollaro (\$1) o se mancano i parametri obbligatori.

ResourceNotFoundException  
L'ID client specificato non esiste o non è attualmente connesso e non dispone di una sessione persistente.

UnauthorizedException  
Non hai le autorizzazioni necessarie per eseguire questa operazione. Assicurati di disporre dell'`iot:DeleteConnection`autorizzazione richiesta.

ForbiddenException  
Il chiamante non è autorizzato a effettuare la richiesta. Ciò potrebbe verificarsi a causa di autorizzazioni IAM insufficienti o di restrizioni politiche basate sulle risorse.

ThrottlingException  
La velocità supera il limite. Riduci la frequenza delle chiamate API e implementa una logica di riprova appropriata con backoff esponenziale.

InternalFailureException  
Si è verificato un errore imprevisto. Riprova la richiesta dopo un breve ritardo.

ServiceUnavailableException  
Il servizio è temporaneamente non disponibile. Riprova la richiesta dopo un breve ritardo.

# Pubblicazione HTTPS
<a name="http"></a>

I client possono pubblicare messaggi effettuando richieste all'API REST utilizzando i protocolli HTTP 1.0 o 1.1. Per l'autenticazione e i mapping delle porte utilizzati dalle richieste HTTP, consulta [Protocolli, mappature delle porte e autenticazione](protocols.md#protocol-mapping).

**Nota**  
A differenza di MQTT, HTTPS non supporta un valore `clientId`. `clientId` è disponibile quando si utilizza MQTT, ma non è disponibile quando si utilizza HTTPS.

## URL del messaggio HTTPS
<a name="httpurl"></a>

I dispositivi e i client pubblicano i loro messaggi attraverso richieste POST a un endpoint specifico del client e a un URL specifico dell'argomento:

```
https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
```
+  *IoT\$1data\$1endpoint*è l'[endpoint dei dati AWS IoT del dispositivo](iot-connect-devices.md#iot-connect-device-endpoints). È possibile trovare l'endpoint nella AWS IoT console nella pagina dei dettagli dell'oggetto o sul client utilizzando il AWS CLI comando: 

  ```
  aws iot describe-endpoint --endpoint-type iot:Data-ATS
  ```

   L'endpoint dovrebbe assomigliare a questo: `a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com` 
+ *url\$1encoded\$1topic\$1name*è il [nome completo dell'argomento](topics.md#topicnames) del messaggio inviato.

## Esempi di codice di messaggio HTTPS
<a name="codeexample"></a>

Questi sono alcuni esempi di come inviare un messaggio HTTPS a AWS IoT.

------
#### [ Python (port 8443) ]

```
import requests
import argparse

# define command-line parameters
parser = argparse.ArgumentParser(description="Send messages through an HTTPS connection.")
parser.add_argument('--endpoint', required=True, help="Your AWS IoT data custom endpoint, not including a port. " +
                                                      "Ex: \"abcdEXAMPLExyz-ats.iot.us-east-1.amazonaws.com\"")
parser.add_argument('--cert', required=True, help="File path to your client certificate, in PEM format.")
parser.add_argument('--key', required=True, help="File path to your private key, in PEM format.")
parser.add_argument('--topic', required=True, default="test/topic", help="Topic to publish messages to.")
parser.add_argument('--message', default="Hello World!", help="Message to publish. " +
                                                      "Specify empty string to publish nothing.")

# parse and load command-line parameter values
args = parser.parse_args()

# create and format values for HTTPS request
publish_url = 'https://' + args.endpoint + ':8443/topics/' + args.topic + '?qos=1'
publish_msg = args.message.encode('utf-8')

# make request
publish = requests.request('POST',
            publish_url,
            data=publish_msg,
            cert=[args.cert, args.key])

# print results
print("Response status: ", str(publish.status_code))
if publish.status_code == 200:
        print("Response body:", publish.text)
```

------
#### [ Python (port 443) ]

```
import requests
import http.client
import json
import ssl

ssl_context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT)
ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2

# note the use of ALPN
ssl_context.set_alpn_protocols(["x-amzn-http-ca"])
ssl_context.load_verify_locations(cafile="./<root_certificate>")

# update the certificate and the AWS endpoint
ssl_context.load_cert_chain("./<certificate_in_PEM_Format>", "<private_key_in_PEM_format>")
connection = http.client.HTTPSConnection('<the ats IoT endpoint>', 443, context=ssl_context)
message = {'data': 'Hello, I'm using TLS Client authentication!'}
json_data = json.dumps(message)
connection.request('POST', '/topics/device%2Fmessage?qos=1', json_data)

# make request
response = connection.getresponse()

# print results
print(response.read().decode())
```

------
#### [ CURL ]

Per utilizzare [curl](https://curl.haxx.se) per inviare un messaggio da un client o da un dispositivo a AWS IoT.

**Per usare curl per inviare un messaggio da un dispositivo AWS IoT client**

1. Controlla la versione **curl**.

   1. Sul client, eseguire questo comando al prompt dei comandi.

      **curl --help**

      Nel testo della guida, cercare le opzioni TLS. Viene visualizzata l'opzione `--tlsv1.2`.

   1. Se viene visualizzata l'opzione `--tlsv1.2`, continuare.

   1. Se non visualizzi l'opzione `--tlsv1.2` o ricevi un errore `command not found`, aggiorna o installa curl sul client o installa `openssl` prima di continuare.

1. Installare i certificati sul client.

   Copia i file di certificato che hai creato quando hai registrato il tuo client (cosa) nella AWS IoT console. Assicurarsi di disporre di questi tre file di certificato sul client prima di continuare.
   + Il file del certificato CA (*Amazon-root-CA-1.pem* in questo esempio).
   + File di certificato del client (*device.pem.crt* in questo esempio).
   + Il file della chiave privata del client (*private.pem.key* in questo esempio).

1. Crea la riga di comando **curl**, sostituendo i valori sostituibili per quelli dell'account e del sistema.

   ```
   curl --tlsv1.2 \
       --cacert Amazon-root-CA-1.pem \
       --cert device.pem.crt \
       --key private.pem.key \
       --request POST \
       --data "{ \"message\": \"Hello, world\" }" \
       "https://IoT_data_endpoint:8443/topics/topic?qos=1"
   ```  
--tlsv1.2  
Utilizza TLS 1.2 (SSL).  
--cacert *Amazon-root-CA-1.pem*  
Il nome del file e il percorso, se necessario, del certificato CA per verificare il peer.  
--certificato *device.pem.crt*  
Il nome e il percorso del file del certificato del client, se necessario.  
--chiave *private.pem.key*  
Il nome e il percorso del file della chiave privata del client, se necessario.  
--request POST  
Il tipo di richiesta HTTP (in questo caso POST).  
--dati "» *\$1 \$1"message\$1": \$1"Hello, world\$1" \$1*  
Dati HTTP POST che vuoi pubblicare. In questo caso, è una stringa JSON, con le virgolette interne precedute da un carattere di escape barra rovesciata (\$1).  
«https: *IoT\$1data\$1endpoint* //8443/topics/? *topic* qos=1"  
L'URL dell'endpoint di dati del AWS IoT dispositivo del client, seguito dalla porta HTTPS`:8443`, seguita dalla parola chiave `/topics/` e dal nome dell'argomento, in questo caso. `topic` Specifica la qualità del servizio come parametro di query, `?qos=1`.

1. Apri il client di test MQTT nella AWS IoT console.

   Segui le istruzioni [Visualizza i messaggi MQTT con il AWS IoT client MQTT](view-mqtt-messages.md) e configura la console per sottoscrivere i messaggi con il nome dell'argomento *topic* usato nel **curl** comando oppure usa il filtro wildcard per gli argomenti di. `#`

1. Testare il comando.

   Durante il monitoraggio dell'argomento nel client di test della console AWS IoT , andare al client ed emettere la riga di comando curl creata nel passaggio 3. Nella console vengono visualizzati i messaggi del client.

------

# Argomenti MQTT
<a name="topics"></a>

Gli argomenti MQTT identificano i AWS IoT messaggi. AWS IoT i client identificano i messaggi che pubblicano assegnando ai messaggi i nomi degli argomenti. I client identificano i messaggi a cui si desidera effettuare la sottoscrizione (ricevere) registrando un filtro argomento con AWS IoT Core. Il broker di messaggi usa nomi e filtri argomento per instradare messaggi dai client di pubblicazione ai client di sottoscrizione.

Il broker di messaggi utilizza argomenti per identificare messaggi inviati tramite MQTT e inviati tramite HTTP a [URL del messaggio HTTPS](http.md#httpurl).

Sebbene AWS IoT supporti alcuni [argomenti di sistema riservati](reserved-topics.md), la maggior parte degli argomenti MQTT viene creata e gestita dall'utente, il progettista del sistema. AWS IoT utilizza gli argomenti per identificare i messaggi ricevuti dai client di pubblicazione e selezionare i messaggi da inviare ai client abbonati, come descritto nelle sezioni seguenti. Prima di creare uno spazio dei nomi degli argomenti per il sistema, esaminare le caratteristiche degli argomenti MQTT per creare la gerarchia dei nomi degli argomenti più adatta al sistema IoT.

## Nomi argomento
<a name="topicnames"></a>

I nomi degli argomenti e i filtri degli argomenti sono stringhe codificate in UTF-8. Possono rappresentare una gerarchia di informazioni utilizzando il carattere barra (/) per separare i livelli della gerarchia. Ad esempio, il nome di questo argomento potrebbe riferirsi a un sensore di temperatura nella stanza 1:
+ `sensor/temperature/room1`

In questo esempio, potrebbero esserci altri tipi di sensori in altre stanze con nomi di argomenti come:
+ `sensor/temperature/room2`
+ `sensor/humidity/room1`
+ `sensor/humidity/room2`

**Nota**  
Considerando i nomi degli argomenti per i messaggi nel sistema, tieni presente:  
I nomi degli argomenti e i filtri degli argomenti distinguono tra maiuscole e minuscole.
I nomi degli argomenti non devono contenere informazioni di identificazione personale.
I nomi degli argomenti che iniziano con \$1 sono [argomenti riservati](reserved-topics.md)che possono essere utilizzati solo da AWS IoT Core.
AWS IoT Core non posso inviare o ricevere messaggi tra Account AWS s o regioni.

Per ulteriori informazioni sulla progettazione dei nomi degli argomenti e dello spazio dei nomi, consulta il nostro whitepaper [Progettazione di argomenti MQTT per AWS IoT Core](https://docs.aws.amazon.com/whitepapers/latest/designing-mqtt-topics-aws-iot-core/designing-mqtt-topics-aws-iot-core.html).

Per esempi di come le app possono pubblicare e sottoscrivere messaggi, inizia con [Guida introduttiva ai AWS IoT Core tutorial](iot-gs.md) e [AWS IoT Client per dispositivi SDKs SDKs, dispositivi mobili e AWS IoT dispositivi mobili](iot-sdks.md).

**Importante**  
Lo spazio dei nomi degli argomenti è limitato a una regione Account AWS and. Ad esempio, l'`sensor/temp/room1`argomento utilizzato da una Account AWS regione è distinto dall'`sensor/temp/room1`argomento utilizzato dallo stesso AWS account in un'altra regione o utilizzato da qualsiasi altro Account AWS in qualsiasi regione.

## Topic ARN (ARN argomento)
<a name="topicnames-arn"></a>

Tutti gli argomenti ARNs (Amazon Resource Names) hanno il seguente formato:

```
arn:aws:iot:aws-region:AWS-account-ID:topic/Topic
```

Ad esempio `arn:aws:iot:us-west-2:123EXAMPLE456:topic/application/topic/device/sensor` è un ARN per l'argomento ` application/topic/device/sensor`.

## Filtri per i nomi degli argomenti
<a name="topicfilters"></a>

I clienti abbonati registrano i filtri dei nomi degli argomenti con il broker di messaggi per specificare gli argomenti dei messaggi che il broker dei messaggi deve inviare loro. Un filtro per i nomi di argomento può essere un singolo nome di argomento per sottoscrivere un singolo nome di argomento oppure può includere caratteri jolly per sottoscrivere più nomi di argomento contemporaneamente.

I client di pubblicazione non possono utilizzare caratteri jolly nei nomi degli argomenti che pubblicano. 

Nella tabella seguente sono elencati i caratteri jolly che possono essere utilizzati in un filtro argomento. 


**Caratteri jolly per gli argomenti**  

| Carattere jolly. | Corrispondenze | Note | 
| --- | --- | --- | 
| \$1 | Tutte le stringhe al livello e al di sotto del livello nella gerarchia degli argomenti. |  Deve essere l'ultimo carattere nel filtro argomento.  Deve essere l'unico carattere nel suo livello della gerarchia degli argomenti. Può essere utilizzato in un filtro argomento che contiene anche il carattere jolly \$1.  | 
| \$1 | Qualsiasi stringa nel livello che contiene il carattere. |  Deve essere l'unico carattere nel suo livello della gerarchia degli argomenti. Può essere utilizzato in più livelli di un filtro argomento.  | 

Utilizzo di caratteri jolly con gli esempi di nomi dell'argomento del sensore precedenti:
+ Una sottoscrizione di `sensor/#` riceve i messaggi pubblicati in `sensor/`, `sensor/temperature` e `sensor/temperature/room1`, ma non i messaggi pubblicati in `sensor`. 
+ Una sottoscrizione a `sensor/+/room1` riceve i messaggi pubblicati a `sensor/temperature/room1` e `sensor/humidity/room1`, ma non messaggi inviati a `sensor/temperature/room2` o `sensor/humidity/room2`.

### ARN del filtro argomenti
<a name="topicfilters-arn"></a>

Il filtro per tutti gli argomenti ARNs (Amazon Resource Names) ha la seguente forma:

```
arn:aws:iot:aws-region:AWS-account-ID:topicfilter/TopicFilter
```

Ad esempio, `arn:aws:iot:us-west-2:123EXAMPLE456:topicfilter/application/topic/+/sensor` è un ARN per il filtro argomento` application/topic/+/sensor`.

# Payload del messaggio MQTT
<a name="topicdata"></a>

Il payload dei messaggi che viene inviato nei tuoi messaggi MQTT non è specificato da AWS IoT, a meno che non sia per uno dei. [Argomenti riservati](reserved-topics.md) Per soddisfare le esigenze della tua applicazione, ti consigliamo di definire il payload dei messaggi per gli argomenti entro i vincoli di [AWS IoT Core Service Quotas per i protocolli](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-protocol-limits). 

L'utilizzo di un formato JSON per il payload dei messaggi consente al motore di AWS IoT regole di analizzare i messaggi e applicare ad essi query SQL. Se l'applicazione non richiede che il motore delle regole applichi query SQL ai payload dei messaggi, è possibile utilizzare qualsiasi formato di dati richiesto dall'applicazione. Per informazioni sulle limitazioni e sui caratteri riservati in un documento JSON utilizzato nelle query SQL, consulta [Estensioni JSON](iot-sql-json.md). 

Per ulteriori informazioni sulla progettazione degli argomenti MQTT e dei relativi payload dei messaggi, consulta [Progettazione di argomenti MQTT per AWS IoT Core](https://docs.aws.amazon.com/whitepapers/latest/designing-mqtt-topics-aws-iot-core/designing-mqtt-topics-aws-iot-core.html).

Se un limite di dimensioni del messaggio supera le quote di servizio, restituirà un `CLIENT_ERROR` con motivo `PAYLOAD_LIMIT_EXCEEDED` e il messaggio "Message payload exceeds size limit for message type" ("Il payload del messaggio supera il limite di dimensione per il tipo di messaggio"). Per ulteriori informazioni sul limite delle dimensioni dei messaggi, consulta la sezione [Limiti e quote del broker di messaggi AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits.html).

# Argomenti riservati
<a name="reserved-topics"></a>

Gli argomenti che iniziano con il simbolo del dollaro (\$1) sono riservati a AWS IoT. È possibile effettuare la sottoscrizione e la pubblicazione di questi argomenti riservati, tuttavia non è possibile creare nuovi argomenti che inizino con il simbolo del dollaro. Le operazioni di pubblicazione o sottoscrizione non supportate di argomenti riservati possono causare la chiusura della connessione.

## Argomenti del modello di asset
<a name="reserved-topics-other"></a>


| Topic | Operazioni client consentite | Description | 
| --- | --- | --- | 
|  \$1 aws/sitewise/asset -models/ /assets/ *assetModelId* /properties/ *assetId* *propertyId*  |  Subscribe  |  AWS IoT SiteWise pubblica notifiche sulle proprietà degli asset relative a questo argomento. Per ulteriori informazioni, consulta [Interazione con altri AWS servizi nella Guida](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/interact-with-other-services.html) per l'*AWS IoT SiteWise utente*.  | 

## AWS IoT Device Defender argomenti
<a name="reserved-topics-device-defender"></a>

Questi messaggi supportano i buffer di risposta in formato Concise Binary Object Representation (CBOR) e JavaScript Object Notation (JSON), a seconda dell'argomento. *payload-format* AWS IoT Device Defender gli argomenti supportano solo la pubblicazione in formato MQTT.


| *payload-format* | Tipo di dati del formato della risposta | 
| --- | --- | 
| cbor | Concise Binary Object Representation (CBOR) | 
| json | JavaScript Notazione di oggetti (JSON) | 

Per ulteriori informazioni, consulta [Invio di metriche dai dispositivi](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/detect-device-side-metrics.html#DetectMetricsMessages).


| Topic | Operazioni consentite | Description | 
| --- | --- | --- | 
|  \$1aws/things/ *thingName* /defender/metrics/ *payload-format*  |  Pubblica  |  AWS IoT Device Defender gli agenti pubblicano le metriche relative a questo argomento. Per ulteriori informazioni, consulta [Invio di metriche dai dispositivi](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/detect-device-side-metrics.html#DetectMetricsMessages).   | 
|  \$1aws/things/ /defender/metrics/ /accepted *thingName* *payload-format*  |  Subscribe  |  AWS IoT viene pubblicato su questo argomento dopo che un agente ha pubblicato con successo un messaggio su \$1aws/things/ /defender/metrics/. AWS IoT Device Defender *thingName* *payload-format* Per ulteriori informazioni[, consulta](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/detect-device-side-metrics.html#DetectMetricsMessages) Invio di metriche dai dispositivi.   | 
|  \$1aws/things/ /defender/metrics/ /rejected *thingName* *payload-format*  |  Subscribe  |  AWS IoT viene pubblicato su questo argomento dopo che un agente ha pubblicato un messaggio non riuscito su \$1aws/things/ /defender/metrics/. AWS IoT Device Defender *thingName* *payload-format* Per ulteriori informazioni[, consulta](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/detect-device-side-metrics.html#DetectMetricsMessages) Invio di metriche dai dispositivi.   | 

## AWS IoT Core Argomenti sulla posizione dei dispositivi
<a name="reserved-topics-device-location"></a>

AWS IoT Core Device Location può risolvere i dati di misurazione dal dispositivo e fornire una posizione stimata dei dispositivi IoT. I dati di misurazione del dispositivo possono includere GNSS, Wi-Fi, rete cellulare e indirizzo IP. AWS IoT Core Device Location sceglie quindi il tipo di misurazione che offre la massima precisione e risolve le informazioni sulla posizione del dispositivo. Per ulteriori informazioni, consultare [AWS IoT Core Ubicazione del dispositivo](device-location.md) e [Risoluzione della posizione del dispositivo utilizzando gli argomenti MQTT di AWS IoT Core Device Location](device-location-reserved-topics.md).


| Topic | Operazioni consentite | Description | 
| --- | --- | --- | 
|  \$1aws/device\$1location/ /get\$1position\$1estimate *customer\$1device\$1id*  |  Pubblica  |  Un dispositivo pubblica su questo argomento per ottenere i dati di misurazione grezzi scansionati da risolvere tramite Device Location. AWS IoT Core   | 
|  \$1aws/device\$1location/ /get\$1position\$1estimate/accepted *customer\$1device\$1id*  |  Subscribe  |  AWS IoT Core Device Location viene pubblicato su questo argomento dopo aver risolto correttamente la posizione del dispositivo.  | 
|  \$1aws/device\$1location/ /get\$1position\$1estimate/rejected *customer\$1device\$1id*  |  Subscribe  |  AWS IoT Core Device Location viene pubblicato su questo argomento quando non è in grado di risolvere correttamente la posizione del dispositivo a causa di errori 4xx.  | 

## Argomenti di eventi
<a name="reserved-topics-event"></a>

I messaggi relativi agli eventi vengono pubblicati quando si verificano determinati eventi. Ad esempio, vengono generati eventi dal registro quando vengono aggiunti, aggiornati o eliminati oggetti. La tabella mostra i vari AWS IoT eventi e i relativi argomenti riservati.


| Topic | Operazioni client consentite | Description | 
| --- | --- | --- | 
|  \$1aws/events/certificates/registered/*caCertificateId*  |  Subscribe  |  AWS IoT pubblica questo messaggio quando registra AWS IoT automaticamente un certificato e quando un client presenta un certificato con lo `PENDING_ACTIVATION` stato. Per ulteriori informazioni, consulta [Configurare la prima connessione da parte di un client per la registrazione automatica](auto-register-device-cert.md#configure-auto-reg-first-connect).  | 
|  \$1/aws/events/job/annullato *jobID*  |  Subscribe  | AWS IoT pubblica questo messaggio quando un lavoro viene annullato. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
| \$1//cancellazione\$1in corso aws/events/job jobID |  Subscribe  | AWS IoT pubblica questo messaggio quando è in corso l'annullamento di un lavoro. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
|  \$1aws/events/job//completato *jobID*  |  Subscribe  | AWS IoT pubblica questo messaggio quando un lavoro è completato. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
| \$1aws/events/job//cancellato jobID |  Subscribe  | AWS IoT pubblica questo messaggio quando viene eliminato un lavoro. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
| \$1aws/events/job/jobID/deletion\$1in\$1progress |  Subscribe  | AWS IoT pubblica questo messaggio quando è in corso l'eliminazione di un lavoro. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/annullato |  Subscribe  | AWS IoT pubblica questo messaggio quando l'esecuzione di un lavoro viene annullata. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
| \$1//eliminato aws/events/jobExecution jobID |  Subscribe  | AWS IoT pubblica questo messaggio quando viene eliminata l'esecuzione di un lavoro. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/non riuscito |  Subscribe  | AWS IoT pubblica questo messaggio quando l'esecuzione di un lavoro non è riuscita. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
| \$1aws/events/jobExecution//rifiutato jobID |  Subscribe  | AWS IoT pubblica questo messaggio quando l'esecuzione di un lavoro è stata rifiutata. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
| \$1aws/events/jobExecution//rimosso jobID |  Subscribe  | AWS IoT pubblica questo messaggio quando è stata rimossa l'esecuzione di un lavoro. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
| \$1aws/events/jobExecution//riuscito jobID |  Subscribe  | AWS IoT pubblica questo messaggio quando l'esecuzione di un lavoro è riuscita. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
| \$1//timed\$1out aws/events/jobExecution jobID |  Subscribe  | AWS IoT pubblica questo messaggio quando scade il timeout dell'esecuzione di un job. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md). | 
|  \$1aws/events/presence/connected/*clientId*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando un client MQTT con l'ID client specificato si connette a. AWS IoT Per ulteriori informazioni, consulta [Eventi di connessione/disconnessione](life-cycle-events.md#connect-disconnect).  | 
|  \$1aws/events/presence/disconnected/*clientId*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando un client MQTT con l'ID client specificato si disconnette a. AWS IoT Per ulteriori informazioni, consulta [Eventi di connessione/disconnessione](life-cycle-events.md#connect-disconnect).   | 
|  \$1aws/events/subscriptions/subscribed/*clientId*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando un client MQTT con l'ID client specificato sottoscrive un argomento MQTT. Per ulteriori informazioni, consulta [Eventi di sottoscrizione/annullamento della sottoscrizione](life-cycle-events.md#subscribe-unsubscribe-events).  | 
|  \$1aws/events/subscriptions/unsubscribed/*clientId*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando un client MQTT con l'ID client specificato annulla l'iscrizione a un argomento MQTT. Per ulteriori informazioni, consulta [Eventi di sottoscrizione/annullamento della sottoscrizione](life-cycle-events.md#subscribe-unsubscribe-events).  | 
|  \$1//creato aws/events/thing *thingName*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando l'*thingName*oggetto viene creato. Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).  | 
|  \$1aws/events/thing//aggiornato *thingName*  |  Subscribe  |  AWS IoT viene pubblicato su questo argomento quando l'*thingName*elemento viene aggiornato. Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).  | 
|  \$1aws/events/thing//eliminato *thingName*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando l'*thingName*elemento viene eliminato. Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).  | 
|  \$1aws/events/thingGroup//created *thingGroupName*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando viene creato il gruppo di oggetti*thingGroupName*. Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).  | 
|  \$1aws/events/thingGroup//aggiornato *thingGroupName*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando il gruppo di cose *thingGroupName* viene aggiornato. Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).  | 
|  \$1aws/events/thingGroup//eliminato *thingGroupName*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando il gruppo di oggetti *thingGroupName* viene eliminato. Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).  | 
|  \$1aws/events/thingType//created *thingTypeName*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando viene creato il tipo di *thingTypeName* oggetto. Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).  | 
|  \$1aws/events/thingType//aggiornato *thingTypeName*  |  Subscribe  |  AWS IoT viene pubblicato su questo argomento quando il tipo di *thingTypeName* oggetto viene aggiornato. Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).  | 
|  \$1aws/events/thingType//eliminato *thingTypeName*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando il tipo di *thingTypeName* oggetto viene eliminato. Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).  | 
|  \$1aws/events/thingTypeAssociation/thing/*thingName*/*thingTypeName*  |  Subscribe  |  AWS IoT pubblica su questo argomento quando l'oggetto *thingName* è associato o dissociato dal tipo di oggetto. *thingTypeName* Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).  | 
|  \$1aws/events/thingGroupMembership/thingGroup//thing/ /added *thingGroupName* *thingName*  |  Subscribe  |   AWS IoT pubblica su questo argomento quando un oggetto *thingName* viene aggiunto al gruppo di oggetti. *thingGroupName* Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).   | 
|  \$1aws/events/thingGroupMembership/thingGroup//thing/ *thingGroupName* /rimosso *thingName*  |  Subscribe  |   AWS IoT pubblica su questo argomento quando un oggetto *thingName* viene rimosso dal gruppo di oggetti. *thingGroupName* Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).   | 
|   \$1aws/events/thingGroupHierarchy/thingGroup/*parentThingGroupName*childThingGroup//aggiunto *childThingGroupName*  |  Subscribe  |   AWS IoT pubblica su questo argomento quando il gruppo di oggetti *childThingGroupName* viene aggiunto al gruppo di oggetti. *parentThingGroupName* Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).   | 
|   \$1aws/events/thingGroupHierarchy/thingGroup/*parentThingGroupName*childThingGroup//rimosso *childThingGroupName*  |  Subscribe  |   AWS IoT pubblica su questo argomento quando il gruppo di oggetti *childThingGroupName* viene rimosso dal gruppo di oggetti. *parentThingGroupName* Per ulteriori informazioni, consulta [Eventi del registro](registry-events.md).   | 

## Argomenti relativi al provisioning del parco istanze
<a name="reserved-topics-fleet"></a>

**Nota**  
Le operazioni client contrassegnate come **Receive** in questa tabella indicano gli argomenti che vengono AWS IoT pubblicati direttamente sul client che li ha richiesti, indipendentemente dal fatto che il client abbia sottoscritto l'argomento o meno. I clienti dovrebbero aspettarsi di ricevere questi messaggi di risposta anche se non si sono abbonati a loro. Questi messaggi di risposta non passano attraverso il broker di messaggi e non possono essere sottoscritti da altri client o regole.

Questi messaggi supportano i buffer di risposta in formato Concise Binary Object Representation (CBOR) e JavaScript Object Notation (JSON), a seconda dell'argomento. *payload-format*


| *payload-format* | Tipo di dati del formato della risposta | 
| --- | --- | 
| cbor | Concise Binary Object Representation (CBOR) | 
| json | JavaScript Notazione di oggetti (JSON) | 

Per ulteriori informazioni, consulta [API MQTT di provisioning del dispositivo](fleet-provision-api.md).


| Topic | Operazioni client consentite | Description | 
| --- | --- | --- | 
|  \$1aws/certificates/create/*payload-format*  |  Pubblica  |  Pubblicare in questo argomento per creare un certificato da una richiesta di firma del certificato (CSR).  | 
|  \$1//accettato aws/certificates/create *payload-format*  |  Sottoscriviti, Ricevi  |  AWS IoT pubblica su questo argomento dopo una chiamata riuscita a \$1aws/certificates/create/. *payload-format*  | 
|  \$1aws/certificates/create//rifiutato *payload-format*  |  Sottoscriviti, Ricevi  |  AWS IoT pubblica su questo argomento dopo una chiamata non riuscita a \$1/. aws/certificates/create *payload-format*  | 
|  \$1 -from-csr/ aws/certificates/create *payload-format*  |  Pubblica  |  Pubblica in questo argomento per creare un certificato da una CSR.  | 
|  \$1 aws/certificates/create -from-csr/ /accettato *payload-format*  |  Sottoscriviti, Ricevi  |  AWS IoT pubblica su questo argomento una chiamata riuscita a \$1 -from-csr/. aws/certificates/create *payload-format*  | 
|  \$1 -from-csr/ /rejected aws/certificates/create *payload-format*  | Sottoscriviti, Ricevi |  AWS IoT pubblica su questo argomento una chiamata non riuscita a \$1 -from-csr/. aws/certificates/create *payload-format*  | 
|  *templateName*\$1aws/provisioning-templates/ /provision/ *payload-format*  |  Pubblica  |  Pubblica in questo argomento per registrare un oggetto.  | 
|  \$1aws/provisioning-templates/ *templateName* /provision/ /accepted *payload-format*  | Sottoscriviti, Ricevi |  AWS IoT pubblica su questo argomento dopo una chiamata riuscita a \$1aws/provisioning-templates/ /provision/. *templateName* *payload-format*  | 
|  \$1aws/provisioning-templates/ /provision/ /rejected *templateName* *payload-format*  |  Sottoscriviti, Ricevi  |  AWS IoT pubblica su questo argomento dopo una chiamata non riuscita a \$1aws/provisioning-templates/ /provision/. *templateName* *payload-format*  | 

## Argomenti di processo
<a name="reserved-topics-job"></a>

**Nota**  
**Le operazioni client indicate come Receive in questa tabella indicano gli argomenti che vengono AWS IoT pubblicati direttamente sul client che li ha richiesti, indipendentemente dal fatto che il client abbia sottoscritto l'argomento o meno.** I clienti dovrebbero aspettarsi di ricevere questi messaggi di risposta anche se non si sono abbonati a loro.  
Questi messaggi di risposta non passano attraverso il broker di messaggi e non possono essere sottoscritti da altri client o regole. Per effettuare la sottoscrizione ai messaggi relativi all'attività di lavoro, utilizza il `notify` e gli argomenti `notify-next`.  
Quando si sottoscrive il processo e argomenti di evento `jobExecution` per la tua soluzione di monitoraggio del parco istanze, devi prima abilitare [eventi di processo e di esecuzione di processi](iot-events.md) per ricevere eventi sul lato cloud.  
Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).


| Topic | Operazioni client consentite | Description | 
| --- | --- | --- | 
|  \$1aws/things/ /jobs/get *thingName*  |  Pubblica  |  I dispositivi pubblicano un messaggio in questo argomento per effettuare una richiesta `GetPendingJobExecutions`. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  | 
|  \$1aws/cose/ *thingName* jobs/get/accepted  |  Sottoscriviti, Ricevi  |  I dispositivi si sottoscrivono a questo argomento per ricevere risposte corrette da una richiesta `GetPendingJobExecutions`. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).   | 
|  *thingName*\$1aws/cose//jobs/get/rejected  |  Sottoscriviti, Ricevi  |  I dispositivi sottoscrivono questo argomento per ricevere una risposta quando una richiesta `GetPendingJobExecutions` viene rifiutata. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  | 
|  \$1aws/things/ *thingName* /jobs/start-next  |  Pubblica  |  I dispositivi pubblicano un messaggio in questo argomento per effettuare una richiesta `StartNextPendingJobExecution`. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  | 
|  \$1 aws/cose/ *thingName* jobs/start-next/accepted  |  Sottoscriviti, Ricevi  |  I dispositivi si sottoscrivono a questo argomento per ricevere risposte corrette per una richiesta `StartNextPendingJobExecution`. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  | 
|  *thingName*\$1aws/cose//jobs/start-next/rejected  |  Sottoscriviti, Ricevi  |  I dispositivi sottoscrivono questo argomento per ricevere una risposta quando una richiesta `StartNextPendingJobExecution` viene rifiutata. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ /get *thingName* *jobId*  |  Pubblica  |  I dispositivi pubblicano un messaggio in questo argomento per effettuare una richiesta `DescribeJobExecution`. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ *thingName* /get/accepted *jobId*  |  Sottoscriviti, Ricevi  |  I dispositivi si sottoscrivono a questo argomento per ricevere risposte corrette per una richiesta `DescribeJobExecution`. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ *thingName* /get/rejected *jobId*  |  Sottoscriviti, Ricevi  |  I dispositivi sottoscrivono questo argomento per ricevere una risposta quando una richiesta `DescribeJobExecution` viene rifiutata. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ *thingName* /update *jobId*  |  Pubblica  |  I dispositivi pubblicano un messaggio in questo argomento per effettuare una richiesta `UpdateJobExecution`. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ *thingName* /update/accepted *jobId*  |  Sottoscriviti, Ricevi  |  I dispositivi si sottoscrivono a questo argomento per ricevere risposte corrette per una richiesta `UpdateJobExecution`. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  Nota Solo il dispositivo che pubblica su \$1aws/things/ /jobs/ /update riceve messaggi su questo argomento. *thingName* *jobId*   | 
|  \$1aws/things/ /jobs/ /update/rejected *thingName* *jobId*  |  Sottoscriviti, Ricevi  |  I dispositivi sottoscrivono questo argomento per ricevere una risposta quando una richiesta `UpdateJobExecution` viene rifiutata. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  Nota Solo il dispositivo che pubblica su \$1aws/things/ /jobs/ /update riceve messaggi su questo argomento. *thingName* *jobId*   | 
|  \$1aws/things/ /jobs/notify *thingName*  |  Sottoscriviti, Ricevi  |  I dispositivi si sottoscrivono a questo argomento per ricevere notifiche quando viene aggiunta o rimossa l'esecuzione di un lavoro nell'elenco di esecuzioni in sospeso per una cosa. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/notify-next *thingName*  |  Sottoscriviti, Ricevi  |  I dispositivi si sottoscrivono a questo argomento per ricevere notifiche quando viene modificata la successiva esecuzione del processo in sospeso per la cosa. Per ulteriori informazioni, consulta [Operazioni API MQTT del dispositivo dei processi](jobs-mqtt-api.md).  | 
|  \$1//completato aws/events/job *jobId*  |  Subscribe  |  Il servizio Jobs pubblica un evento in questo argomento al termine di un processo. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).  | 
|  \$1aws/events/job/*jobId*/annullato  |  Subscribe  |  Il servizio Jobs pubblica un evento in questo argomento quando un processo viene annullato. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).  | 
|  \$1//eliminato aws/events/job *jobId*   |  Subscribe  |  Il servizio Jobs pubblica un evento su questo argomento quando un lavoro viene cancellato. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).  | 
|  \$1aws/events/job/*jobId*/cancellazione\$1in corso   |  Subscribe  |  Il servizio Jobs pubblica un evento in questo argomento quando inizia l'annullamento del processo. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).  | 
|  \$1aws/events/job/*jobId*/eliminazione\$1in corso   |  Subscribe  |  Il servizio Jobs pubblica un evento in questo argomento quando inizia l'eliminazione di un processo. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).   | 
|  \$1 aws/events/jobExecution*jobId*//successo   |  Subscribe  |  Il servizio Jobs pubblica un evento in questo argomento quando l'esecuzione del processo ha esito positivo. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).   | 
|  \$1/aws/events/jobExecution/non riuscito *jobId*   |  Subscribe  |  Il servizio Jobs pubblica un evento in questo argomento quando l'esecuzione di un processo non riesce. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).   | 
|  \$1aws/events/jobExecution//rifiutato *jobId*   |  Subscribe  |  Il servizio Jobs pubblica un evento in questo argomento quando viene respinta l'esecuzione di un processo. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).   | 
|  \$1aws/events/jobExecution/*jobId*/annullato   |  Subscribe  |  Il servizio Jobs pubblica un evento in questo argomento quando viene annullata l'esecuzione di un processo. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).   | 
|  \$1//time\$1out aws/events/jobExecution *jobId*   |  Subscribe  |  Il servizio Jobs pubblica un evento in questo argomento quando si verifica il timeout dell'esecuzione di un processo. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).   | 
|  \$1 aws/events/jobExecution*jobId*//rimosso   |  Subscribe  |  Il servizio Jobs pubblica un evento in questo argomento quando viene rimossa l'esecuzione di un processo. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).   | 
|  \$1aws/events/jobExecution//eliminato *jobId*   |  Subscribe  |  Il servizio Jobs pubblica un evento in questo argomento quando viene eliminata l'esecuzione di un processo. Per ulteriori informazioni, consulta [Eventi del servizio Jobs](events-jobs.md).   | 

## Argomenti sui comandi
<a name="reserved-topics-commands"></a>

**Nota**  
Le operazioni client indicate come **Receive** in questa tabella indicano gli argomenti che vengono AWS IoT pubblicati direttamente sul client che li ha richiesti, indipendentemente dal fatto che il client abbia sottoscritto l'argomento o meno. I clienti dovrebbero aspettarsi di ricevere questi messaggi di risposta anche se non si sono abbonati a loro.  
Questi messaggi di risposta non passano attraverso il broker di messaggi e non possono essere sottoscritti da altri client o regole.


| Topic | Operazioni client consentite | Description | 
| --- | --- | --- | 
|  \$1aws/commands/ /executions/ /request/ *<devices>* *<DeviceID>* *<ExecutionId>* *<PayloadFormat>* \$1aws/comandi/ *<devices>* *<DeviceID>* /esecuzioni/ /richiesta *<ExecutionId>*  |  Sottoscriviti, Ricevi  |  I dispositivi ricevono un messaggio su questo argomento quando viene effettuata una richiesta per avviare l'esecuzione di un comando dalla console o utilizzando l'API. `StartCommandExecution` In questo caso, *<devices>* possono essere oggetti IoT o client MQTT e *<DeviceID>* possono essere il nome dell'oggetto IoT o l'ID del client MQTT.  | 
|  \$1aws/commands///esecuzioni/ /response/ *<devices>* *<DeviceID>* *<ExecutionId>* *<PayloadFormat>*  |  Pubblica  |  I dispositivi utilizzano l'API `UpdateCommandExecution` MQTT per pubblicare un messaggio su questo argomento sull'esecuzione del comando. Il messaggio viene pubblicato come risposta alla richiesta di avviare l'esecuzione di un comando dalla console o utilizzando l'`StartCommandExecution`API. Il messaggio pubblicato utilizzerà JSON o CBOR come. *<PayloadFormat>*  | 
|  \$1aws/commands///executions/ /response/accepted/ *<devices>* *<DeviceID>* *<ExecutionId>* *<PayloadFormat>* \$1aws/comandi/ *<devices>* *<DeviceID>* /esecuzioni/ /response/accepted *<ExecutionId>*  |  Sottoscriviti, Ricevi  |  Se il servizio cloud ha elaborato correttamente il risultato dell'esecuzione del comando, pubblica una risposta all'argomento /accepted. AWS IoT Device Management   | 
|  \$1aws/commands///executions/ /response/rejected/ *<devices>* *<DeviceID>* *<ExecutionId>* *<PayloadFormat>* \$1aws/comandi/ *<devices>* *<DeviceID>* /esecuzioni/ /response/rejected *<ExecutionId>*  |  Pubblica  |  Se il servizio cloud non è riuscito a elaborare il risultato dell'esecuzione del comando, pubblica una risposta all'argomento /rejecte. AWS IoT Device Management   | 

## Argomenti di regole
<a name="reserved-topics-rule"></a>


| Topic | Operazioni client consentite | Description | 
| --- | --- | --- | 
|  \$1aws/regole/ *ruleName*  |  Pubblica  |  Un dispositivo o un'applicazione pubblica su questo argomento per arrivare le regole direttamente. Per ulteriori informazioni, consulta [Riduzione dei costi di messaggistica con Basic Ingest](iot-basic-ingest.md).   | 

## Argomenti di tunneling sicuro
<a name="reserved-topics-secure"></a>


| Topic | Operazioni client consentite | Description | 
| --- | --- | --- | 
|  \$1aws/things/ /tunnels/notify *thing-name*  |  Subscribe  |   AWS IoT pubblica questo messaggio per consentire a un agente IoT di avviare un proxy locale sul dispositivo remoto. Per ulteriori informazioni, consulta [Snippet dell'agente IoT](configure-remote-device.md#agent-snippet).   | 

## Argomenti copie shadow
<a name="reserved-topics-shadow"></a>

Gli argomenti di questa sezione vengono utilizzati da copie shadow con nome e senza nome. Gli argomenti utilizzati da ciascuno differiscono solo nel prefisso dell'argomento. Questa tabella mostra il prefisso dell'argomento utilizzato da ogni tipo di copia shadow.


| *ShadowTopicPrefix* value | Tipo di copia shadow | 
| --- | --- | 
| \$1aws/things/ /shadow thingName | Copia shadow senza nome (classica) | 
| \$1aws/things/ thingName /shadow/name/ shadowName | Copia shadow con nome | 

Per creare un argomento completo, seleziona il *ShadowTopicPrefix* tipo di ombra a cui vuoi fare riferimento, sostituiscilo *thingName* e, se applicabile, con i valori corrispondenti*shadowName*, quindi aggiungilo con lo stub dell'argomento come mostrato nella tabella seguente. Ricorda che gli argomenti prevedono una distinzione tra lettere maiuscole e minuscole.


| Topic | Operazioni client consentite | Description | 
| --- | --- | --- | 
|  *ShadowTopicPrefix*/elimina  |  Pubblicazione/Sottoscrizione  |  Un dispositivo o un'applicazione pubblica in questo argomento per eliminare una copia shadow. Per ulteriori informazioni, consulta [/delete](device-shadow-mqtt.md#delete-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/elimina/accettato  |  Subscribe  |  Il servizio Device Shadow invia messaggi a questo argomento quando viene eliminata una copia shadow. Per ulteriori informazioni, consulta [/delete/accepted](device-shadow-mqtt.md#delete-accepted-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/elimina/rifiutato  |  Subscribe  |  Il servizio Device Shadow invia messaggi a questo argomento quando viene rifiutata una richiesta di eliminazione di una copia shadow. Per ulteriori informazioni, consulta [/delete/rejected](device-shadow-mqtt.md#delete-rejected-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/ottenere  |  Pubblicazione/Sottoscrizione  |  Un'applicazione o un oggetto pubblica un messaggio vuoto in questo argomento per ottenere una copia shadow. Per ulteriori informazioni, consulta [Argomenti MQTT di Device Shadow](device-shadow-mqtt.md).  | 
|  *ShadowTopicPrefix*/get/accepted  |  Subscribe  |  Il servizio Device Shadow invia messaggi a questo argomento quando viene effettuata correttamente una richiesta di una copia shadow. Per ulteriori informazioni, consulta [/get/accepted](device-shadow-mqtt.md#get-accepted-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/get/rejected  |  Subscribe  |  Il servizio Device Shadow invia messaggi a questo argomento quando viene rifiutata una richiesta di una copia shadow. Per ulteriori informazioni, consulta [/get/rejected](device-shadow-mqtt.md#get-rejected-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/aggiornare  |  Pubblicazione/Sottoscrizione  |  Un oggetto o un'applicazione pubblica in questo argomento per aggiornare una copia shadow. Per ulteriori informazioni, consulta [/update](device-shadow-mqtt.md#update-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/update/accettato  |  Subscribe  |  Il servizio Device Shadow invia messaggi a questo argomento quando viene effettuato correttamente un aggiornamento di una copia shadow. Per ulteriori informazioni, consulta [/update/accepted](device-shadow-mqtt.md#update-accepted-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/update/rifiutato  |  Subscribe  |  Il servizio Device Shadow invia messaggi a questo argomento quando viene rifiutato un aggiornamento di una copia shadow. Per ulteriori informazioni, consulta [/update/rejected](device-shadow-mqtt.md#update-rejected-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/update/delta  |  Subscribe  |  Il servizio Device Shadow invia messaggi a questo argomento quando viene rilevata una differenza tra le sezioni sullo stato segnalato e sullo stato desiderato di una copia shadow. Per ulteriori informazioni, consulta [/update/delta](device-shadow-mqtt.md#update-delta-pub-sub-topic).   | 
|  *ShadowTopicPrefix*/aggiornamento/documenti  |  Subscribe  |  AWS IoT pubblica un documento di stato su questo argomento ogni volta che un aggiornamento dello shadow viene eseguito correttamente. Per ulteriori informazioni, consulta [/update/documents](device-shadow-mqtt.md#update-documents-pub-sub-topic).   | 

## Argomenti di distribuzione dei file basati su MQTT
<a name="reserved-topics-mqtt-based-file-delivery"></a>

**Nota**  
Le operazioni client contrassegnate come **Receive** in questa tabella indicano gli argomenti che vengono AWS IoT pubblicati direttamente sul client che li ha richiesti, indipendentemente dal fatto che il client abbia sottoscritto l'argomento o meno. I clienti dovrebbero aspettarsi di ricevere questi messaggi di risposta anche se non si sono abbonati a loro. Questi messaggi di risposta non passano attraverso il broker di messaggi e non possono essere sottoscritti da altri client o regole.

Questi messaggi supportano i buffer di risposta in formato Concise Binary Object Representation (CBOR) e JavaScript Object Notation (JSON), a seconda dell'argomento. *payload-format*


| *payload-format* | Tipo di dati del formato della risposta | 
| --- | --- | 
| cbor | Concise Binary Object Representation (CBOR) | 
| json | JavaScript Notazione di oggetti (JSON) | 


| Topic | Operazioni client consentite | Description | 
| --- | --- | --- | 
|  \$1aws/things/ *ThingName* /streams/ /data/ *StreamId* *payload-format*  |  Sottoscriviti, Ricevi  |  AWS La distribuzione di file basata su MQTT viene pubblicata su questo argomento se viene accettata la richiesta "" da un dispositivo. GetStream Il payload contiene i dati del flusso. Per ulteriori informazioni, consulta [Utilizzo della distribuzione di file AWS IoT basata su MQTT nei dispositivi](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1aws/things/ /streams/ /get/ *ThingName* *StreamId* *payload-format*  |  Pubblica  |  Un dispositivo pubblica su questo argomento per eseguire una richiesta "». GetStream Per ulteriori informazioni, consulta [Utilizzo della distribuzione di file AWS IoT basata su MQTT nei dispositivi](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1aws/things/ /streams/ *ThingName* /descrizione/ *StreamId* *payload-format*  |  Sottoscriviti, Ricevi  |  AWS La distribuzione di file basata su MQTT viene pubblicata su questo argomento se viene accettata la richiesta "" da un dispositivo. DescribeStream Il payload contiene la descrizione del flusso. Per ulteriori informazioni, consulta [Utilizzo della distribuzione di file AWS IoT basata su MQTT nei dispositivi](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1aws/things/ /streams/ /describe/ *ThingName* *StreamId* *payload-format*  |  Pubblica  |  Un dispositivo pubblica su questo argomento per eseguire una richiesta "». DescribeStream Per ulteriori informazioni, consulta [Utilizzo della distribuzione di file AWS IoT basata su MQTT nei dispositivi](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1aws/things/ /streams/ /rejected/ *ThingName* *StreamId* *payload-format*  |  Sottoscriviti, Ricevi  |  AWS La distribuzione di file basata su MQTT viene pubblicata su questo argomento se una richiesta "" o "" proveniente da un dispositivo viene rifiutata. DescribeStream GetStream Per ulteriori informazioni, consulta [Utilizzo della distribuzione di file AWS IoT basata su MQTT nei dispositivi](mqtt-based-file-delivery-in-devices.md).   | 

## ARN di argomenti riservati
<a name="reserved-topicnames-arn"></a>

Tutti gli argomenti riservati ARNs (Amazon Resource Names) hanno il seguente formato:

```
arn:aws:iot:aws-region:AWS-account-ID:topic/Topic
```

Ad esempio, `arn:aws:iot:us-west-2:123EXAMPLE456:topic/$aws/things/thingName/jobs/get/accepted` è un ARN per l'argomento riservato `$aws/things/thingName/jobs/get/accepted`.

# Configurazioni del dominio
<a name="iot-custom-endpoints-configurable"></a>

Nel AWS IoT Core, puoi utilizzare le configurazioni di dominio per configurare e gestire i comportamenti degli endpoint di dati. Con le configurazioni di dominio, puoi generare più endpoint di AWS IoT Core dati, personalizzarli con nomi di dominio completi (FQDN) e certificati server associati e anche associare un autorizzatore personalizzato. Per ulteriori informazioni, consulta [Autenticazione e autorizzazione personalizzata](custom-authentication.md).

**Nota**  
Questa funzionalità non è disponibile in. AWS GovCloud (US) Regioni AWS

**Topics**
+ [

# In cosa consiste una configurazione di dominio?
](iot-domain-configuration-what-is.md)
+ [

# Creazione e configurazione di domini AWS gestiti
](iot-custom-endpoints-configurable-aws.md)
+ [

# Creazione e configurazione di domini gestiti dai clienti
](iot-custom-endpoints-configurable-custom.md)
+ [

# Gestione delle configurazioni di dominio
](iot-custom-endpoints-managing.md)
+ [

# Configurazione delle impostazioni TLS nelle configurazioni di dominio
](iot-endpoints-tls-config.md)
+ [

# Configurazione del certificato server per stapling OCSP
](iot-custom-endpoints-cert-config.md)

# In cosa consiste una configurazione di dominio?
<a name="iot-domain-configuration-what-is"></a>

In AWS IoT Core, una configurazione di dominio si riferisce alla configurazione e alla configurazione di un dominio (dominio AWS gestito o dominio gestito dal cliente) per gli endpoint di AWS IoT Core dati. AWS IoT Core fornisce inoltre un endpoint predefinito per l' AWS account (`iot:Data-ATS`) con cui i dispositivi possono comunicare. AWS IoT Core

**Topics**
+ [

## Casi d’uso
](#iot-custom-endpoints-configurable-use-cases)
+ [

## Concetti chiave
](#iot-domain-configuration-key-concepts)
+ [

## Note importanti
](#iot-custom-endpoints-configurable-notes)

## Casi d’uso
<a name="iot-custom-endpoints-configurable-use-cases"></a>

È possibile utilizzare le configurazioni di dominio per semplificare attività come le seguenti.
+ Esegui la migrazione dei dispositivi su. AWS IoT Core
+ Supporta parchi di dispositivi eterogenei mantenendo configurazioni di dominio separate per tipi di dispositivo separati.
+ Mantieni l'identità del marchio (ad esempio, tramite il nome di dominio) durante la migrazione dell'infrastruttura applicativa a. AWS IoT Core

## Concetti chiave
<a name="iot-domain-configuration-key-concepts"></a>

I seguenti concetti forniscono dettagli sulle configurazioni dei domini e sui concetti correlati.
+ **Configurazione del dominio**

  La configurazione e la configurazione di un dominio per i tuoi AWS IoT Core endpoint.
+ **Dominio endpoint predefinito**

  Il dominio che AWS IoT fornisce l'endpoint predefinito, ad esempio. `iot:Data-ATS` Per trovare l'endpoint predefinito, esegui il comando [describe-endpoint](https://docs.aws.amazon.com//cli/latest/reference/iot/describe-endpoint.html) o CLI. [describe-domain-configuration](https://docs.aws.amazon.com//cli/latest/reference/iot/describe-domain-configuration.html) In alternativa, vai alla AWS IoT Core console e scegli **Configurazioni di dominio** da **Connect** nella barra di navigazione a sinistra. L'endpoint predefinito è elencato con il nome. `iot:Data-ATS`
+ **AWS dominio gestito**

  Il dominio che AWS gestirà. La scelta di un dominio AWS gestito significa che i dispositivi si connetteranno utilizzando un endpoint di dati fornito da AWS. AWS gestirà il dominio e i certificati.
+ **dominio gestito dal cliente**

  Il dominio che gestirai. Noto anche come dominio personalizzato. La scelta di un dominio gestito dal cliente significa che i dispositivi si connetteranno utilizzando un endpoint di dati di dominio personalizzato. Gestirai il dominio e i certificati. Il dominio gestito dal cliente ti consente di personalizzare l'endpoint in base URLs alle tue esigenze. Ad esempio, puoi utilizzare un nome di dominio personalizzato (`your-domain-name.com`) o applicare politiche di accesso specifiche.
+ **Tipo di autenticazione**

  Il tipo di autenticazione a cui scegli per autenticare i tuoi dispositivi durante la AWS IoT Core connessione. Quando si crea una configurazione di dominio, è necessario specificare un tipo di autenticazione. Per ulteriori informazioni, consulta [Scelta del tipo di autenticazione per la comunicazione del dispositivo](protocols.md#connection-protocol-auth-mode).
+ **Protocollo di applicazione**

  I protocolli a livello di applicazione utilizzati dai dispositivi per la connessione AWS IoT Core. Quando si crea una configurazione di dominio, è necessario specificare un protocollo applicativo. Per ulteriori informazioni, consulta [Scelta di un protocollo applicativo per la comunicazione del dispositivo](protocols.md#protocol-selection).

## Note importanti
<a name="iot-custom-endpoints-configurable-notes"></a>

AWS IoT Core utilizza l'[estensione TLS SNI (Server Name Indication)](https://www.rfc-editor.org/rfc/rfc3546) per applicare le configurazioni di dominio. [Quando si collegano i dispositivi AWS IoT Core, i client possono inviare l'[estensione Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1), necessaria per funzionalità come la [registrazione di più account](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), endpoint [configurabili, [domini personalizzati](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html) ed endpoint](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html) VPC.](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html) Devono inoltre passare un nome server identico a quello specificato nella configurazione del dominio. [Per testare questo servizio, utilizza la versione v2 del dispositivo in.AWS IoT SDKs](https://github.com/aws) GitHub

Se crei più endpoint di dati nel tuo Account AWS, questi condivideranno AWS IoT Core risorse come argomenti MQTT, ombre dei dispositivi e regole.

Quando fornisci i certificati del server per la configurazione AWS IoT Core personalizzata del dominio, i certificati hanno un massimo di quattro nomi di dominio. Per ulteriori informazioni, consulta [Endpoint e quote per AWS IoT Core](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#security-limits).

# Creazione e configurazione di domini AWS gestiti
<a name="iot-custom-endpoints-configurable-aws"></a>

Puoi creare un endpoint configurabile su un dominio AWS gestito utilizzando l'API. [CreateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateDomainConfiguration.html) Una configurazione di dominio per un dominio AWS gestito è composta da quanto segue:
+ `domainConfigurationName`

  Un nome definito dall'utente che identifica la configurazione del dominio e il valore devono essere univoci per il tuo. Regione AWS Non è possibile utilizzare i nomi di configurazioni del dominio che iniziano con `IoT:` perché sono riservati agli endpoint predefiniti.
+ `defaultAuthorizerName` (facoltativo)

  Il nome dell'autorizzazione ad hoc da utilizzare nell'endpoint.
+ `allowAuthorizerOverride` (facoltativo)

  Un valore booleano che specifica se i dispositivi possono sovrascrivere l'autorizzazione predefinita specificando un'autorizzazione differente nell'intestazione HTTP della richiesta. Questo valore è obbligatorio se viene specificato un valore per `defaultAuthorizerName`.
+ `serviceType` (facoltativo)

  Il tipo di servizio fornito dall'endpoint. AWS IoT Core supporta solo il tipo `DATA` di servizio. Quando specifichi `DATA`, AWS IoT Core restituisce un endpoint con un endpoint di tipo `iot:Data-ATS`. Non è possibile creare un endpoint configurabile `iot:Data` (VeriSign).
+ `TlsConfig` (facoltativo)

  Un oggetto che specifica la configurazione TLS per un dominio. Per ulteriori informazioni, consulta [Configurazione delle impostazioni TLS nelle configurazioni di dominio](iot-endpoints-tls-config.md).

Il AWS CLI comando di esempio seguente crea una configurazione di dominio per un `Data` endpoint.

```
aws iot create-domain-configuration --domain-configuration-name "myDomainConfigurationName" --service-type "DATA"
```

L'output del comando può essere simile al seguente.

```
{
    "domainConfigurationName": "myDomainConfigurationName",
    "domainConfigurationArn": "arn:aws:iot:us-east-1:123456789012:domainconfiguration/myDomainConfigurationName/itihw"
}
```

# Creazione e configurazione di domini gestiti dai clienti
<a name="iot-custom-endpoints-configurable-custom"></a>

Le configurazioni di dominio consentono di specificare un nome di dominio completo personalizzato (FQDN) a cui connettersi a AWS IoT Core. L'utilizzo dei domini gestiti dai clienti (noti anche come domini personalizzati) offre molti vantaggi: è possibile esporre il proprio dominio o quello della propria azienda ai clienti per scopi di branding; è possibile modificare facilmente il proprio dominio per indirizzarlo a un nuovo broker; è possibile supportare la multi-tenancy per servire clienti con domini diversi all'interno dello stesso Account AWS; e puoi gestire i dettagli dei certificati del tuo server, come l'autorità di certificazione principale (CA) utilizzata per firmare il certificato, l'algoritmo di firma, la profondità della catena di certificati e il ciclo di vita del certificato.

Il flusso di lavoro per impostare una configurazione di dominio con un dominio personalizzato consiste nelle tre fasi seguenti.

1. [Registrazione dei certificati del server in AWS Certificate Manager](#iot-custom-endpoints-configurable-custom-register-certificate)

1. [Creazione di una configurazione di dominio](#iot-custom-endpoints-configurable-custom-domain-config)

1. [Creazione di record DNS](#iot-custom-endpoints-configurable-custom-dns)

## Registrazione dei certificati del server in Certificate Manager AWS
<a name="iot-custom-endpoints-configurable-custom-register-certificate"></a>

Prima di creare una configurazione di dominio con un dominio personalizzato, è necessario registrare la catena di certificati server in [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html). È possibile utilizzare i tre tipi di certificati server seguenti.
+ [Certificati pubblici generati da ACM](#iot-custom-endpoints-configurable-custom-register-certificate-acm)
+ [Certificati esterni firmati da una CA pubblica](#iot-custom-endpoints-configurable-custom-register-certificate-pubext)
+ [Certificati esterni firmati da una CA privata](#iot-custom-endpoints-configurable-custom-register-certificate-privext)

**Nota**  
AWS IoT Core considera che un certificato sia firmato da una CA pubblica se è incluso nel pacchetto ca-bundle [affidabile di Mozilla](https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt?raw=1).

### Requisiti del certificato
<a name="certificate-requirements"></a>

Consulta [Prerequisites for Importing Certificates (Prerequisiti per l'importazione di certificati)](/acm/latest/userguide/import-certificate-prerequisites.html) per i requisiti per l'importazione di certificati in ACM. Oltre a questi requisiti, AWS IoT Core aggiunge i seguenti requisiti.
+ Il certificato leaf deve includere l'estensione **Extended Key Usage** x509 v3 con il valore ServerAuth (TLS Web **Server** Authentication). Se si richiede il certificato da ACM, questa estensione viene aggiunta automaticamente.
+ La profondità massima della catena di certificati è di 5 certificati.
+ La dimensione massima della catena di certificati è di 16 KB.
+ Gli algoritmi crittografici e le dimensioni delle chiavi supportati includono RSA 2048 bit (RSA\$12048) ed ECDSA 256 bit (EC\$1Prime256v1).

### Utilizzo di un certificato per più domini
<a name="one-certificate-for-multiple-domains"></a>

Se si prevede di utilizzare un certificato per coprire più sottodomini, utilizzare un dominio con caratteri jolly nel campo nome comune (CN) o nomi alternativi oggetto (SAN). Ad esempio, utilizzare **\$1.iot.example.com** per coprire dev.iot.example.com, qa.iot.example.com e prod.iot.example.com. Ogni nome di dominio completo (FQDN) richiede la propria configurazione di dominio, ma più configurazioni di dominio possono utilizzare lo stesso valore jolly. Il CN o la SAN devono coprire il nome di dominio completo che si desidera utilizzare come dominio personalizzato. Se SANs presenti, il CN viene ignorato e una SAN deve coprire l'FQDN che si desidera utilizzare come dominio personalizzato. Questa copertura può essere una corrispondenza esatta o una corrispondenza jolly. Dopo che un certificato jolly è stato convalidato e registrato su un account, agli altri account della regione viene impedito di creare domini personalizzati che si sovrappongono al certificato.

Nelle sezioni seguenti viene descritto come ottenere ogni tipo di certificato. Ogni risorsa certificato richiede un Amazon Resource Name (ARN) registrato con ACM da utilizzare quando si crea la configurazione del dominio.

### Certificati pubblici generati da ACM
<a name="iot-custom-endpoints-configurable-custom-register-certificate-acm"></a>

Puoi generare un certificato pubblico per il tuo dominio personalizzato utilizzando l'API. [RequestCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_RequestCertificate.html) Quando si genera un certificato in questo modo, ACM convalida la proprietà del dominio personalizzato. Per ulteriori informazioni, consulta [Request a Public Certificate (Richiesta di un certificato pubblico)](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) nella *AWS Certificate Manager User Guide (Guida per l’utente Amazon Certificate Manager)*.

### Certificati esterni firmati da una CA pubblica
<a name="iot-custom-endpoints-configurable-custom-register-certificate-pubext"></a>

Se disponi già di un certificato server firmato da una CA pubblica (una CA inclusa nel pacchetto ca-bundle affidabile di Mozilla), puoi importare la catena di certificati direttamente in ACM utilizzando l'API. [ImportCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html) Per ulteriori informazioni su questa attività, sui prerequisiti e sui requisiti di formato dei certificati, consulta [Importazione dei certificati](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html).

### Certificati esterni firmati da una CA privata
<a name="iot-custom-endpoints-configurable-custom-register-certificate-privext"></a>

Se si dispone già di un certificato server firmato da una CA privata o autofirmato, è possibile utilizzare il certificato per creare la configurazione del dominio, ma è anche necessario creare un certificato pubblico aggiuntivo in ACM per convalidare la proprietà del dominio. A tale scopo, registra la catena di certificati del server in ACM utilizzando l'API. [ImportCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html) Per ulteriori informazioni su questa attività, sui prerequisiti e sui requisiti di formato dei certificati, consulta [Importazione dei certificati](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html). 

### Creazione di un certificato di convalida
<a name="iot-custom-endpoints-configurable-create-validation-certificate"></a>

Dopo aver importato il certificato in ACM, genera un certificato pubblico per il tuo dominio personalizzato utilizzando l'[RequestCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_RequestCertificate.html)API. Quando si genera un certificato in questo modo, ACM convalida la proprietà del dominio personalizzato. Per ulteriori informazioni, vedere [Richiedi un certificato pubblico](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html). Quando si crea la configurazione del dominio, utilizzare questo certificato pubblico come certificato di convalida.

## Creazione di una configurazione di dominio
<a name="iot-custom-endpoints-configurable-custom-domain-config"></a>

Puoi creare un endpoint configurabile su un dominio personalizzato utilizzando l'API. [CreateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateDomainConfiguration.html) Una configurazione di dominio per un dominio personalizzato è costituita dai seguenti elementi:
+ `domainConfigurationName`

  un nome definito dall'utente che identica la configurazione del dominio. I nomi di configurazione del dominio che iniziano con `IoT:` sono riservati agli endpoint predefiniti e non possono essere utilizzati. Inoltre, questo valore deve essere unico per il tuo. Regione AWS
+ `domainName`

  Il nome di dominio completo utilizzato dai dispositivi per la connessione. AWS IoT Core AWS IoT Core sfrutta l'estensione TLS SNI (Server Name Indication) per applicare configurazioni di dominio. I dispositivi devono utilizzare questa estensione durante la connessione e passare un nome server identico al nome di dominio specificato nella configurazione del dominio.
+ `serverCertificateArns`

  L'ARN della catena di certificati del server che hai registrato con ACM. AWS IoT Core attualmente supporta solo un certificato server. 
+ `validationCertificateArn`

  L'ARN del certificato pubblico generato in ACM per convalidare la proprietà del dominio personalizzato. Questo argomento non è necessario se si utilizza un certificato server con firma pubblica o generato da ACM. 
+ `defaultAuthorizerName (optional)`

  Il nome dell'autorizzazione ad hoc da utilizzare nell'endpoint.
+ `allowAuthorizerOverride`

  Un valore booleano che specifica se i dispositivi possono sovrascrivere l'autorizzazione predefinita specificando un'autorizzazione differente nell'intestazione HTTP della richiesta. Questo valore è obbligatorio se viene specificato un valore per `defaultAuthorizerName`. 
+ `serviceType`

  AWS IoT Core attualmente supporta solo il tipo di `DATA` servizio. Quando si specifica`DATA`, AWS IoT restituisce un endpoint con un tipo di endpoint di. `iot:Data-ATS` 
+ `TlsConfig` (facoltativo)

  Un oggetto che specifica la configurazione TLS per un dominio. Per ulteriori informazioni, consulta [Configurazione delle impostazioni TLS nelle configurazioni di dominio](iot-endpoints-tls-config.md).
+ `serverCertificateConfig` (facoltativo)

  Un oggetto che specifica la configurazione del certificato del server per un dominio. Per ulteriori informazioni, consulta [Configurazione del certificato server per stapling OCSP](iot-custom-endpoints-cert-config.md).

Il AWS CLI comando seguente crea una configurazione di dominio per **iot.example.com**.

```
aws iot create-domain-configuration --domain-configuration-name "myDomainConfigurationName" --service-type "DATA" 
--domain-name "iot.example.com" --server-certificate-arns serverCertARN --validation-certificate-arn validationCertArn
```

**Nota**  
Dopo aver creato la configurazione del dominio, potrebbero essere necessari fino a 60 minuti prima che i certificati AWS IoT Core server personalizzati vengano forniti.

Per ulteriori informazioni, consulta [Gestione delle configurazioni di dominio](iot-custom-endpoints-managing.md).

## Creazione di record DNS
<a name="iot-custom-endpoints-configurable-custom-dns"></a>

Dopo aver registrato la catena di certificati server e creato la configurazione del dominio, creare un record DNS in modo che il dominio personalizzato punti a un dominio AWS IoT . Questo record deve puntare a un AWS IoT endpoint di tipo`iot:Data-ATS`. Puoi ottenere il tuo endpoint utilizzando l'[DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html)API. 

Il AWS CLI comando seguente mostra come ottenere l'endpoint.

```
aws iot describe-endpoint --endpoint-type iot:Data-ATS
```

Dopo aver ottenuto l'`iot:Data-ATS`endpoint, crea un `CNAME` record dal tuo dominio personalizzato a questo AWS IoT endpoint. Se crei più domini personalizzati nello stesso dispositivo Account AWS, assegnali come alias allo stesso endpoint. `iot:Data-ATS`

## Risoluzione dei problemi
<a name="iot-custom-endpoints-configurable-troubleshoot"></a>

Se hai problemi a connettere i dispositivi a un dominio personalizzato, assicurati che AWS IoT Core abbia accettato e applicato il certificato del tuo server. Puoi verificare di AWS IoT Core aver accettato il tuo certificato utilizzando la AWS IoT Core console o il AWS CLI.

Per utilizzare la AWS IoT Core console, vai alla pagina **Configurazioni del dominio** e seleziona il nome di configurazione del dominio. Nella sezione **Server certificate details (Dettagli certificato server)**, controlla lo stato e i dettagli dello stato. Se il certificato non è valido, sostituiscilo in ACM con un certificato che soddisfa i [requisiti del certificato](#certificate-requirements) elencati nella sezione precedente. Se il certificato ha lo stesso ARN, lo AWS IoT Core raccoglieremo e lo applicheremo automaticamente.

Per verificare lo stato del certificato utilizzando il AWS CLI, chiama l'[DescribeDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeDomainConfiguration.html)API e specifica il nome di configurazione del dominio.

**Nota**  
Se il certificato non è valido, AWS IoT Core continuerà a fornire l'ultimo certificato valido.

È possibile verificare quale certificato viene fornito sull'endpoint utilizzando il seguente comando openssl.

`openssl s_client -connect custom-domain-name:8883 -showcerts -servername custom-domain-name`

# Gestione delle configurazioni di dominio
<a name="iot-custom-endpoints-managing"></a>

Questo argomento tratta le operazioni chiave per la gestione delle risorse di configurazione del dominio. È inoltre possibile gestire i cicli di vita delle configurazioni esistenti utilizzando quanto segue APIs: [ListDomainConfigurations](https://docs.aws.amazon.com/iot/latest/apireference/API_ListDomainConfigurations.html),, [DescribeDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeDomainConfiguration.html)e. [UpdateDomainConfiguration[DeleteDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteDomainConfiguration.html)](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateDomainConfiguration.html)

**Topics**
+ [

## Visualizzazione delle configurazioni del dominio
](#iot-custom-endpoints-managing-view)
+ [

## Aggiornamento delle configurazioni del dominio
](#iot-custom-endpoints-managing-update)
+ [

## Eliminazione delle configurazioni di dominio
](#iot-custom-endpoints-managing-delete)
+ [

## Rotazione di certificati in domini personalizzati
](#iot-custom-endpoints-managing-certificates)

## Visualizzazione delle configurazioni del dominio
<a name="iot-custom-endpoints-managing-view"></a>

Per restituire un elenco impaginato di tutte le configurazioni di dominio presenti nel tuo, utilizza l'API. Account AWS[ListDomainConfigurations](https://docs.aws.amazon.com/iot/latest/apireference/API_ListDomainConfigurations.html) Puoi visualizzare i dettagli di una particolare configurazione di dominio utilizzando l'API. [DescribeDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeDomainConfiguration.html) Questa API accetta un singolo parametro `domainConfigurationName` e restituisce i dettagli della configurazione specificata.

**Esempio**

## Aggiornamento delle configurazioni del dominio
<a name="iot-custom-endpoints-managing-update"></a>

Per aggiornare lo stato o l'autorizzatore personalizzato della configurazione del tuo dominio, utilizza l'[UpdateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateDomainConfiguration.html)API. Solo l'utente può impostare lo stato su `ENABLED` o `DISABLED`. Se si disattiva la configurazione del dominio, i dispositivi connessi a tale dominio ricevono un errore di autenticazione. Attualmente non è possibile aggiornare il certificato del server nella configurazione del dominio. Per modificare il certificato di una configurazione di dominio, è necessario eliminarlo e ricrearlo.

**Esempio**

## Eliminazione delle configurazioni di dominio
<a name="iot-custom-endpoints-managing-delete"></a>

Prima di eliminare una configurazione di dominio, utilizza l'[UpdateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateDomainConfiguration.html)API per impostare lo stato su. `DISABLED` In questo modo è possibile evitare di eliminare accidentalmente l'endpoint. Dopo aver disabilitato la configurazione del dominio, eliminala utilizzando l'[DeleteDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteDomainConfiguration.html)API. Devi impostare lo `DISABLED` stato AWS-managed domain per 7 giorni prima di poterli eliminare. Puoi impostare lo `DISABLED` stato dei domini personalizzati e quindi eliminarli contemporaneamente.

**Esempio**

Dopo aver eliminato una configurazione di dominio, AWS IoT Core non viene più utilizzato il certificato del server associato a quel dominio personalizzato.

## Rotazione di certificati in domini personalizzati
<a name="iot-custom-endpoints-managing-certificates"></a>

Potrebbe essere necessario sostituire periodicamente il certificato del server con un certificato aggiornato. La tariffa con cui esegui questa operazione dipende dal periodo di validità del certificato. Se il certificato del server è stato generato utilizzando AWS Certificate Manager (ACM), è possibile impostare il certificato per il rinnovo automatico. Quando ACM rinnova il certificato, ritira AWS IoT Core automaticamente il nuovo certificato. Non hai bisogno di eseguire alcuna operazione aggiuntiva. Se il certificato del server è stato importato da un'altra fonte, può essere ruotato reimportandolo in ACM. Per informazioni sulla reimportazione dei certificati, consulta [Reimport a certificate (Reimportazione di un certificato)](https://docs.aws.amazon.com/acm/latest/userguide/import-reimport.html).

**Nota**  
AWS IoT Core raccoglie gli aggiornamenti dei certificati solo nelle seguenti condizioni.  
Il nuovo certificato ha lo stesso ARN di quello precedente.
Il nuovo certificato ha lo stesso algoritmo di firma, nome comune o nome alternativo soggetto di quello precedente.

# Configurazione delle impostazioni TLS nelle configurazioni di dominio
<a name="iot-endpoints-tls-config"></a>

AWS IoT Core fornisce [policy di sicurezza predefinite](transport-security.md#tls-policy-table) per personalizzare le impostazioni Transport Layer Security (TLS) per TLS [1.2 e [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3)](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) 1.3 nelle configurazioni di dominio. Una policy di sicurezza è una combinazione di protocolli TLS e delle relative crittografie che determinano i protocolli e crittografie supportati durante le negoziazioni TLS tra un client e un server. Con le politiche di sicurezza supportate, puoi gestire le impostazioni TLS dei tuoi dispositivi con maggiore flessibilità, applicare la maggior parte delle misure di up-to-date sicurezza quando colleghi nuovi dispositivi e mantenere configurazioni TLS coerenti per i dispositivi esistenti.

Nella tabella riportata di seguito vengono descritte le policy di sicurezza, le relative versioni TLS e le regioni supportate:


****  

| Nome policy di sicurezza | Supportato Regioni AWS | 
| --- | --- | 
| TSecurityPolitica Io\$1 \$11\$13\$12022\$110 TLS13 | Tutto Regioni AWS | 
| TSecurityPolitica Io\$1 \$11\$12\$12022\$110 TLS13 | Tutto Regioni AWS | 
| TSecurityPolitica Io\$1 \$11\$12\$12022\$110 TLS12 | Tutto Regioni AWS | 
| TSecurityPolitica Io\$1 \$11\$10\$12016\$101 TLS12 | ap-east-1, ap-northeast-2, ap-south-1, ap-southeast-2, ca-central-1, cn-nord-1, cn-nordovest-1, eu-nordovest-1, eu-nord-1, eu-west-2, eu-west-3, me-sud-1, us-east-1, us-east-2, us-west-1 | 
| Politica TSecurity TLS12 IO\$1 \$11\$10\$12015\$101 | ap-northeast-1, ap-southeast-1, eu-central-1, eu-west-1, us-east-1, us-west-2 | 

I nomi delle politiche di sicurezza AWS IoT Core includono informazioni sulla versione basate sull'anno e sul mese in cui sono state rilasciate. Se si crea una nuova configurazione di dominio, la policy di sicurezza verrà preimpostata su `IoTSecurityPolicy_TLS13_1_2_2022_10`. [Per una tabella completa delle politiche di sicurezza con dettagli su protocolli, porte TCP e cifrari, vedi Criteri di sicurezza.](transport-security.md#tls-policy-table) AWS IoT Core non supporta politiche di sicurezza personalizzate. Per ulteriori informazioni, consulta [Sicurezza dei trasporti in AWS IoT Core](transport-security.md).

Per configurare le impostazioni TLS nelle configurazioni di dominio, puoi utilizzare la AWS IoT console o il. AWS CLI

**Topics**
+ [

## Configurazione delle impostazioni TLS nelle configurazioni di dominio (console)
](#custom-tls-console)
+ [

## Configurazione delle impostazioni TLS nelle configurazioni di dominio (interfaccia a riga di comando)
](#custom-tls-cli)

## Configurazione delle impostazioni TLS nelle configurazioni di dominio (console)
<a name="custom-tls-console"></a>

**Per configurare le impostazioni TLS utilizzando la console AWS IoT**

1. Accedi a Console di gestione AWS e apri la [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Per configurare le impostazioni TLS quando si crea una nuova configurazione di dominio, attenersi alla seguente procedura.

   1. Nel riquadro di navigazione a sinistra, scegli **Configurazioni di dominio**, quindi scegli **Crea configurazione di dominio**.

   1. Nella pagina **Crea configurazione del dominio**, nella sezione **Impostazioni del dominio personalizzato - *facoltativo***, scegli una policy di sicurezza da **Seleziona policy di sicurezza**.

   1. Segui il widget e completa i passaggi restanti. Scegli **Crea configurazione del dominio**.

1. Per aggiornare le impostazioni TLS in una configurazione del dominio esistente, attenersi alla seguente procedura.

   1. Nel riquadro di navigazione a sinistra, scegli **Configurazioni di dominio**, quindi scegli una configurazione di dominio.

   1. Nella pagina **Dettagli di configurazione del dominio**, scegli **Modifica**. Quindi, nella sezione **Impostazioni del dominio personalizzato - *opzionale***, in **Seleziona policy di sicurezza**, scegli una policy di sicurezza.

   1. Seleziona **Aggiorna configurazione del dominio**.

Per ulteriori informazioni, consultare [Creazione di una configurazione di dominio](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html#iot-custom-endpoints-configurable-custom-domain-config) e [Gestione delle configurazioni di dominio](iot-custom-endpoints-managing.md).

## Configurazione delle impostazioni TLS nelle configurazioni di dominio (interfaccia a riga di comando)
<a name="custom-tls-cli"></a>

È possibile utilizzare i comandi dell'interfaccia a riga di comando [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html) e [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html) per configurare le impostazioni TLS nelle configurazioni di dominio.

1. Per specificare le impostazioni TLS utilizzando il comando dell'interfaccia a riga di comando [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html):

   ```
   aws iot create-domain-configuration \
       --domain-configuration-name domainConfigurationName \
       --tls-config securityPolicy=IoTSecurityPolicy_TLS13_1_2_2022_10
   ```

   L'output di questo comando può essere simile al seguente: 

   ```
   {
   "domainConfigurationName": "test",
   "domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/test/34ga9"
   }
   ```

   Se crei una nuova configurazione di dominio senza specificare la policy di sicurezza, il valore verrà preimpostato su: `IoTSecurityPolicy_TLS13_1_2_2022_10`.

1. Per descrivere le impostazioni TLS utilizzando il comando dell'interfaccia a riga di comando [https://docs.aws.amazon.com//cli/latest/reference/iot/describe-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/describe-domain-configuration.html):

   ```
   aws iot describe-domain-configuration \
       --domain-configuration-name domainConfigurationName
   ```

   Questo comando può restituire i dettagli di configurazione del dominio che includono le impostazioni TLS come le seguenti:

   ```
   {
    "tlsConfig": {
    "securityPolicy": "IoTSecurityPolicy_TLS13_1_2_2022_10"
    }, 
    "domainConfigurationStatus": "ENABLED", 
    "serviceType": "DATA", 
    "domainType": "AWS_MANAGED", 
    "domainName": "d1234567890abcdefghij-ats.iot.us-west-2.amazonaws.com",
    "serverCertificates": [], 
    "lastStatusChangeDate": 1678750928.997, 
    "domainConfigurationName": "test", 
    "domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/test/34ga9"
   }
   ```

1. Per aggiornare le impostazioni TLS utilizzando il comando dell'interfaccia a riga di comando [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html):

   ```
   aws iot update-domain-configuration \
       --domain-configuration-name domainConfigurationName \
       --tls-config securityPolicy=IoTSecurityPolicy_TLS13_1_2_2022_10
   ```

   L'output di questo comando può essere simile al seguente:

   ```
   {
   "domainConfigurationName": "test",
   "domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/test/34ga9"
   }
   ```

1. Per aggiornare le impostazioni TLS per l'endpoint ATS, esegui il comando dell'interfaccia a riga di comando [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html). Il nome della configurazione di dominio per l'endpoint ATS è `iot:Data-ATS`.

   ```
   aws iot update-domain-configuration \
       --domain-configuration-name "iot:Data-ATS" \
       --tls-config securityPolicy=IoTSecurityPolicy_TLS13_1_2_2022_10
   ```

   L'output del comando può essere simile al seguente:

   ```
   {
   "domainConfigurationName": "iot:Data-ATS",
   "domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/iot:Data-ATS"
   }
   ```

Per ulteriori informazioni, consulta le pagine [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html) e [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html) nella *Documentazione di riferimento dell'API AWS *.

# Configurazione del certificato server per stapling OCSP
<a name="iot-custom-endpoints-cert-config"></a>

AWS IoT Core supporta la pinzatura [OCSP (Online Certificate Status Protocol)](https://www.rfc-editor.org/rfc/rfc6960.html) per i certificati server, nota anche come cucitura OCSP dei certificati server o pinzatura OCSP. È un meccanismo di sicurezza utilizzato per verificare lo stato di revoca sul certificato del server in un handshake Transport Layer Security (TLS). L'integrazione OCSP AWS IoT Core consente di aggiungere un ulteriore livello di verifica alla validità del certificato del server del dominio personalizzato.

È possibile abilitare l'aggiunta automatica del certificato del server OCSP AWS IoT Core per verificare la validità del certificato interrogando periodicamente il risponditore OCSP. L'impostazione di graffatura OCSP fa parte del processo di creazione o aggiornamento di una configurazione di dominio con un dominio personalizzato. OCSP Stapling verifica continuamente lo stato di revoca sul certificato del server. Questo aiuta a verificare che i certificati che sono stati revocati dalla CA non siano più considerati attendibili dai client che si connettono ai domini personalizzati. Per ulteriori informazioni, consulta [Abilitazione del certificato del server OCSP in AWS IoT Core](#iot-custom-endpoints-cert-config-ocsp-manage).

L'archiviazione OCSP dei certificati server consente di controllare lo stato di revoca in tempo reale, riduce la latenza associata al controllo dello stato di revoca e migliora la privacy e l'affidabilità delle connessioni sicure. Per ulteriori informazioni sui vantaggi dell'utilizzo della graffatura OCSP, vedere. [Vantaggi dell'utilizzo della pinzatura OCSP rispetto ai controlli OCSP lato client](#iot-custom-endpoints-ocsp-stapling-benefits)

**Nota**  
Questa funzionalità non è disponibile in. AWS GovCloud (US) Regions

**Topics**
+ [

## Che cos'è OCSP?
](#iot-custom-endpoints-cert-config-ocsp-what-is)
+ [

## Come funziona la cucitura OCSP
](#iot-custom-endpoints-cert-config-ocsp-stapling-what-is)
+ [

## Abilitazione del certificato del server OCSP in AWS IoT Core
](#iot-custom-endpoints-cert-config-ocsp-manage)
+ [

## Configurazione del certificato del server OCSP per endpoint privati in AWS IoT Core
](#iot-custom-endpoints-cert-config-ocsp-private-endpoint)
+ [

## Note importanti per l'utilizzo del certificato del server OCSP in AWS IoT Core
](#iot-custom-endpoints-cert-config-ocsp-notes)
+ [

## Risoluzione dei problemi relativi all'inserimento del certificato OCSP del server AWS IoT Core
](#iot-custom-endpoints-cert-config-ocsp-troubleshooting)

## Che cos'è OCSP?
<a name="iot-custom-endpoints-cert-config-ocsp-what-is"></a>

L'Online Certificate Status Protocol (OCSP) aiuta a fornire lo stato di revoca di un certificato server per un handshake Transport Layer Security (TLS).

### Concetti chiave
<a name="iot-custom-endpoints-cert-config-ocsp-concepts"></a>

I seguenti concetti chiave forniscono dettagli sull'Online Certificate Status Protocol (OCSP).

**OCSP**

[OCSP](https://www.rfc-editor.org/rfc/rfc6960.html) viene utilizzato per verificare lo stato di revoca del certificato durante l'handshake Transport Layer Security (TLS). OCSP consente la convalida in tempo reale dei certificati. Ciò conferma che il certificato non è stato revocato o scaduto da quando è stato emesso. OCSP è anche più scalabile rispetto ai tradizionali elenchi di revoca dei certificati (). CRLs Le risposte OCSP sono più piccole e possono essere generate in modo efficiente, il che le rende più adatte per infrastrutture a chiave privata su larga scala (). PKIs

**Risponditore OCSP**

Un risponditore OCSP (noto anche come server OCSP) riceve e risponde alle richieste OCSP dei client che cercano di verificare lo stato di revoca dei certificati.

**OCSP lato client**

 In OCSP lato client, il client utilizza OCSP per contattare un risponditore OCSP per verificare lo stato di revoca del certificato durante l'handshake TLS.

**OCSP lato server**

In OCSP lato server (noto anche come pinzatura OCSP), il server è abilitato (anziché il client) a effettuare la richiesta al risponditore OCSP. Il server memorizza la risposta OCSP al certificato e la restituisce al client durante l'handshake TLS.

### Diagrammi OCSP
<a name="iot-custom-endpoints-cert-config-ocsp-diagram"></a>

Il diagramma seguente illustra il funzionamento di OCSP lato client e OCSP lato server.

![\[Diagrammi OCSP lato client e OCSP lato server\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/custom-domain-ocsp-uml.png)


**OCSP lato client**

1. Il client invia un `ClientHello` messaggio per avviare l'handshake TLS con il server.

1. Il server riceve il messaggio e risponde con un messaggio. `ServerHello` Il server invia inoltre il certificato del server al client.

1. Il client convalida il certificato del server e ne estrae un URI OCSP.

1. Il client invia una richiesta di controllo della revoca del certificato al risponditore OCSP.

1. Il risponditore OCSP invia una risposta OCSP.

1. Il client convalida lo stato del certificato dalla risposta OCSP.

1. L'handshake TLS è completato.

**OCSP lato server**

1. Il client invia un `ClientHello` messaggio per avviare l'handshake TLS con il server.

1. Il server riceve il messaggio e riceve l'ultima risposta OCSP memorizzata nella cache. Se la risposta memorizzata nella cache è mancante o è scaduta, il server chiamerà il risponditore OCSP per verificare lo stato del certificato.

1. Il risponditore OCSP invia una risposta OCSP al server.

1. Il server invia un messaggio. `ServerHello` Il server invia inoltre il certificato del server e lo stato del certificato al client.

1. Il client convalida lo stato del certificato OCSP.

1. L'handshake TLS è completato.

## Come funziona la cucitura OCSP
<a name="iot-custom-endpoints-cert-config-ocsp-stapling-what-is"></a>

Lo stapling OCSP viene utilizzato durante l'handshake TLS tra il client e il server per verificare lo stato di revoca del certificato del server. Il server invia la richiesta OCSP al risponditore OCSP e archivia le risposte OCSP ai certificati restituiti al client. Facendo in modo che il server effettui la richiesta al risponditore OCSP, le risposte possono essere memorizzate nella cache e quindi utilizzate più volte per molti client.

### Come funziona la cucitura OCSP in AWS IoT Core
<a name="iot-custom-endpoints-ocsp-stapling-iot-core"></a>

Il diagramma seguente mostra come funziona la graffatura OCSP sul lato server. AWS IoT Core

![\[Questo diagramma mostra come funziona la pinzatura OCSP sul lato server. AWS IoT Core\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/custom-domain-ocsp-core-uml.png)


1. Il dispositivo deve essere registrato con domini personalizzati con la graffatura OCSP abilitata.

1. AWS IoT Core chiama il risponditore OCSP ogni ora per ottenere lo stato del certificato.

1. Il risponditore OCSP riceve la richiesta, invia la risposta OCSP più recente e archivia la risposta OCSP nella cache. 

1. Il dispositivo invia un `ClientHello` messaggio con cui avviare l'handshake TLS. AWS IoT Core

1. AWS IoT Core ottiene la risposta OCSP più recente dalla cache del server, che risponde con una risposta OCSP del certificato.

1. Il server invia un `ServerHello` messaggio al dispositivo. Il server invia inoltre il certificato del server e lo stato del certificato al client.

1. Il dispositivo convalida lo stato del certificato OCSP.

1. L'handshake TLS è completato.

### Vantaggi dell'utilizzo della pinzatura OCSP rispetto ai controlli OCSP lato client
<a name="iot-custom-endpoints-ocsp-stapling-benefits"></a>

Alcuni vantaggi dell'utilizzo della graffatura OCSP dei certificati server includono quanto segue:

**Migliore privacy**

Senza l'utilizzo di caratteri OCSP, il dispositivo del client può esporre le informazioni a risponditori OCSP di terze parti, compromettendo potenzialmente la privacy degli utenti. La graffatura OCSP mitiga questo problema facendo in modo che il server ottenga la risposta OCSP e la invii direttamente al client.

**Affidabilità migliorata**

La pinzatura OCSP può migliorare l'affidabilità delle connessioni sicure perché riduce il rischio di interruzioni del server OCSP. Quando le risposte OCSP vengono pinzate, il server include la risposta più recente con il certificato. In questo modo i client hanno accesso allo stato di revoca anche se il risponditore OCSP è temporaneamente non disponibile. Lo stapling OCSP aiuta a mitigare questi problemi perché il server recupera periodicamente le risposte OCSP e include le risposte memorizzate nella cache nell'handshake TLS. Ciò riduce la dipendenza dalla disponibilità in tempo reale dei risponditori OCSP.

**Carico ridotto del server**

Lo stapling OCSP alleggerisce al server l'onere di rispondere alle richieste OCSP dei risponditori OCSP. Questo può aiutare a distribuire il carico in modo più uniforme, rendendo il processo di convalida dei certificati più efficiente e scalabile.

**Latenza ridotta**

Lo stapling OCSP riduce la latenza associata al controllo dello stato di revoca di un certificato durante l'handshake TLS. Invece di dover interrogare separatamente un server OCSP, il server invia la richiesta e allega la risposta OCSP al certificato del server durante l'handshake.

## Abilitazione del certificato del server OCSP in AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-manage"></a>

Per abilitare l'inserimento del certificato del server OCSP AWS IoT Core, crea una configurazione di dominio per un dominio personalizzato o aggiorna una configurazione di dominio personalizzata esistente. Per informazioni generali sulla creazione di una configurazione di dominio con un dominio personalizzato, vedere. [Creazione e configurazione di domini gestiti dai clienti](iot-custom-endpoints-configurable-custom.md)

Utilizzare le seguenti istruzioni per abilitare la pinzatura del server OCSP utilizzando Console di gestione AWS o. AWS CLI

### Console
<a name="iot-custom-endpoints-cert-config-ocsp-manage-console"></a>

**Per abilitare la graffatura OCSP dei certificati del server utilizzando la console: AWS IoT**

1. Nel menu di navigazione, scegli **Impostazioni**, quindi scegli **Crea configurazione di dominio o scegli una configurazione** di dominio esistente per un dominio personalizzato.

1. Se scegli di creare una nuova configurazione di dominio nel passaggio precedente, vedrai la pagina **Crea configurazione del dominio**. Nella sezione **Proprietà di configurazione del dominio**, scegli **Dominio personalizzato**. Inserisci le informazioni per creare una configurazione del dominio.

   Se scegli di aggiornare una configurazione di dominio esistente per un dominio personalizzato, vedrai la pagina dei **dettagli della configurazione del dominio**. Scegli **Modifica**.

1. Per abilitare lo stampaggio OCSP del server OCSP, scegli **Abilita la graffatura OCSP dei certificati del server nella sottosezione Configurazioni** dei certificati del **server**.

1. **Scegli **Crea configurazione di dominio o Aggiorna configurazione di dominio**.**

### AWS CLI
<a name="iot-custom-endpoints-cert-config-ocsp-manage-cli"></a>

**Per abilitare la memorizzazione OCSP del certificato del server utilizzando: AWS CLI**

1. Se si crea una nuova configurazione di dominio per un dominio personalizzato, il comando per abilitare lo stapling del server OCSP può essere simile al seguente:

   ```
   aws iot create-domain-configuration --domain-configuration-name "myDomainConfigurationName" \
           --server-certificate-arns arn:aws:iot:us-east-1:123456789012:cert/f8c1e5480266caef0fdb1bf97dc1c82d7ba2d3e2642c5f25f5ba364fc6b79ba3 \
           --server-certificate-config "enableOCSPCheck=true|false"
   ```

1. Se si aggiorna una configurazione di dominio esistente per un dominio personalizzato, il comando per abilitare lo stapling del server OCSP può essere simile al seguente:

   ```
   aws iot update-domain-configuration --domain-configuration-name "myDomainConfigurationName" \
           --server-certificate-arns arn:aws:iot:us-east-1:123456789012:cert/f8c1e5480266caef0fdb1bf97dc1c82d7ba2d3e2642c5f25f5ba364fc6b79ba3 \
           --server-certificate-config "enableOCSPCheck=true|false"
   ```

Per ulteriori informazioni, consulta [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)e consulta l' AWS IoT API [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)Reference.

## Configurazione del certificato del server OCSP per endpoint privati in AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoint"></a>

OCSP for private endpoint ti consente di utilizzare le tue risorse OCSP private all'interno di Amazon Virtual Private Cloud (Amazon VPC) per le operazioni. AWS IoT Core Il processo prevede l'impostazione di una funzione Lambda che funge da risponditore OCSP. La funzione Lambda potrebbe utilizzare le risorse OCSP private per creare risposte OCSP da utilizzare. AWS IoT Core 

### funzione Lambda
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoint-lambda"></a>

Prima di configurare il server OCSP per un endpoint privato, create una funzione Lambda che funga da risponditore OCSP (Online Certificate Status Protocol) conforme a Request for Comments (RFC) 6960, che supporta le risposte OCSP di base. La funzione Lambda accetta una codifica base64 della richiesta OCSP nel formato Distinguished Encoding Rules (DER). La risposta della funzione Lambda è anche una risposta OCSP con codifica base64 nel formato DER. La dimensione della risposta non deve superare i 4 kilobyte (KB). La funzione Lambda deve essere nella stessa configurazione Account AWS e nella stessa Regione AWS configurazione del dominio. Di seguito sono riportati alcuni esempi di funzioni Lambda.

#### Esempi di funzioni Lambda
<a name="ocsp-lambda-example"></a>

------
#### [ JavaScript ]

```
import * as pkijs from 'pkijs';
console.log('Loading function');
 
export const handler = async (event, context) => {
    const requestBytes = decodeBase64(event);
    const ocspRequest = pkijs.OCSPRequest.fromBER(requestBytes);
 
    console.log("Here is a better look at the OCSP request");
    console.log(ocspRequest.toJSON());
 
    const ocspResponse = getOcspResponse();
    
    console.log("Here is a better look at the OCSP response");
    console.log(ocspResponse.toJSON());
 
   const responseBytes = ocspResponse.toSchema().toBER();
   return encodeBase64(responseBytes);
};
 
function getOcspResponse() {
    const responseString = "MIIC/woBAKCCAvgwggL0BgkrBgEFBQcwAQEEggLlMIIC4TCByqFkMGIxJzAlBgNVBAoMHlJpY2hhcmQncyBEaXNjb3VudCBMYW1iZGEgT0NTUDEZMBcGA1UEAwwQcm91bmRhYm91dE5hdGlvbjEPMA0GA1UEBwwGQ2FybWVsMQswCQYDVQQGEwJJThgPMjAyNDA0MjMxODUzMjVaMFEwTzA6MAkGBSsOAwIaBQAEFD2L7Ol/6ieNMaJbwRbxFWFweXGPBBSzSThwzTc3/p5w7WOtPjp3otNtVgIBAYAAGA8yMDI0MDQyMzE4NTMyNVowDQYJKoZIhvcNAQELBQADggIBAJFRyjDAHfazNejo704Ra3FOsGq/+s82R1spDarr3k7Pzkod9jJhwsZ2YgushlS4Npfe4lHCdwFyZR75WXrW55aXFddy03KLz01ZLNYyxkleW3f5dgrUcRU3PMW9TU2gZ0VOV8L5pmxKBoBRFt6EKtyh4CbiuqkTpLdLIMZmTyanhl5GVyU5MBHdbH8YWZoT/DEBiyS7ZsyhKo6igWU/SY7YMSKgwBvFsqSDcOa/hRYQkxWKWJ19gcz8CIkWN7NvfIxCs6VrAdzEJwmE7y3v+jdfhxW9JmI4xStE4K0tAR9vVOOfKs7NvxXj7oc9pCSG60xl96kaEE6PaY1YsfNTsKQ7pyCJ0s7/2q+ieZ4AtNyzw1XBadPzPJNv6E0LvI24yQZqN5wACvtut5prMMRxAHbOy+abLZR58wloFSELtGJ7UD96LFv1GgtC5s+2QlzPc4bEEof7Lo1EISt3j2ibNch8LxhqTQ4ufrbhsMkpSOTFYEJVMJF6aKj/OGXBUUqgc0Jx6jjJXNQd+l5KCY9pQFeb/wVUYC6mYqZOkNNMMJxPbHHbFnqb68yO+g5BE9011N44YXoPVJYoXxBLFX+OpRu9cqPkT9/vlkKd+SYXQknwZ81agKzhf1HsBKabtJwNVMlBKaI8g5UGa7Bxi6ewH3ezdWiERRUK7F56OM53wto/";
    const responseBytes = decodeBase64(responseString);
    return pkijs.OCSPResponse.fromBER(responseBytes);
}
 
function decodeBase64(input) {
    const binaryString = atob(input);
 
    const byteArray = new Uint8Array(binaryString.length);
    for (var i = 0; i < binaryString.length; i++) {
        byteArray[i] = binaryString.charCodeAt(i);
    }
 
    return byteArray.buffer;
}
 
function encodeBase64(buffer) {
    var binary = '';
    const bytes = new Uint8Array( buffer );
    const len = bytes.byteLength;
 
    for (var i = 0; i < len; i++) {
        binary += String.fromCharCode( bytes[ i ] );
    }
 
    return btoa(binary);
}
```

------
#### [ Java ]

```
package com.example.ocsp.responder;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import org.bouncycastle.cert.ocsp.OCSPReq;
import org.bouncycastle.cert.ocsp.OCSPResp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Base64;
 
public class LambdaResponderApplication implements RequestHandler<String, String> {
    @Override
    public String handleRequest(final String input, final Context context) {
        LambdaLogger logger = context.getLogger();
        
        byte[] decodedInput = Base64.getDecoder().decode(input);
 
        OCSPReq req;
        try {
            req = new OCSPReq(decodedInput);
        } catch (IOException e) {
            logger.log("Got an IOException creating the OCSP request: " + e.getMessage());
            throw new RuntimeException(e);
        }
 
        try {
            OCSPResp response = businessLogic.getMyResponse();
            String toReturn = Base64.getEncoder().encodeToString(response.getEncoded());
            return toReturn;
        } catch (Exception e) {
            logger.log("Got an exception creating the response: " + e.getMessage());
            return "";
        }
    }
}
```

------

#### Autorizzazione AWS IoT a richiamare la funzione Lambda
<a name="grant-permission-ocsp-lambda"></a>

Nel processo di creazione della configurazione del dominio con un risponditore Lambda OCSP, è necessario concedere l' AWS IoT autorizzazione a richiamare la funzione Lambda dopo la creazione della funzione. Per concedere l'autorizzazione, è possibile utilizzare il comando dell'interfaccia a riga di comando [add-permission](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html).

**Concedi l'autorizzazione alla tua funzione Lambda utilizzando AWS CLI**

1. Una volta inseriti i valori, inserisci il comando seguente. Attenzione: il valore `statement-id` deve essere univoco. Sostituisci `Id-1234` con il valore esatto che hai, altrimenti potresti ricevere un `ResourceConflictException` errore.

   ```
   aws lambda add-permission  \
   --function-name "ocsp-function" \
   --principal "iot.amazonaws.com" \
   --action "lambda:InvokeFunction" \
   --statement-id "Id-1234" \
   --source-arn arn:aws:iot:us-east-1:123456789012:domainconfiguration/<domain-config-name>/*
   --source-account 123456789012
   ```

   La configurazione del dominio IoT ARNs seguirà lo schema seguente. Il suffisso generato dal servizio non sarà noto prima della creazione, pertanto è necessario sostituire il suffisso con un. `*` È possibile aggiornare l'autorizzazione una volta creata la configurazione del dominio e conoscere l'ARN esatto.

   `arn:aws:iot:use-east-1:123456789012:domainconfiguration/domain-config-name/service-generated-suffix`

1. Se il comando viene completato correttamente, restituisce un'istruzione di autorizzazione come questa. È possibile passare alla sezione successiva per configurare lo stapling OCSP per endpoint privati.

   ```
   {
       "Statement": "{\"Sid\":\"Id-1234\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:ocsp-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:iot:us-east-1:123456789012:domainconfiguration/domain-config-name/*\"}}}"
   }
   ```

   Se il comando non ha esito positivo, restituisce un errore come questo. Dovrai esaminare e correggere l'errore prima di continuare.

   ```
   An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::57EXAMPLE833:user/EXAMPLE-1 is not authorized to perform: lambda:AddPer
   mission on resource: arn:aws:lambda:us-east-1:123456789012:function:ocsp-function
   ```

### Configurazione dello stapling OCSP del server per endpoint privati
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoints"></a>

#### Console
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoint-console"></a>

**Per configurare la graffatura OCSP del certificato del server utilizzando la console: AWS IoT**

1. Dal menu di navigazione, scegli **Impostazioni**, quindi scegli **Crea configurazione di dominio o scegli una configurazione** di dominio esistente per un dominio personalizzato.

1. Se scegli di creare una nuova configurazione di dominio nel passaggio precedente, vedrai la pagina **Crea configurazione del dominio**. Nella sezione **Proprietà di configurazione del dominio**, scegli **Dominio personalizzato**. Inserisci le informazioni per creare una configurazione del dominio.

   Se scegli di aggiornare una configurazione di dominio esistente per un dominio personalizzato, vedrai la pagina dei **dettagli della configurazione del dominio**. Scegli **Modifica**.

1. Per abilitare lo stampaggio OCSP del server OCSP, scegli **Abilita la graffatura OCSP dei certificati del server nella sottosezione Configurazioni** dei certificati del **server**.

1. **Scegli **Crea configurazione di dominio o Aggiorna configurazione di dominio**.**

#### AWS CLI
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoint-cli"></a>

**Per configurare la graffatura OCSP del certificato del server utilizzando: AWS CLI**

1. Se crei una nuova configurazione di dominio per un dominio personalizzato, il comando per configurare il certificato del server OCSP per gli endpoint privati può essere simile al seguente:

   ```
   aws iot create-domain-configuration --domain-configuration-name "myDomainConfigurationName" \
           --server-certificate-arns arn:aws:iot:us-east-1:123456789012:cert/f8c1e5480266caef0fdb1bf97dc1c82d7ba2d3e2642c5f25f5ba364fc6b79ba3 \
           --server-certificate-config "enableOCSPCheck=true, ocspAuthorizedResponderArn=arn:aws:acm:us-east-1:123456789012:certificate/certificate_ID, ocspLambdaArn=arn:aws:lambda:us-east-1:123456789012:function:my-function"
   ```

1. Se si aggiorna una configurazione di dominio esistente per un dominio personalizzato, il comando per configurare il certificato del server OCSP per gli endpoint privati può essere simile al seguente:

   ```
   aws iot update-domain-configuration --domain-configuration-name "myDomainConfigurationName" \
           --server-certificate-arns arn:aws:iot:us-east-1:123456789012:cert/f8c1e5480266caef0fdb1bf97dc1c82d7ba2d3e2642c5f25f5ba364fc6b79ba3 \
           --server-certificate-config "enableOCSPCheck=true, ocspAuthorizedResponderArn=arn:aws:acm:us-east-1:123456789012:certificate/certificate_ID, ocspLambdaArn=arn:aws:lambda:us-east-1:123456789012:function:my-function"
   ```

**abilitare OCSPCheck**  
Questo è un valore booleano che indica se il controllo di graffatura OCSP del server è abilitato o meno. Per abilitare la graffatura OCSP del certificato del server, questo valore deve essere vero.

**ocspAuthorizedResponderArn**  
Si tratta di un valore stringa dell'Amazon Resource Name (ARN) per un certificato X.509 memorizzato in AWS Certificate Manager (ACM). Se fornito, AWS IoT Core utilizzerà questo certificato per convalidare la firma della risposta OCSP ricevuta. Se non fornito, AWS IoT Core utilizzerà il certificato di emissione per convalidare le risposte. Il certificato deve essere nella Regione AWS stessa Account AWS configurazione del dominio. Per ulteriori informazioni su come registrare il certificato di risponditore autorizzato, consulta [Importare certificati in AWS Certificate Manager](https://docs.aws.amazon.com//acm/latest/userguide/import-certificate.html).

**ocspLambdaArn**  
Si tratta di un valore stringa dell'Amazon Resource Name (ARN) per una funzione Lambda che funge da risponditore conforme a Request for Comments (RFC) 6960 (OCSP), supportando le risposte OCSP di base. La funzione Lambda accetta una codifica base64 della richiesta OCSP codificata utilizzando il formato DER. La risposta della funzione Lambda è anche una risposta OCSP con codifica base64 nel formato DER. La dimensione della risposta non deve superare i 4 kilobyte (KB). La funzione Lambda deve essere nella stessa configurazione Account AWS e nella stessa Regione AWS configurazione del dominio.

Per ulteriori informazioni, consulta [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)e utilizza [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)l' AWS IoT API Reference.

## Note importanti per l'utilizzo del certificato del server OCSP in AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-notes"></a>

Quando utilizzi il certificato del server OCSP in AWS IoT Core, tieni presente quanto segue:

1. AWS IoT Core supporta solo i risponditori OCSP raggiungibili tramite indirizzi pubblici. IPv4 

1. La funzionalità di spillatura OCSP AWS IoT Core non supporta i risponditori autorizzati. Tutte le risposte OCSP devono essere firmate dalla CA che ha firmato il certificato e la CA deve far parte della catena di certificati del dominio personalizzato.

1. La funzionalità di base OCSP AWS IoT Core non supporta i domini personalizzati creati utilizzando certificati autofirmati.

1. AWS IoT Core chiama un risponditore OCSP ogni ora e memorizza la risposta nella cache. Se la chiamata al risponditore fallisce, AWS IoT Core memorizzerà la risposta valida più recente.

1. Se non `nextUpdateTime` è più valida, AWS IoT Core rimuoverà la risposta dalla cache e l'handshake TLS non includerà i dati di risposta OCSP fino alla successiva chiamata riuscita al risponditore OCSP. Ciò può accadere quando la risposta memorizzata nella cache è scaduta prima che il server riceva una risposta valida dal risponditore OCSP. Il valore di `nextUpdateTime` suggerisce che la risposta OCSP sarà valida fino a quel momento. Per ulteriori informazioni su `nextUpdateTime`, consultare [Voci di registro OCSP del certificato del server](cwl-format.md#server-ocsp-logs).

1. A volte, AWS IoT Core non riesce a ricevere la risposta OCSP o rimuove la risposta OCSP esistente perché è scaduta. Se si verificano situazioni come queste, AWS IoT Core continuerà a utilizzare il certificato del server fornito dal dominio personalizzato senza la risposta OCSP.

1. La dimensione della risposta OCSP non può superare i 4 KiB.

## Risoluzione dei problemi relativi all'inserimento del certificato OCSP del server AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-troubleshooting"></a>

AWS IoT Core emette la `RetrieveOCSPStapleData.Success` metrica e le voci di registro su. `RetrieveOCSPStapleData` CloudWatch La metrica e le voci di registro possono aiutare a rilevare i problemi relativi al recupero delle risposte OCSP. Per ulteriori informazioni, consultare [Certificato del server (OCSP), metriche di fissaggio.](metrics_dimensions.md#server-ocsp-metrics) e [Voci di registro OCSP del certificato del server](cwl-format.md#server-ocsp-logs).