

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à.

# Provisioning dei dispositivi
<a name="iot-provision"></a>

AWS offre diversi modi per effettuare il provisioning di un dispositivo e installarvi certificati client univoci. Questa sezione descrive ogni modo e mostra come scegliere quello migliore per la tua soluzione IoT. Queste opzioni sono descritte in dettaglio nel whitepaper intitolato [Produzione e provisioning dei dispositivi con certificati X.509 in AWS IoT Core](https://docs.aws.amazon.com/whitepapers/latest/device-manufacturing-provisioning/device-manufacturing-provisioning.html). 

**Seleziona l'opzione più adatta alla tua situazione**
+ 

**È possibile installare certificati sui dispositivi IoT prima che vengano consegnati**  
Se è possibile installare in modo sicuro certificati client univoci sui dispositivi IoT prima che vengano consegnati per l'uso da parte dell'utente finale, è consigliabile utilizzare il [*just-in-time*provisioning (JITP) o la [*just-in-time*registrazione](auto-register-device-cert.md) (JITR)](jit-provisioning.md).

  Utilizzando JITP e JITR, l'autorità di certificazione (CA) utilizzata per firmare il certificato del dispositivo viene registrata e riconosciuta al momento della prima connessione AWS IoT del dispositivo. AWS IoT Il dispositivo viene fornito alla prima connessione utilizzando i dettagli del AWS IoT relativo modello di provisioning.

  Per ulteriori informazioni su single thing, JITP, JITR e provisioning in blocco di dispositivi con certificati univoci, consulta [Provisioning dei dispositivi che dispongono di certificati dispositivo](provision-w-cert.md).
+ 

**Gli utenti finali o gli installatori possono utilizzare un'app per installare certificati sui propri dispositivi IoT**  
Se non è possibile installare in modo sicuro certificati client univoci sul dispositivo IoT prima che vengano recapitati all'utente finale, ma l'utente finale o un programma di installazione possono utilizzare un'app per registrare i dispositivi e installare i certificati univoci del dispositivo, è preferibile utilizzare il processo [provisioning per utente attendibile](provision-wo-cert.md#trusted-user).

  L'utilizzo di un utente attendibile, ad esempio un utente finale o un programma di installazione con un account noto, può semplificare il processo di produzione del dispositivo. Invece di un certificato client univoco, i dispositivi dispongono di un certificato temporaneo che consente al dispositivo di connettersi AWS IoT per soli 5 minuti. Durante la finestra di 5 minuti, l'utente attendibile ottiene un certificato client univoco con una durata maggiore e lo installa sul dispositivo. La durata limitata del certificato di reclamo riduce al minimo il rischio di un certificato compromesso.

  Per ulteriori informazioni, consulta [Provisioning tramite utente attendibile](provision-wo-cert.md#trusted-user).
+ 

**Gli utenti finali NON POSSONO utilizzare un'app per installare certificati sui propri dispositivi IoT**  
Se nessuna delle opzioni precedenti funzionerà nella tua soluzione IoT, il processo [provisioning per attestazione](provision-wo-cert.md#claim-based) è un'opzione. Con questo processo, i dispositivi IoT dispongono di un certificato di attestazione condiviso da altri dispositivi del parco istanze. La prima volta che un dispositivo si connette con un certificato di AWS IoT attestazione, lo registra utilizzando il relativo modello di provisioning e rilascia al dispositivo il certificato client univoco a cui accedere successivamente. AWS IoT

   Questa opzione consente il provisioning automatico di un dispositivo al momento della connessione AWS IoT, ma potrebbe comportare un rischio maggiore in caso di compromissione del certificato di reclamo. Se un certificato di attestazione viene compromesso, è possibile disattivarlo. La disattivazione del certificato di attestazione impedisce a tutti i dispositivi con tale certificato di attestazione di essere registrati in futuro. Tuttavia, la disattivazione del certificato di attestazione non blocca i dispositivi di cui è già stato eseguito il provisioning.

  Per ulteriori informazioni, consulta [Provisioning tramite attestazione](provision-wo-cert.md#claim-based).

## Fornitura dei dispositivi in AWS IoT
<a name="provisioning-in-iot"></a>

Quando si esegue il provisioning di un dispositivo AWS IoT, è necessario creare risorse in modo che i dispositivi AWS IoT possano comunicare in modo sicuro. È possibile creare altre risorse per aiutarti a gestire il parco istanze dispositivi. Durante il processo di provisioning è possibile creare le seguenti risorse: 
+ Un oggetto IoT.

  Gli oggetti IoT sono voci nel registro dei AWS IoT dispositivi. Ogni oggetto ha un nome univoco e un insieme di attributi ed è associato a un dispositivo fisico. Le cose possono essere definite utilizzando un tipo di oggetto o raggruppate in gruppi di oggetti. Per ulteriori informazioni, consulta [Gestione dei dispositivi con AWS IoT](iot-thing-management.md).

   Sebbene non sia necessario, la creazione di un oggetto rende possibile gestire il parco istanze dei dispositivi in modo più efficace ricercando i dispositivi per tipo di oggetto, gruppo di oggetto e attributi di oggetto. Per ulteriori informazioni, consulta [Indicizzazione del parco istanze](iot-indexing.md).
**Nota**  
Per indicizzare i dati sullo stato di connettività dell'oggetto, esegui il provisioning dell'oggetto e configuralo in modo che il nome dell'oggetto corrisponda all'ID client utilizzato nella richiesta Connect.
+ Un certificato X.509.

  I dispositivi utilizzano certificati X.509 per eseguire l'autenticazione reciproca con. AWS IoTÈ possibile registrare un certificato esistente o richiedere la AWS IoT generazione e la registrazione di un nuovo certificato. Un certificato viene associato a un dispositivo collegandolo all'oggetto che rappresenta il dispositivo. È inoltre necessario copiare il certificato e la chiave privata associata sul dispositivo. I dispositivi presentano il certificato quando si connettono a AWS IoT. Per ulteriori informazioni, consulta [Autenticazione](authentication.md).
+ Una policy IoT.

  Le policy IoT definiscono le operazioni che un dispositivo può eseguire in AWS IoT. Le policy IoT sono collegate ai certificati del dispositivo. Quando un dispositivo presenta il certificato a AWS IoT, gli vengono concesse le autorizzazioni specificate nella politica. Per ulteriori informazioni, consulta [Autorizzazione](iot-authorization.md). Ogni dispositivo richiede un certificato per comunicare con AWS IoT.

AWS IoT supporta il provisioning automatico del parco veicoli utilizzando modelli di provisioning. I modelli di provisioning descrivono le risorse AWS IoT necessarie per il provisioning del dispositivo. I modelli contengono variabili che consentono di utilizzare un modello per eseguire il provisioning di più dispositivi. Quando si esegue il provisioning di un dispositivo, si specificano i valori per le variabili specifiche del dispositivo utilizzando un dizionario o *mappa*. Per eseguire il provisioning di un altro dispositivo, specificare nuovi valori nel dizionario.

È possibile utilizzare il provisioning automatico indipendentemente dal fatto che i dispositivi abbiano certificati univoci e la chiave privata associata.

## Approvvigionamento della flotta APIs
<a name="provisioning-apis"></a>

Esistono diverse categorie di prodotti APIs utilizzati nell'approvvigionamento della flotta:
+ Queste funzioni del piano di controllo creano e gestiscono i modelli di provisioning del parco istanze e configurano policy utente attendibili.
  + [CreateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html)
  + [ CreateProvisioningTemplateVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplateVersion.html)
  + [DeleteProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteProvisioningTemplate.html)
  + [DeleteProvisioningTemplateVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteProvisioningTemplateVersion.html)
  + [DescribeProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeProvisioningTemplate.html)
  + [DescribeProvisioningTemplateVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeProvisioningTemplateVersion.html)
  + [ListProvisioningTemplates](https://docs.aws.amazon.com/iot/latest/apireference/API_ListProvisioningTemplates.html)
  + [ListProvisioningTemplateVersions](https://docs.aws.amazon.com/iot/latest/apireference/API_ListProvisioningTemplateVersions.html)
  + [UpdateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateProvisioningTemplate.html)
+ Gli utenti attendibili possono utilizzare questa funzione del piano di controllo per generare un'attestazione di onboarding temporanea. Questa attestazione temporanea viene passata al dispositivo durante la configurazione Wi-Fi o utilizzando un metodo analogo.
  + [CreateProvisioningClaim](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningClaim.html)
+ API MQTT utilizzata durante il processo di provisioning dai dispositivi con un certificato di attestazione di provisioning incorporato in un dispositivo o passato a tale dispositivo da un utente attendibile.
  + [CreateCertificateFromCsr](fleet-provision-api.md#create-cert-csr)
  + [CreateKeysAndCertificate](fleet-provision-api.md#create-keys-cert)
  + [RegisterThing](fleet-provision-api.md#register-thing)

# Provisioning di dispositivi che non dispongono di certificati dispositivo mediante il provisioning del parco istanze dispositivi
<a name="provision-wo-cert"></a>

Utilizzando il provisioning AWS IoT della flotta, AWS IoT puoi generare e fornire in modo sicuro certificati e chiavi private ai tuoi dispositivi quando si connettono AWS IoT per la prima volta. AWS IoT fornisce certificati client firmati dall'autorità di certificazione Amazon Root (CA).

Esistono due modi per utilizzare il provisioning del parco istanze dispositivi:
+ [Provisioning tramite attestazione](#claim-based)
+ [Provisioning tramite utente attendibile](#trusted-user)

## Provisioning tramite attestazione
<a name="claim-based"></a>

I dispositivi possono essere fabbricati con un certificato di attestazione di provisioning e una chiave privata (che sono credenziali per scopi speciali) incorporati in essi. Se questi certificati sono registrati presso AWS IoT, il servizio può scambiarli con certificati di dispositivo unici che il dispositivo può utilizzare per le normali operazioni. Il processo include le seguenti fasi:

**Prima di distribuire il dispositivo**

1. Chiamare [https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html) per creare un modello di provisioning. Questa API restituisce un ARN del modello. Per ulteriori informazioni, consulta [API MQTT di provisioning del dispositivo](fleet-provision-api.md).

   Puoi anche creare un modello di provisioning del parco veicoli nella AWS IoT console. 

   1. Dal pannello di navigazione, scegli il menu a discesa **Connetti molti dispositivi**. Quindi, scegli **Connect many devices**.

   1. Scegli **Crea modello di provisioning**.

   1. Scegliete lo **scenario di provisioning** più adatto ai vostri processi di installazione. Quindi, seleziona **Successivo**.

   1. Completa il modello di workflow.

1. Creazione di certificati e chiavi private associate da utilizzare come certificati delle attestazioni di provisioning.

1. Registra questi certificati AWS IoT e associa una policy IoT che ne limiti l'uso. La policy di esempio IoT seguente limita l'uso del certificato associato a questa policy ai dispositivi di provisioning.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Connect"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Publish",
                   "iot:Receive"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topic/$aws/certificates/create/*",
       "arn:aws:iot:us-east-1:123456789012:topic/$aws/provisioning-templates/templateName/provision/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iot:Subscribe",
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/certificates/create/*",
       "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/provisioning-templates/templateName/provision/*"
               ]
           }
       ]
   }
   ```

1. Concedi al AWS IoT servizio l'autorizzazione a creare o aggiornare risorse IoT come oggetti e certificati nel tuo account durante il provisioning dei dispositivi. A tale scopo, collega la policy `AWSIoTThingsRegistration` gestita a un ruolo IAM (chiamato ruolo di provisioning) che si fida del responsabile del servizio. AWS IoT 

1. Il dispositivo viene prodotto con il certificato di attestazione di provisioning integrato in modo sicuro.

Il dispositivo è ora pronto per essere distribuito dove verrà installato per l'uso.

**Importante**  
Le chiavi private dell'attestazione di provisioning devono essere protette in ogni momento, anche sul dispositivo. Ti consigliamo di utilizzare AWS IoT CloudWatch metriche e log per monitorare eventuali indicazioni di uso improprio. Se si rileva un uso improprio, disattivare il certificato di attestazione del provisioning in modo che non possa essere utilizzato per il provisioning del dispositivo.

**Inizializzazione del dispositivo per l'utilizzo**

1. Il dispositivo utilizza il [AWS IoT Client per dispositivi SDKs SDKs, dispositivi mobili e AWS IoT dispositivi mobili](iot-sdks.md) per connettersi e autenticarsi AWS IoT utilizzando il certificato di provisioning claim installato sul dispositivo.
**Nota**  
Per sicurezza, il valore `certificateOwnershipToken` restituito da `CreateCertificateFromCsr` e da `CreateKeysAndCertificate` scade dopo un'ora. `RegisterThing` deve essere chiamato prima della scadenza di `certificateOwnershipToken`. Se il certificato creato da `CreateCertificateFromCsr` o `CreateKeysAndCertificate` non è stato attivato e non è stato collegato a una policy o a un oggetto entro la scadenza del token, il certificato viene eliminato. Se il token scade, il dispositivo può chiamare nuovamente `CreateCertificateFromCsr` o `CreateKeysAndCertificate` per generare un nuovo certificato.

1. Il dispositivo ottiene un certificato permanente e una chiave privata utilizzando una di queste opzioni. Il dispositivo utilizzerà il certificato e la chiave per tutte le future autenticazioni con AWS IoT.

   1. Chiama [`CreateKeysAndCertificate`](fleet-provision-api.md#create-keys-cert)per creare un nuovo certificato e una chiave privata utilizzando l'autorità di AWS certificazione.

      Or

   1. Chiama [`CreateCertificateFromCsr`](fleet-provision-api.md#create-cert-csr) per generare un certificato da una richiesta di firma del certificato che mantenga la propria chiave privata protetta.

1. Dal dispositivo, richiamare [`RegisterThing`](fleet-provision-api.md#register-thing) per registrare il dispositivo con AWS IoT e creare risorse cloud.

   Il servizio di provisioning del parco istanze utilizza un modello di provisioning per definire e creare risorse cloud, come oggetti IoT. Il modello può specificare gli attributi e i gruppi a cui appartiene l'oggetto. I gruppi di oggetti devono esistere prima di poter aggiungere il nuovo oggetto.

1. Dopo aver salvato il certificato permanente sul dispositivo, il dispositivo deve disconnettersi dalla sessione avviata con il certificato di attestazione di provisioning e riconnettersi utilizzando il certificato permanente. 

Il dispositivo è ora pronto per comunicare normalmente con AWS IoT.

## Provisioning tramite utente attendibile
<a name="trusted-user"></a>

In molti casi, un dispositivo si connette AWS IoT per la prima volta quando un utente affidabile, ad esempio un utente finale o un tecnico di installazione, utilizza un'app mobile per configurare il dispositivo nella posizione in cui è installato.

**Importante**  
Per eseguire questa procedura, è necessario gestire l'accesso e l'autorizzazione dell'utente attendibile. Un modo per eseguire questa operazione consiste nel fornire e gestire un account per l'utente attendibile che lo autentichi e conceda l'accesso alle funzionalità e alle API AWS IoT necessarie per eseguire questa procedura. 

**Prima di distribuire il dispositivo**

1. Chiama [https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningTemplate.html)per creare un modello di provisioning e restituirlo e. *templateArn* *templateName*

1. Creare un ruolo IAM utilizzato da un utente attendibile per avviare il processo di provisioning. Il modello di provisioning consente solo all'utente di eseguire il provisioning di un dispositivo. Esempio:

   ```
   {
       "Effect": "Allow",
       "Action": [
           "iot:CreateProvisioningClaim"
       ],
       "Resource": [
           "arn:aws:iot:aws-region:aws-account-id:provisioningtemplate/templateName"
       ]
   }
   ```

1. Concedi al AWS IoT servizio l'autorizzazione a creare o aggiornare risorse IoT, come oggetti e certificati nel tuo account durante il provisioning dei dispositivi. A tale scopo, collega la policy `AWSIoTThingsRegistration` gestita a un ruolo IAM (chiamato ruolo di *provisioning*) che si fida del responsabile del servizio. AWS IoT 

1. Fornisci i mezzi per identificare i tuoi utenti fidati, ad esempio fornendo loro un account in grado di autenticarli e autorizzare le loro interazioni con le operazioni AWS API necessarie per registrare i loro dispositivi.

**Inizializzazione del dispositivo per l'utilizzo**

1. Un utente attendibile accede all'app per dispositivi mobili o al servizio Web di provisioning.

1. L'applicazione per dispositivi mobili o l'applicazione Web utilizza il ruolo IAM e chiama [https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningClaim.html](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateProvisioningClaim.html) per ottenere un certificato di attestazione di provisioning temporaneo da AWS IoT.
**Nota**  
Per motivi di sicurezza, il certificato di attestazione di provisioning temporaneo restituito da `CreateProvisioningClaim` è valido solo per cinque minuti. Le fasi seguenti devono restituire un certificato valido prima della scadenza del certificato di attestazione di provisioning temporaneo. I certificati di attestazione di provisioning temporaneo non vengono visualizzati nell'elenco dei certificati dell'account.

1. L'app per dispositivi mobili o l'applicazione Web fornisce al dispositivo il certificato di attestazione di provisioning temporaneo insieme a tutte le informazioni di configurazione necessarie, ad esempio le credenziali Wi-Fi.

1. Il dispositivo utilizza il certificato di attestazione di provisioning temporaneo per connettersi a AWS IoT , utilizzando [AWS IoT Client per dispositivi SDKs SDKs, dispositivi mobili e AWS IoT dispositivi mobili](iot-sdks.md).

1. Il dispositivo ottiene un certificato permanente e una chiave privata utilizzando una di queste opzioni entro cinque minuti dalla connessione al certificato di richiesta AWS IoT di approvvigionamento temporaneo. Il dispositivo utilizzerà il certificato e la chiave restituiti da queste opzioni per tutte le future autenticazioni con AWS IoT.

   1. Chiama [`CreateKeysAndCertificate`](fleet-provision-api.md#create-keys-cert)per creare un nuovo certificato e una nuova chiave privata utilizzando l'autorità di AWS certificazione.

      Or

   1. Chiama [`CreateCertificateFromCsr`](fleet-provision-api.md#create-cert-csr) per generare un certificato da una richiesta di firma del certificato che mantenga la propria chiave privata protetta.
**Nota**  
Ricorda [`CreateKeysAndCertificate`](fleet-provision-api.md#create-keys-cert)o [`CreateCertificateFromCsr`](fleet-provision-api.md#create-cert-csr)devi restituire un certificato valido entro cinque minuti dalla connessione al AWS IoT certificato di richiesta di approvvigionamento temporaneo.

1. Il dispositivo chiama [`RegisterThing`](fleet-provision-api.md#register-thing)per registrare il dispositivo AWS IoT e creare risorse cloud. 

   Il servizio di provisioning del parco istanze utilizza un modello di provisioning per definire e creare risorse cloud, come oggetti IoT. Il modello può specificare gli attributi e i gruppi a cui appartiene l'oggetto. I gruppi di oggetti devono esistere prima di poter aggiungere il nuovo oggetto.

1. Dopo aver salvato il certificato permanente sul dispositivo, il dispositivo deve disconnettersi dalla sessione avviata con il certificato di attestazione di provisioning temporaneo e riconnettersi utilizzando il certificato permanente. 

Il dispositivo è ora pronto per comunicare normalmente con AWS IoT.

## Utilizzo degli hook di pre-provisioning con la CLI AWS
<a name="hooks-cli-instruc"></a>

La procedura seguente crea un modello di provisioning con hook di pre-provisioning. La funzione Lambda utilizzata qui è un esempio che può essere modificato. 

**Per creare e applicare un hook di pre-provisioning a un modello di provisioning**

1. Creare una funzione Lambda con input e output definiti. Le funzioni Lambda sono altamente personalizzabili. `allowProvisioning` e `parameterOverrides` sono necessari per la creazione di hook pre-provisioning. Per ulteriori informazioni sulla creazione di funzioni Lambda, consulta [Utilizzo AWS Lambda con l'interfaccia a riga di AWS comando](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-awscli.html).

   Di seguito è riportato un esempio di output di una funzione Lambda:

   ```
   {
     "allowProvisioning": True,
     "parameterOverrides": {
       "incomingKey0": "incomingValue0",
       "incomingKey1": "incomingValue1"
     }
   }
   ```

1. AWS IoT utilizza politiche basate sulle risorse per chiamare Lambda, quindi è necessario autorizzare la chiamata AWS IoT alla funzione Lambda.
**Importante**  
Assicurati di includere il valore `source-arn` o `source-account` nelle chiavi del contesto delle condizioni globali delle policy associate all'operazione Lambda per impedire la manipolazione delle autorizzazioni. Per ulteriori informazioni, consulta [Prevenzione del confused deputy tra servizi](cross-service-confused-deputy-prevention.md).

   Di seguito è riportato un esempio che utilizza [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) per concedere l'autorizzazione IoT all'utente Lambda.

   ```
   aws lambda add-permission \
       --function-name myLambdaFunction \
       --statement-id iot-permission \
       --action lambda:InvokeFunction \
       --principal iot.amazonaws.com
   ```

1. Aggiungi un hook di pre-provisioning a un modello utilizzando il comando or. [create-provisioning-template[update-provisioning-template](https://docs.aws.amazon.com/cli/latest/reference/iot/update-provisioning-template.html)](https://docs.aws.amazon.com/cli/latest/reference/iot/create-provisioning-template.html)

   L'esempio CLI seguente utilizza [create-provisioning-template](https://docs.aws.amazon.com/cli/latest/reference/iot/create-provisioning-template.html)per creare un modello di provisioning con hook di pre-provisioning:

   ```
   aws iot create-provisioning-template \
       --template-name myTemplate \
       --provisioning-role-arn arn:aws:iam:us-east-1:1234564789012:role/myRole \
       --template-body file://template.json \
       --pre-provisioning-hook file://hooks.json
   ```

   L'output di questo comando è simile al seguente:

   ```
   {
       "templateArn": "arn:aws:iot:us-east-1:1234564789012:provisioningtemplate/myTemplate",
       "defaultVersionId": 1,
       "templateName": myTemplate
   }
   ```

   È in oltre possibile caricare un parametro da un file invece di digitarlo per intero come valore di parametro della riga di comando per risparmiare tempo. Per ulteriori informazioni, consulta [Caricamento dei parametri da un file AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-file.html). Di seguito è riportato illustrato il parametro `template` in formato JSON espanso:

   ```
   {
       "Parameters" : {
           "DeviceLocation": {
               "Type": "String"
           }
       },
       "Mappings": {
           "LocationTable": {
               "Seattle": {
                   "LocationUrl": "https://example.aws"
               }
           }
       },
       "Resources" : {
           "thing" : {
               "Type" : "AWS::IoT::Thing",
               "Properties" : {
                   "AttributePayload" : {
                       "version" : "v1",
                       "serialNumber" : "serialNumber"
                   },
                   "ThingName" : {"Fn::Join":["",["ThingPrefix_",{"Ref":"SerialNumber"}]]},
                   "ThingTypeName" : {"Fn::Join":["",["ThingTypePrefix_",{"Ref":"SerialNumber"}]]},
                   "ThingGroups" : ["widgets", "WA"],
                   "BillingGroup": "BillingGroup"
               },
               "OverrideSettings" : {
                   "AttributePayload" : "MERGE",
                   "ThingTypeName" : "REPLACE",
                   "ThingGroups" : "DO_NOTHING"
               }
           },
           "certificate" : {
               "Type" : "AWS::IoT::Certificate",
               "Properties" : {
                   "CertificateId": {"Ref": "AWS::IoT::Certificate::Id"},
                   "Status" : "Active",
                   "ThingPrincipalType" : "EXCLUSIVE_THING"
               }
           },
           "policy" : {
               "Type" : "AWS::IoT::Policy",
               "Properties" : {
                   "PolicyDocument" : {
                       "Version": "2012-10-17",		 	 	 
                       "Statement": [{
                           "Effect": "Allow",
                           "Action":["iot:Publish"],
                           "Resource": ["arn:aws:iot:us-east-1:504350838278:topic/foo/bar"]
                       }]
                   }
               }
           }
       },
       "DeviceConfiguration": {
           "FallbackUrl": "https://www.example.com/test-site",
           "LocationUrl": {
               "Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"}, "LocationUrl"]}
       }
   }
   ```

   Di seguito è riportato illustrato il parametro `pre-provisioning-hook` in formato JSON espanso:

   ```
   {
        "targetArn" : "arn:aws:lambda:us-east-1:765219403047:function:pre_provisioning_test",
        "payloadVersion" : "2020-04-01"
   }
   ```

# Provisioning dei dispositivi che dispongono di certificati dispositivo
<a name="provision-w-cert"></a>

AWS IoT fornisce tre modi per effettuare il provisioning dei dispositivi quando dispongono già di un certificato del dispositivo (e di una chiave privata associata):
+ Il provisioning Single-thing con un modello di provisioning. Questa è una buona opzione se è sufficiente effettuare il provisioning di dispositivi uno alla volta.
+ Just-in-time provisioning (JITP) con un modello che effettua il provisioning di un dispositivo alla prima connessione. AWS IoT Questa è una buona opzione se è necessario registrare un numero elevato di dispositivi, ma non si dispone di informazioni da assemblare in un elenco di provisioning in blocco.
+ Registrazione in blocco Questa opzione consente di specificare un elenco di valori di modelli di provisioning single-thing memorizzati in un file in un bucket S3. Questo approccio è ideale se si dispone di un numero elevato di dispositivi noti le cui caratteristiche desiderate possono essere assemblate in un elenco. 

**Topics**
+ [

# Provisioning di un singolo oggetto
](single-thing-provisioning.md)
+ [

# Just-in-time approvvigionamento
](jit-provisioning.md)
+ [

# Registrazione in blocco
](bulk-provisioning.md)

# Provisioning di un singolo oggetto
<a name="single-thing-provisioning"></a>

Per effettuare il provisioning di un oggetto, usa l'[RegisterThing](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterThing.html)API o il `register-thing` comando CLI. Il comando `register-thing` dell'interfaccia a riga di comando accetta gli argomenti seguenti:

--template-body  
Modello di provisioning.

--parameters  
Elenco di coppie nome-valore per i parametri usati nel modello di provisioning, in formato JSON, ad esempio `{"ThingName" : "MyProvisionedThing", "CSR" : "csr-text"}`.

Per informazioni, consulta [Modelli di provisioning](provision-template.md).

[RegisterThing](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterThing.html)o `register-thing` restituisce ARNs le risorse e il testo del certificato che ha creato:

```
{
    "certificatePem": "certificate-text",
    "resourceArns": {
    "PolicyLogicalName": "arn:aws:iot:us-west-2:123456789012:policy/2A6577675B7CD1823E271C7AAD8184F44630FFD7",
    "certificate": "arn:aws:iot:us-west-2:123456789012:cert/cd82bb924d4c6ccbb14986dcb4f40f30d892cc6b3ce7ad5008ed6542eea2b049",
    "thing": "arn:aws:iot:us-west-2:123456789012:thing/MyProvisionedThing"
    }
}
```

Se un parametro viene omesso dal dizionario, viene usato il valore predefinito. Se non è specificato alcun valore predefinito, il parametro non viene sostituito con un valore.

# Just-in-time approvvigionamento
<a name="jit-provisioning"></a>

È possibile utilizzare il just-in-time provisioning (JITP) per effettuare il provisioning dei dispositivi al primo tentativo di connessione. AWS IoT Per eseguire il provisioning del dispositivo, devi abilitare la registrazione automatica e associare un modello di provisioning al certificato CA usato per firmare il certificato del dispositivo. I successi e gli errori di provisioning vengono registrati come in [Parametri di provisioning dei dispositivi](metrics_dimensions.md#provisioning-metrics) Amazon. CloudWatch

**Topics**
+ [

## Panoramica di JITP
](#jit-provisioning-overview)
+ [

## Registrare la CA utilizzando il modello di provisioning
](#jit-provisioning-registerCA-template)
+ [

## Registrare una CA utilizzando il nome del modello di provisioning
](#jit-provisioning-registerCA-templateName)

## Panoramica di JITP
<a name="jit-provisioning-overview"></a>

Quando un dispositivo tenta di connettersi AWS IoT utilizzando un certificato firmato da un certificato CA registrato, AWS IoT carica il modello dal certificato CA e lo utilizza per chiamare. [RegisterThing](fleet-provision-api.md#register-thing) Il flusso di lavoro JITP prima registra un certificato con un valore di stato `PENDING_ACTIVATION`. Quando il flusso di provisioning del dispositivo è completo, lo stato del certificato viene modificato in `ACTIVE`.

AWS IoT definisce i seguenti parametri a cui è possibile dichiarare e fare riferimento nei modelli di provisioning:
+ `AWS::IoT::Certificate::Country`
+ `AWS::IoT::Certificate::Organization`
+ `AWS::IoT::Certificate::OrganizationalUnit`
+ `AWS::IoT::Certificate::DistinguishedNameQualifier`
+ `AWS::IoT::Certificate::StateName`
+ `AWS::IoT::Certificate::CommonName`
+ `AWS::IoT::Certificate::SerialNumber`
+ `AWS::IoT::Certificate::Id`

I valori per questi parametri del modello di provisioning sono limitati a ciò che JITP può estrarre dal campo oggetto del certificato del dispositivo di cui viene effettuato il provisioning. Il certificato deve contenere valori per tutti i parametri nel corpo del modello. Il parametro `AWS::IoT::Certificate::Id` si riferisce a un ID generato internamente, non a un ID contenuto nel certificato. È possibile ottenere il valore di questo ID utilizzando la `principal()` funzione all'interno di una AWS IoT regola. 

**Nota**  
È possibile effettuare il AWS IoT Core just-in-time provisioning dei dispositivi utilizzando la funzionalità di provisioning (JITP) senza dover inviare l'intera catena di fiducia alla prima connessione di un dispositivo a. AWS IoT Core La presentazione del certificato emesso da una CA è facoltativa, ma il dispositivo deve inviare l'estensione [Server Name Indication (SNI)](https://datatracker.ietf.org/doc/html/rfc3546#section-3.1) quando si collega a AWS IoT Core.

### Modello di corpo di esempio
<a name="jit-provisioning-example-templatebody"></a>

Il seguente file JSON è un esempio di modello di corpo completo di un modello JITP. 

```
{
   "Parameters":{
      "AWS::IoT::Certificate::CommonName":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::SerialNumber":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Country":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Id":{
         "Type":"String"
      }
   },
   "Resources":{
      "thing":{
         "Type":"AWS::IoT::Thing",
         "Properties":{
            "ThingName":{
               "Ref":"AWS::IoT::Certificate::CommonName"
            },
            "AttributePayload":{
               "version":"v1",
               "serialNumber":{
                  "Ref":"AWS::IoT::Certificate::SerialNumber"
               }
            },
            "ThingTypeName":"lightBulb-versionA",
            "ThingGroups":[
               "v1-lightbulbs",
               {
                  "Ref":"AWS::IoT::Certificate::Country"
               }
            ]
         },
         "OverrideSettings":{
            "AttributePayload":"MERGE",
            "ThingTypeName":"REPLACE",
            "ThingGroups":"DO_NOTHING"
         }
      },
      "certificate":{
         "Type":"AWS::IoT::Certificate",
         "Properties":{
            "CertificateId":{
               "Ref":"AWS::IoT::Certificate::Id"
            },
            "Status":"ACTIVE"
         }
      },
      "policy":{
         "Type":"AWS::IoT::Policy",
         "Properties":{
            "PolicyDocument":"{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
         }
      }
   }
}
```

Questo modello di esempio dichiara i valori per i parametri di provisioning `AWS::IoT::Certificate::CommonName`, `AWS::IoT::Certificate::SerialNumber`, `AWS::IoT::Certificate::Country` e `AWS::IoT::Certificate::Id` che vengono estratti dal certificato e utilizzati nella sezione `Resources`. Il flusso di lavoro JITP usa quindi questo modello per eseguire le seguenti operazioni:
+ Registrare un certificato e impostare il relativo stato su PENDING\$1ACTIVE.
+ Creare una risorsa oggetto.
+ Creare una risorsa policy.
+ Collegare la policy al certificato.
+ Collegare il certificato all'oggetto.
+ Aggiornare lo stato del certificato ad ACTIVE.

Il provisioning del dispositivo fallisce se il certificato non ha tutte le proprietà menzionate nella sezione del`Parameters`. `templateBody` Ad esempio, se `AWS::IoT::Certificate::Country` è incluso nel modello, ma il certificato non ha una proprietà `Country`, il provisioning del dispositivo non riesce.

Puoi anche usarlo CloudTrail per risolvere problemi con il tuo modello JITP. Per informazioni sulle metriche registrate in Amazon CloudWatch, consulta. [Parametri di provisioning dei dispositivi](metrics_dimensions.md#provisioning-metrics) Per ulteriori informazioni sui modelli di provisioning, consulta [Modelli di provisioning](provision-template.md).

**Nota**  
Durante il processo di provisioning, il just-in-time provisioning (JITP) richiama altre operazioni API del piano di controllo. AWS IoT Queste chiamate potrebbero superare le [quote di throttling AWS IoT](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#throttling-limits) impostate per il tuo account e causare limitazioni delle chiamate. Se necessario, contatta il [supporto clienti AWS](https://console.aws.amazon.com/support/home) per aumentare le quote di limitazione.

## Registrare la CA utilizzando il modello di provisioning
<a name="jit-provisioning-registerCA-template"></a>

Per registrare una CA utilizzando un modello di provisioning completo, attieniti alla seguente procedura: 

1. Salva il modello di provisioning e le informazioni ARN del ruolo sotto forma di file JSON come nell'esempio seguente:

   ```
   { 
        "templateBody" : "{\r\n    \"Parameters\" : {\r\n        \"AWS::IoT::Certificate::CommonName\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::SerialNumber\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::Country\": {\r\n            \"Type\": \"String\"\r\n        },\r\n        \"AWS::IoT::Certificate::Id\": {\r\n            \"Type\": \"String\"\r\n        }\r\n    },\r\n    \"Resources\": {\r\n        \"thing\": {\r\n            \"Type\": \"AWS::IoT::Thing\",\r\n            \"Properties\": {\r\n                \"ThingName\": {\r\n                    \"Ref\": \"AWS::IoT::Certificate::CommonName\"\r\n                },\r\n                \"AttributePayload\": {\r\n                    \"version\": \"v1\",\r\n                    \"serialNumber\": {\r\n                        \"Ref\": \"AWS::IoT::Certificate::SerialNumber\"\r\n                    }\r\n                },\r\n                \"ThingTypeName\": \"lightBulb-versionA\",\r\n                \"ThingGroups\": [\r\n                    \"v1-lightbulbs\",\r\n                    {\r\n                        \"Ref\": \"AWS::IoT::Certificate::Country\"\r\n                    }\r\n                ]\r\n            },\r\n            \"OverrideSettings\": {\r\n                \"AttributePayload\": \"MERGE\",\r\n                \"ThingTypeName\": \"REPLACE\",\r\n                \"ThingGroups\": \"DO_NOTHING\"\r\n            }\r\n        },\r\n        \"certificate\": {\r\n            \"Type\": \"AWS::IoT::Certificate\",\r\n            \"Properties\": {\r\n                \"CertificateId\": {\r\n                    \"Ref\": \"AWS::IoT::Certificate::Id\"\r\n                },\r\n                \"Status\": \"ACTIVE\"\r\n            },\r\n            \"OverrideSettings\": {\r\n                \"Status\": \"DO_NOTHING\"\r\n            }\r\n        },\r\n        \"policy\": {\r\n            \"Type\": \"AWS::IoT::Policy\",\r\n            \"Properties\": {\r\n                \"PolicyDocument\": \"{ \\\"Version\\\": \\\"2012-10-17		 	 	 \\\", \\\"Statement\\\": [{ \\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\":[\\\"iot:Publish\\\"], \\\"Resource\\\": [\\\"arn:aws:iot:us-east-1:123456789012:topic\/foo\/bar\\\"] }] }\"\r\n            }\r\n        }\r\n    }\r\n}",
        "roleArn" : "arn:aws:iam::123456789012:role/JITPRole"
   }
   ```

   Il valore del campo `templateBody` deve essere un oggetto JSON specificato come stringa con caratteri di escape e può utilizzare solo i valori dell'[elenco precedente](#jit-provisioning-overview). È possibile utilizzare una varietà di strumenti per creare l'output JSON richiesto, ad esempio `json.dumps` (Python) o `JSON.stringify` (Node). Il valore del campo `roleARN` deve essere l'ARN di un ruolo a cui è associata `AWSIoTThingsRegistration`. Inoltre, il modello può utilizzare un `PolicyName` esistente invece di `PolicyDocument` inline nell'esempio. 

1. Registra un certificato CA con l'operazione [Register CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) API o il comando [https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html)CLI. Specificherai la cartella del modello di provisioning e le informazioni ARN sui ruoli salvate nel passaggio precedente:

   Di seguito viene illustrato un esempio di come registrare un certificato CA in modalità `DEFAULT` utilizzando la AWS CLI:

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --verification-cert file://your-verification-cert 
                   --set-as-active --allow-auto-registration --registration-config file://your-template
   ```

   Di seguito viene illustrato un esempio di come registrare un certificato CA in modalità `SNI_ONLY` utilizzando la AWS CLI:

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --certificate-mode SNI_ONLY
                    --set-as-active --allow-auto-registration --registration-config file://your-template
   ```

   Per ulteriori informazioni, consulta [Registrazione di certificati CA](https://docs.aws.amazon.com//iot/latest/developerguide/register-CA-cert.html).

1.  (Facoltativo) Aggiorna le impostazioni per un certificato CA utilizzando l'operazione [Update CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) API o il comando [https://docs.aws.amazon.com//cli/latest/reference/iot/update-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-ca-certificate.html)CLI. 

   Di seguito viene illustrato un esempio di come aggiornare un certificato CA utilizzando la AWS CLI:

   ```
   aws iot update-ca-certificate --certificate-id caCertificateId
                   --new-auto-registration-status ENABLE --registration-config file://your-template
   ```

## Registrare una CA utilizzando il nome del modello di provisioning
<a name="jit-provisioning-registerCA-templateName"></a>

Per registrare una CA utilizzando il nome di un modello di provisioning, attieniti alla seguente procedura:

1. Salva il corpo del modello di provisioning sotto forma di file JSON. Puoi trovare un esempio di corpo del modello in [esempio di corpo del modello](#jit-provisioning-example-templatebody).

1. Per creare un modello di provisioning, usa l'[CreateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html)API o il comando [https://docs.aws.amazon.com//cli/latest/reference/iot/create-provisioning-template.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-provisioning-template.html)CLI:

   ```
   aws iot create-provisioning-template --template-name your-template-name \
           --template-body file://your-template-body.json --type JITP \
           --provisioning-role-arn arn:aws:iam::123456789012:role/test
   ```
**Nota**  
Per il just-in-time provisioning (JITP), è necessario specificare il tipo di modello da utilizzare al `JITP` momento della creazione del modello di provisioning. *Per ulteriori informazioni sul tipo di modello, consulta [CreateProvisioningTemplate](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html)l'API Reference.AWS *

1. Per registrare CA con il nome del modello, utilizza l'CACertificateAPI [Register](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) o il [https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html](https://docs.aws.amazon.com//cli/latest/reference/iot/register-ca-certificate.html)comando CLI:

   ```
   aws iot register-ca-certificate --ca-certificate file://your-ca-cert --verification-cert file://your-verification-cert \
           --set-as-active --allow-auto-registration --registration-config templateName=your-template-name
   ```

# Registrazione in blocco
<a name="bulk-provisioning"></a>

Puoi usare il comando [https://docs.aws.amazon.com/iot/latest/apireference/API_StartThingRegistrationTask.html](https://docs.aws.amazon.com/iot/latest/apireference/API_StartThingRegistrationTask.html) per registrare gli oggetti in blocco. Questo comando accetta un modello di provisioning, un nome di bucket S3, un nome di chiave e l'ARN di un ruolo che permette di accedere al file nel bucket S3. Il file nel bucket S3 contiene i valori usati per sostituire i parametri nel modello. Il file deve essere un file JSON delimitato da righe. Ogni riga contiene tutti i valori dei parametri per la registrazione di un singolo dispositivo. Ad esempio:

```
{"ThingName": "foo", "SerialNumber": "123", "CSR": "csr1"}
{"ThingName": "bar", "SerialNumber": "456", "CSR": "csr2"}
```

Le seguenti API relative alle operazioni di registrazione in blocco potrebbero essere utili:
+ [ListThingRegistrationTasks](https://docs.aws.amazon.com/iot/latest/apireference/API_ListThingRegistrationTasks.html): elenca le attività correnti di bulk thing provisioning. 
+ [ DescribeThingRegistrationTask](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeThingRegistrationTask.html): fornisce informazioni su una specifica attività di registrazione di oggetti in blocco.
+ [StopThingRegistrationTask](https://docs.aws.amazon.com/iot/latest/apireference/API_StopThingRegistrationTask.html): interrompe un'attività di registrazione di oggetti in blocco.
+ [ListThingRegistrationTaskReports](https://docs.aws.amazon.com/iot/latest/apireference/API_ListThingRegistrationTaskReports.html): Utilizzato per controllare i risultati e gli errori di un'attività di registrazione di oggetti in blocco.

**Nota**  
Puoi eseguire una sola attività di registrazione in blocco per volta (per account).
Le operazioni di registrazione in blocco richiamano altre operazioni API AWS IoT del piano di controllo. Queste chiamate potrebbero superare le [Quote di throttling AWS IoT](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#throttling-limits) del tuo account e causare errori di limitazione delle chiamate. Contatta l'[assistenza AWS clienti](https://console.aws.amazon.com/support/home) per aumentare le quote di AWS IoT limitazione, se necessario.

# Modelli di provisioning
<a name="provision-template"></a>

Un modello di provisioning è un documento JSON che utilizza parametri per descrivere le risorse che il dispositivo deve utilizzare per interagire. AWS IoT Un modello di provisioning contiene due sezioni: `Parameters` e `Resources`. Esistono due tipi di modelli di provisioning in. AWS IoT Uno viene utilizzato per il just-in-time provisioning (JITP) e la registrazione in blocco, mentre il secondo viene utilizzato per l'approvvigionamento del parco veicoli.

**Topics**
+ [

## Sezione Parametri
](#parameters-section)
+ [

## Sezione Risorse
](#resources-section)
+ [

## Esempio di modello per la registrazione in blocco
](#bulk-template-example)
+ [

## Esempio di modello per il just-in-time provisioning (JITP)
](#JITP-template-example)
+ [

## Provisioning del parco istanze
](#fleet-provision-template)

## Sezione Parametri
<a name="parameters-section"></a>

La sezione `Parameters` dichiara i parametri usati all'interno della sezione `Resources`. Ogni parametro dichiara un nome, un tipo e un valore predefinito facoltativo. Il valore predefinito viene usato quando il dizionario passato con il modello non contiene un valore per il parametro. La sezione `Parameters` del documento di un modello è simile alla seguente:

```
{
    "Parameters" : {
        "ThingName" : {
            "Type" : "String"
        },
        "SerialNumber" : {
            "Type" : "String"
        },
        "Location" : {
            "Type" : "String",
            "Default" : "WA"
        },
        "CSR" : {
            "Type" : "String"    
        }
    }
}
```

Il frammento di codice di questo corpo del modello dichiara quattro parametri: `ThingName`, `SerialNumber`, `Location` e `CSR`. Tutti questi parametri sono di tipo `String`. Il parametro `Location` dichiara un valore predefinito `"WA"`.

## Sezione Risorse
<a name="resources-section"></a>

La `Resources` sezione del corpo del modello dichiara le risorse necessarie per la comunicazione del dispositivo AWS IoT: un oggetto, un certificato e una o più policy IoT. Ogni risorsa specifica un nome logico, un tipo e un set di proprietà.

Un nome logico permette di fare riferimento a una risorsa in un'altra parte del modello.

Il tipo specifica il tipo di risorsa che intendi dichiarare. I tipi validi sono:
+ `AWS::IoT::Thing`
+ `AWS::IoT::Certificate`
+ `AWS::IoT::Policy`

Le proprietà specificate dipendono dal tipo di risorsa dichiarato.

### Risorse oggetto
<a name="thing-resources"></a>

Le risorse oggetto vengono dichiarate usando le proprietà seguenti:
+ `ThingName`: stringa.
+ `AttributePayload`: facoltativo. Un elenco di coppie nome-valore.
+ `ThingTypeName`: facoltativo. Stringa per un tipo di oggetto associato per l'oggetto.
+ `ThingGroups`: facoltativo. Elenco di gruppi cui appartiene l'oggetto.
+ `BillingGroup`: facoltativo. Stringa per il nome di un gruppo di fatturazione associato.
+ `PackageVersions`: facoltativo. Stringa per un pacchetto associato e nomi delle versioni.

### Risorse certificato
<a name="certificate-resources"></a>

È possibile specificare i certificati in uno dei modi seguenti:
+ Richiesta di firma del certificato.
+ ID certificato di un certificato del dispositivo esistente. (Solo il certificato IDs può essere utilizzato con un modello di provisioning del parco veicoli.)
+ Certificato del dispositivo creato con un certificato CA registrato con AWS IoT. Se esistono più certificati CA registrati con lo stesso campo dell'oggetto, devi passare anche il certificato CA usato per firmare il certificato del dispositivo.

**Nota**  
Quando dichiari un certificato in un modello, usa solo uno di questi metodi. Ad esempio, se usi una richiesta di firma del certificato, non potrai specificare anche un ID certificato o un certificato del dispositivo. Per ulteriori informazioni, consulta [Certificati client X.509](x509-client-certs.md). 

Per ulteriori informazioni, consulta [Panoramica sui certificati X.509](authentication.md#x509-certificate-overview). 

Le risorse certificato vengono dichiarate usando le proprietà seguenti:
+ `CertificateSigningRequest`: stringa.
+ `CertificateId`: stringa.
+ `CertificatePem`: stringa.
+ `CACertificatePem`: stringa.
+ `Status`: facoltativo. Stringa che può essere `ACTIVE` o `INACTIVE`. Il valore predefinito è ACTIVE.
+ `ThingPrincipalType`: facoltativo. Stringa che specifica il tipo di relazione tra l'oggetto e il principale (il certificato).
  + `EXCLUSIVE_THING`: stabilisce una relazione esclusiva. Il principale può essere associato solo a questo oggetto specifico e non ad altri.
  + `NON_EXCLUSIVE_THING`: associa il principio specificato agli oggetti. È possibile allegare più oggetti al principale. Se non specificato, questo è il valore predefinito.
**Nota**  
È inoltre possibile effettuare il provisioning dei dispositivi senza certificati dei dispositivi. Per ulteriori informazioni, consulta [Provisioning di dispositivi che non dispongono di certificati dispositivo mediante il provisioning del parco istanze dispositivi](provision-wo-cert.md).

Esempi:
+ Certificato specificato con una richiesta di firma del certificato (CSR):

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "CertificateSigningRequest": {"Ref" : "CSR"},
              "Status" : "ACTIVE"      
          }
      }
  }
  ```
+ Certificato specificato con un ID certificato esistente:

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "CertificateId": {"Ref" : "CertificateId"}
          }
      }
  }
  ```
+ Certificate specificato con un .pem del certificato esistente e un .pem del certificato CA:

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "CACertificatePem": {"Ref" : "CACertificatePem"},
              "CertificatePem": {"Ref" : "CertificatePem"}
          }
      }
  }
  ```
+ Associa esclusivamente una cosa a un principale:

  ```
  {
      "certificate" : {
          "Type" : "AWS::IoT::Certificate",
          "Properties" : {
              "ThingPrincipalType" : "EXCLUSIVE_THING"
          }
      }
  }
  ```

### Risorse relative alle policy
<a name="policy-resources"></a>

Le risorse policy vengono dichiarate con una delle seguenti proprietà:
+ `PolicyName`: facoltativo. Stringa. Il valore predefinito è un hash del documento della policy. La `PolicyName` può solo fare riferimento alle policy AWS IoT ma non policy IAM. Se utilizzi una policy AWS IoT esistente, immetti il nome della policy per la proprietà `PolicyName`. Non includere la proprietà `PolicyDocument`.
+ `PolicyDocument`: facoltativo. Un oggetto JSON specificato come stringa con carattere di escape. Se la proprietà `PolicyDocument` non è specificata, la policy deve essere già stata creata.

**Nota**  
Se è presente una sezione `Policy`, è necessario specificare la proprietà `PolicyName` o `PolicyDocument`, ma non entrambe.

### Sostituzione delle impostazioni
<a name="override-settings"></a>

Se un modello specifica una risorsa già esistente, la sezione `OverrideSettings` permette di specificare l'operazione da eseguire:

`DO_NOTHING`  
Lascia la risorsa inalterata.

`REPLACE`  
Sostituisce la risorsa con quella specificata nel modello.

`FAIL`  
La richiesta non riesce con `ResourceConflictsException`.

`MERGE`  
Valido solo per le proprietà `ThingGroups` e `AttributePayload` di una risorsa `thing`. Unisce gli attributi o le appartenenze ai gruppi esistenti dell'oggetto a quelli specificati nel modello.

Quando si dichiara una risorsa oggetto, è possibile specificare `OverrideSettings` per le seguenti proprietà:
+ `ATTRIBUTE_PAYLOAD`
+ `THING_TYPE_NAME`
+ `THING_GROUPS`

Quando si dichiara una risorsa certificato, è possibile specificare `OverrideSettings` per la proprietà `Status`.

`OverrideSettings` non sono disponibili per le risorse policy.

### Esempi di risorsa
<a name="resource-example"></a>

Il frammento di codice del modello seguente dichiara un oggetto, un certificato e una policy:

```
{ 
    "Resources" : {
        "thing" : {
            "Type" : "AWS::IoT::Thing",
            "Properties" : {
                "ThingName" : {"Ref" : "ThingName"},
                "AttributePayload" : { "version" : "v1", "serialNumber" :  {"Ref" : "SerialNumber"}}, 
                "ThingTypeName" :  "lightBulb-versionA",
                "ThingGroups" : ["v1-lightbulbs", {"Ref" : "Location"}]
            },
            "OverrideSettings" : {
                "AttributePayload" : "MERGE",
                "ThingTypeName" : "REPLACE",
                "ThingGroups" : "DO_NOTHING"
            }
        },  
        "certificate" : {
            "Type" : "AWS::IoT::Certificate",
            "Properties" : {
                "CertificateSigningRequest": {"Ref" : "CSR"},
                "Status" : "ACTIVE"      
            }
        },
        "policy" : {
            "Type" : "AWS::IoT::Policy",
            "Properties" : {
                "PolicyDocument" : "{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
            }
        }
    }
}
```

L'oggetto viene dichiarato con:
+ Nome logico `"thing"`.
+ Tipo `AWS::IoT::Thing`.
+  Un set di proprietà dell'oggetto.

  Le proprietà dell'oggetto includono il nome dell'oggetto, un set di attributi, un nome di tipo di oggetto facoltativo e un elenco facoltativo di gruppi di oggetti cui appartiene l'oggetto.

Ai parametri viene fatto riferimento tramite `{"Ref":"parameter-name"}`. Quando il modello viene valutato, i parametri vengono sostituiti con il valore del parametro specificato nel dizionario passato con il modello.

Il certificato viene dichiarato con:
+ Nome logico `"certificate"`.
+ Tipo `AWS::IoT::Certificate`.
+ Un set di proprietà.

  Le proprietà includono la richiesta di firma per il certificato e l'impostazione dello stato su `ACTIVE`. Il testo della richiesta di firma del certificato viene passato come parametro nel dizionario a sua volta passato con il modello.

La policy viene dichiarata con:
+ Nome logico `"policy"`.
+ Tipo `AWS::IoT::Policy`.
+ Nome di una policy esistente o di un documento di policy.

## Esempio di modello per la registrazione in blocco
<a name="bulk-template-example"></a>

Il seguente file JSON è un esempio di un modello di provisioning completo che specifica il certificato con una CSR:

(Il valore del campo `PolicyDocument` deve essere un oggetto JSON specificato come stringa con carattere escape).

```
{
    "Parameters" : {
        "ThingName" : {
            "Type" : "String"
        },
        "SerialNumber" : {
            "Type" : "String"
        },
        "Location" : {
            "Type" : "String",
            "Default" : "WA"
        },
        "CSR" : {
            "Type" : "String"    
        }
    },
    "Resources" : {
        "thing" : {
            "Type" : "AWS::IoT::Thing",
            "Properties" : {
                "ThingName" : {"Ref" : "ThingName"},
                "AttributePayload" : { "version" : "v1", "serialNumber" :  {"Ref" : "SerialNumber"}}, 
                "ThingTypeName" :  "lightBulb-versionA",
                "ThingGroups" : ["v1-lightbulbs", {"Ref" : "Location"}]
            }
        },
        "certificate" : {
            "Type" : "AWS::IoT::Certificate",
            "Properties" : {
                "CertificateSigningRequest": {"Ref" : "CSR"},
                "Status" : "ACTIVE",
                "ThingPrincipalType" : "EXCLUSIVE_THING"
            }
        },
        "policy" : {
            "Type" : "AWS::IoT::Policy",
            "Properties" : {
                "PolicyDocument" : "{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
            }
        }
    }
}
```

## Esempio di modello per il just-in-time provisioning (JITP)
<a name="JITP-template-example"></a>

Il seguente file JSON è un esempio di un modello di provisioning completo che specifica un certificato esistente con un ID certificato:

```
{
   "Parameters":{
      "AWS::IoT::Certificate::CommonName":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::SerialNumber":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Country":{
         "Type":"String"
      },
      "AWS::IoT::Certificate::Id":{
         "Type":"String"
      }
   },
   "Resources":{
      "thing":{
         "Type":"AWS::IoT::Thing",
         "Properties":{
            "ThingName":{
               "Ref":"AWS::IoT::Certificate::CommonName"
            },
            "AttributePayload":{
               "version":"v1",
               "serialNumber":{
                  "Ref":"AWS::IoT::Certificate::SerialNumber"
               }
            },
            "ThingTypeName":"lightBulb-versionA",
            "ThingGroups":[
               "v1-lightbulbs",
               {
                  "Ref":"AWS::IoT::Certificate::Country"
               }
            ]
         },
         "OverrideSettings":{
            "AttributePayload":"MERGE",
            "ThingTypeName":"REPLACE",
            "ThingGroups":"DO_NOTHING"
         }
      },
      "certificate":{
         "Type":"AWS::IoT::Certificate",
         "Properties":{
            "CertificateId":{
               "Ref":"AWS::IoT::Certificate::Id"
            },
            "Status":"ACTIVE",
            "ThingPrincipalType" : "EXCLUSIVE_THING"
         }
      },
      "policy":{
         "Type":"AWS::IoT::Policy",
         "Properties":{
            "PolicyDocument":"{ \"Version\": \"2012-10-17\",		 	 	  \"Statement\": [{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-east-1:123456789012:topic/foo/bar\"] }] }"
         }
      }
   }
}
```

**Importante**  
Devi utilizzare `CertificateId` in un modello utilizzato per il provisioning JIT.

Per ulteriori informazioni sul tipo di modello di provisioning, consulta il riferimento [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html#iot-CreateProvisioningTemplate-request-type](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html#iot-CreateProvisioningTemplate-request-type)all'API. AWS 

Per ulteriori informazioni su come utilizzare questo modello per il just-in-time provisioning, vedere: [J ust-in-time](https://docs.aws.amazon.com/iot/latest/developerguide/jit-provisioning.html) provisioning.

## Provisioning del parco istanze
<a name="fleet-provision-template"></a>

I modelli di provisioning della flotta vengono utilizzati da AWS IoT per configurare la configurazione del cloud e dei dispositivi. Questi modelli utilizzano gli stessi parametri e risorse dei modelli di registrazione JITP e in blocco. Per ulteriori informazioni, consulta [Modelli di provisioning](#provision-template). I modelli di provisioning del parco istanze dispositivi possono contenere una sezione `Mapping` e una sezione `DeviceConfiguration`. È possibile utilizzare funzioni intrinseche all'interno di un modello di provisioning del parco istanze dei dispositivi per generare una configurazione specifica del dispositivo. I modelli di approvvigionamento della flotta sono risorse denominate e sono identificati da ARNs (ad esempio,`arn:aws:iot:us-west-2:1234568788:provisioningtemplate/templateName`).

### Mappature
<a name="mappings"></a>

La sezione `Mappings` opzionale abbina una chiave a un corrispondente set di valori denominati. Ad esempio, se si desidera impostare valori basati su una AWS regione, è possibile creare una mappatura che utilizzi il Regione AWS nome come chiave e contenga i valori che si desidera specificare per ogni regione specifica. Utilizzi quindi la funzione intrinseca `Fn::FindInMap` per recuperare i valori in una mappa.

Non puoi includere parametri, pseudoparametri o funzioni intrinseche di chiamata nella sezione `Mappings`.

### Configurazione del dispositivo
<a name="device-config"></a>

La sezione di configurazione del dispositivo contiene dati arbitrari che si desidera inviare ai dispositivi durante il provisioning. Esempio: 

```
{
    "DeviceConfiguration": {
        "Foo":"Bar"
    }
}
```

Se invii messaggi ai tuoi dispositivi utilizzando il formato di payload JavaScript Object Notation (JSON), AWS IoT Core formatta questi dati come JSON. Se si utilizza il formato di payload Concise Binary Object Representation (CBOR), AWS IoT Core formatta questi dati come CBOR. La sezione `DeviceConfiguration` non supporta gli oggetti JSON nidificati.

### Funzioni intrinseche
<a name="intrinsic-functions"></a>

Le funzioni intrinseche vengono utilizzate in qualsiasi sezione del modello di provisioning ad eccezione della sezione `Mappings`.

`Fn::Join`  
Aggiunge un set di valori in un singolo valore, separato dal delimitatore specificato. Se un delimitatore è una stringa vuota, i valori sono concatenati senza alcun delimitatore.  
`Fn::Join` non è supportato per [Risorse relative alle policy](#policy-resources).

`Fn::Select`  
Restituisce un singolo oggetto da un elenco di oggetti per indice.  
`Fn::Select` non verifica la presenza di valori `null` o se l'indice è fuori dai limiti dell'array. Entrambe le condizioni generano un errore di provisioning, quindi assicurati di aver scelto un valore di indice valido e che l'elenco contenga valori non nulli.

`Fn::FindInMap`  
Restituisce i valori corrispondenti alle chiavi in una mappatura a due livelli dichiarata nella sezione `Mappings`.

`Fn::Split`  
Divide una stringa in un elenco di valori stringa in modo da poter selezionare un elemento dall'elenco di stringhe. Si specifica un delimitatore che stabilisce dove è suddivisa la stringa (ad esempio, una virgola). Dopo aver suddiviso una stringa, utilizzare `Fn::Select` per selezionare un elemento.  
Ad esempio, se nel modello di stack IDs viene importata una stringa di sottorete delimitata da virgole, potete dividere la stringa per ogni virgola. Dall'elenco delle sottoreti IDs, utilizzare per specificare un ID di sottorete `Fn::Select` per una risorsa.

`Fn::Sub`  
Sostituisce le variabili in una stringa di input con valori che puoi specificare. Questa funzione è utilizzabile per costruire comandi o output che includono valori non disponibili finché non crei o aggiorni uno stack.

### Esempio di modello per il provisioning del parco istanze dei dispositivi
<a name="fleet-provisioning-example"></a>

```
{
    "Parameters" : {
        "ThingName" : {
            "Type" : "String"
        },
        "SerialNumber": {
            "Type": "String"
        },
        "DeviceLocation": {
            "Type": "String"
        }
    },
    "Mappings": {
        "LocationTable": {
            "Seattle": {
                "LocationUrl": "https://example.aws"
            }
        }
    },
    "Resources" : {
        "thing" : {
            "Type" : "AWS::IoT::Thing",
            "Properties" : {
                "AttributePayload" : { 
                    "version" : "v1",
                    "serialNumber" : "serialNumber"
                },
                "ThingName" : {"Ref" : "ThingName"},
                "ThingTypeName" : {"Fn::Join":["",["ThingPrefix_",{"Ref":"SerialNumber"}]]},
                "ThingGroups" : ["v1-lightbulbs", "WA"],
                "BillingGroup": "LightBulbBillingGroup"
            },
            "OverrideSettings" : {
                "AttributePayload" : "MERGE",
                "ThingTypeName" : "REPLACE",
                "ThingGroups" : "DO_NOTHING"
            }
        },
        "certificate" : {
            "Type" : "AWS::IoT::Certificate",
            "Properties" : {
                "CertificateId": {"Ref": "AWS::IoT::Certificate::Id"},
                "Status" : "Active",
                "ThingPrincipalType" : "EXCLUSIVE_THING"
            }
        },
        "policy" : {
            "Type" : "AWS::IoT::Policy",
            "Properties" : {
                "PolicyDocument" : {
                    "Version": "2012-10-17",		 	 	 
                    "Statement": [{
                        "Effect": "Allow",
                        "Action":["iot:Publish"],
                        "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/foo/bar"]
                    }]
                }
            }
        }
    },
    "DeviceConfiguration": {
        "FallbackUrl": "https://www.example.com/test-site",
        "LocationUrl": {
            "Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"}, "LocationUrl"]}
        }
}
```

**Nota**  
È possibile aggiornare un modello di provisioning esistente per aggiungere un [hook di pre-provisioning](pre-provisioning-hook.md).

# Hook di pre-provisioning
<a name="pre-provisioning-hook"></a>

AWS consiglia di utilizzare le funzioni hook di pre-provisioning durante la creazione di modelli di provisioning per consentire un maggiore controllo su quali e quanti dispositivi sono installati dall'account. Gli hook di pre-provisioning sono funzioni Lambda che convalidano i parametri passati dal dispositivo prima di consentire il provisioning dello stesso. Questa funzione Lambda deve esistere nell'account prima di effettuare il provisioning di un dispositivo perché viene chiamata ogni volta che un dispositivo invia una richiesta tramite [RegisterThing](fleet-provision-api.md#register-thing).

**Importante**  
Assicurati di includere il valore `source-arn` o `source-account` nelle chiavi del contesto delle condizioni globali delle policy associate all'operazione Lambda per impedire la manipolazione delle autorizzazioni. Per ulteriori informazioni, consulta [Prevenzione del confused deputy tra servizi](cross-service-confused-deputy-prevention.md).

Per il provisioning dei dispositivi, la funzione Lambda deve accettare l'oggetto di input e restituire l'oggetto di output descritto in questa sezione. Il provisioning procede solo se la funzione Lambda restituisce un oggetto con `"allowProvisioning": True`.

## Input dell'hook di pre-provisioning
<a name="pre-provisioning-hook-input"></a>

AWS IoT invia questo oggetto alla funzione Lambda quando un dispositivo si registra con. AWS IoT

```
{
    "claimCertificateId" : "string",
    "certificateId" : "string",
    "certificatePem" : "string",
    "templateArn" : "arn:aws:iot:us-east-1:1234567890:provisioningtemplate/MyTemplate",
    "clientId" : "221a6d10-9c7f-42f1-9153-e52e6fc869c1",
    "parameters" : {
        "string" : "string",
        ...
    }
}
```

L'oggetto `parameters` passato alla funzione Lambda contiene le proprietà nell'argomento `parameters` passato nel payload della richiesta [RegisterThing](fleet-provision-api.md#register-thing). 

## Valore restituito dall'hook di pre-provisioning
<a name="pre-provisioning-hook-output"></a>

La funzione Lambda deve restituire una risposta che indica se ha autorizzato la richiesta di provisioning e i valori di qualsiasi proprietà da sovrascrivere.

Di seguito è riportato un esempio di risposta riuscita dalla funzione di pre-provisioning.

```
{
    "allowProvisioning": true,
    "parameterOverrides" : {
        "Key": "newCustomValue",
        ...
    }
}
```

I valori `"parameterOverrides"` verranno aggiunti al parametro `"parameters"` nella richiesta di payload [RegisterThing](fleet-provision-api.md#register-thing).

**Nota**  
Se la funzione Lambda fallisce, la richiesta di provisioning fallisce `ACCESS_DENIED` e viene registrato un errore in Logs. CloudWatch 
Se la funzione Lambda non restituisce `"allowProvisioning": "true"` nella risposta, la richiesta di provisioning fallisce restituendo `ACCESS_DENIED`.
La funzione Lambda deve terminare l'esecuzione e restituire il valore entro 5 secondi, altrimenti la richiesta di provisioning non riesce.

## Esempio di hook di pre-provisioning Lambda
<a name="pre-provisioning-example"></a>

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

Un esempio di hook di pre-provisioning Lambda in Python.

```
import json

def pre_provisioning_hook(event, context):
    print(event)

    return {
        'allowProvisioning': True,
        'parameterOverrides': {
            'DeviceLocation': 'Seattle'
        }
    }
```

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

Un esempio di hook di pre-provisioning Lambda in Java.

Classe gestore:

```
package example;

import java.util.Map;
import java.util.HashMap;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class PreProvisioningHook implements RequestHandler<PreProvisioningHookRequest, PreProvisioningHookResponse> {

    public PreProvisioningHookResponse handleRequest(PreProvisioningHookRequest object, Context context) {
        Map<String, String> parameterOverrides = new HashMap<String, String>();
        parameterOverrides.put("DeviceLocation", "Seattle");

        PreProvisioningHookResponse response = PreProvisioningHookResponse.builder()
                .allowProvisioning(true)
                .parameterOverrides(parameterOverrides)
                .build();

        return response;
    }

}
```

Classe richiesta:

```
package example;

import java.util.Map;
import lombok.Builder;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PreProvisioningHookRequest {
    private String claimCertificateId;
    private String certificateId;
    private String certificatePem;
    private String templateArn;
    private String clientId;
    private Map<String, String> parameters;
}
```

Classe risposta:

```
package example;

import java.util.Map;
import lombok.Builder;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;


@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PreProvisioningHookResponse {
    private boolean allowProvisioning;
    private Map<String, String> parameterOverrides;
}
```

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

Un esempio di hook di pre-provisioning Lambda in. JavaScript

```
exports.handler = function(event, context, callback) {
    console.log(JSON.stringify(event, null, 2));
    var reply = { 
        allowProvisioning: true,
        parameterOverrides: {
            DeviceLocation: 'Seattle'
        }
     };
     callback(null, reply);
}
```

------

# Firma dei certificati autogestita tramite provider di certificati AWS IoT Core
<a name="provisioning-cert-provider"></a>

È possibile creare un fornitore di AWS IoT Core certificati per firmare le richieste di firma dei certificati (CSRs) in AWS IoT Fleet Provisioning. Un fornitore di certificati fa riferimento a una funzione Lambda e all'[API `CreateCertificateFromCsr` MQTT per](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) il provisioning della flotta. La funzione Lambda accetta un CSR e restituisce un certificato client firmato.

Quando non disponete di un fornitore di certificati Account AWS, l'[API CreateCertificateFromCsr MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) viene richiamata in Fleet Provisioning per generare il certificato a partire da una CSR. Dopo aver creato un fornitore di certificati, il comportamento dell'API [CreateCertificateFromCsr MQTT cambierà e tutte le chiamate a questa API](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) MQTT richiameranno il fornitore del certificato per emettere il certificato.

Con il fornitore di AWS IoT Core certificati, è possibile implementare soluzioni che utilizzano autorità di certificazione private (CAs) [AWS Private CA](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html), ad esempio altre autorità di fiducia CAs pubblica o la propria infrastruttura a chiave pubblica (PKI) per firmare la CSR. Inoltre, è possibile utilizzare il fornitore di certificati per personalizzare i campi del certificato client, ad esempio periodi di validità, algoritmi di firma, emittenti ed estensioni.

**Importante**  
È possibile creare un solo fornitore di certificati per. Account AWS La modifica del comportamento di firma si applica all'intera flotta che chiama l'[API CreateCertificateFromCsr MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) fino a quando non si elimina il fornitore di certificati dal proprio Account AWS.

**Topics**
+ [

## Come funziona la firma dei certificati autogestita nel provisioning del parco veicoli
](#provisioning-cert-provider-how-it-works)
+ [

## Input della funzione Lambda del fornitore di certificati
](#provisioning-cert-provider-lambda-input)
+ [

## Valore restituito dalla funzione Lambda del fornitore di certificati
](#provisioning-cert-provider-lambda-return)
+ [

## Funzione Lambda di esempio
](#provisioning-cert-provider-lambda)
+ [

## Firma dei certificati autogestita per il rifornimento del parco veicoli
](#provisioning-self-certificate-signing)
+ [

## AWS CLI comandi per il fornitore di certificati
](#provisioning-cert-provider-cli)

## Come funziona la firma dei certificati autogestita nel provisioning del parco veicoli
<a name="provisioning-cert-provider-how-it-works"></a>

### Concetti chiave
<a name="provisioning-cert-provider-concepts"></a>

I seguenti concetti forniscono dettagli che possono aiutarti a capire come funziona la firma dei certificati autogestita nel AWS IoT provisioning del parco veicoli. Per ulteriori informazioni, consulta [Provisioning dei dispositivi che non dispongono di certificati di dispositivo utilizzando](https://docs.aws.amazon.com//iot/latest/developerguide/provision-wo-cert.html) il provisioning del parco veicoli.

**AWS IoT approvvigionamento del parco veicoli**  
Con AWS IoT Fleet Provisioning (abbreviazione di fleet provisioning), AWS IoT Core genera e consegna in modo sicuro i certificati dei dispositivi ai tuoi dispositivi quando si connettono AWS IoT Core per la prima volta. Puoi utilizzare il provisioning del parco veicoli per connettere dispositivi che non dispongono di certificati di dispositivo a. AWS IoT Core

**Richiesta di firma del certificato (CSR)**  
Nel processo di approvvigionamento della flotta, un dispositivo invia una richiesta AWS IoT Core tramite il sistema MQTT di [approvvigionamento della flotta](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html). APIs Questa richiesta include una richiesta di firma del certificato (CSR), che verrà firmata per creare un certificato client. 

**AWS firma gestita dei certificati nell'ambito del provisioning della flotta**  
AWS managed è l'impostazione predefinita per la firma dei certificati nel provisioning del parco veicoli. Con la firma AWS gestita dei certificati, AWS IoT Core firmerà CSRs utilizzando la propria CAs firma.

**Firma dei certificati gestita automaticamente durante il provisioning del parco veicoli**  
L'autogestione è un'altra opzione per la firma dei certificati nell'ambito del provisioning del parco veicoli. Con la firma dei certificati autogestita, puoi creare un fornitore di AWS IoT Core certificati da firmare. CSRs Puoi utilizzare la firma dei certificati autogestita per firmare CSRs con una CA generata da una CA AWS privata, da un'altra CA pubblicamente affidabile o dalla tua infrastruttura a chiave pubblica (PKI).

**AWS IoT Core fornitore di certificati**  
AWS IoT Core certificate provider (abbreviazione di certificate provider) è una risorsa gestita dal cliente che viene utilizzata per la firma dei certificati autogestita nel provisioning del parco veicoli.

### Diagramma
<a name="provisioning-cert-provider-diagram"></a>

Il diagramma seguente è un'illustrazione semplificata di come funziona la firma degli autocertificati nell'approvvigionamento del parco veicoli. AWS IoT 

![\[AWS IoT Core fornitore di certificati per l'approvvigionamento della flotta\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/provisioning-cert-provider.png)

+ Quando un nuovo dispositivo IoT viene prodotto o introdotto nella flotta, ha bisogno di certificati client con AWS IoT Core cui autenticarsi.
+ Come parte del processo di approvvigionamento della flotta, il dispositivo effettua una richiesta di certificati client tramite il [Fleet Provisioning](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html) MQTT. AWS IoT Core APIs Questa richiesta include una richiesta di firma del certificato (CSR).
+ AWS IoT Core richiama il fornitore del certificato e trasmette la CSR come input al provider.
+ Il fornitore del certificato accetta la CSR come input ed emette un certificato client.

  Per la firma AWS gestita dei certificati, AWS IoT Core firma la CSR utilizzando la propria CA ed emette un certificato client.
+ Con il certificato client emesso, il dispositivo continuerà il provisioning del parco veicoli e stabilirà una connessione sicura con. AWS IoT Core

## Input della funzione Lambda del fornitore di certificati
<a name="provisioning-cert-provider-lambda-input"></a>

AWS IoT Core invia il seguente oggetto alla funzione Lambda quando un dispositivo si registra con essa. Il valore di `certificateSigningRequest` è la CSR in [formato Privacy-Enhanced Mail (PEM) fornita](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-format.html) nella richiesta. `CreateCertificateFromCsr` `principalId`È l'ID del principale a cui ci si connette quando si effettua la AWS IoT Core richiesta. `CreateCertificateFromCsr` `clientId`è l'ID client impostato per la connessione MQTT.

```
{
	"certificateSigningRequest": "string",
	"principalId": "string",
	"clientId": "string"
}
```

## Valore restituito dalla funzione Lambda del fornitore di certificati
<a name="provisioning-cert-provider-lambda-return"></a>

La funzione Lambda deve restituire una risposta che contenga il `certificatePem` valore. Di seguito è riportato un esempio di risposta riuscita. AWS IoT Core utilizzerà il valore restituito (`certificatePem`) per creare il certificato.

```
{
	"certificatePem": "string"
}
```

Se la registrazione va a buon fine, `CreateCertificateFromCsr` restituirà lo stesso `certificatePem` nella `CreateCertificateFromCsr` risposta. Per ulteriori informazioni, vedere l'esempio del payload di risposta di [CreateCertificateFromCsr](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr).

## Funzione Lambda di esempio
<a name="provisioning-cert-provider-lambda"></a>

Prima di creare un fornitore di certificati, devi creare una funzione Lambda per firmare una CSR. Di seguito è riportato un esempio di funzione Lambda in Python. Questa funzione chiama AWS Private CA per firmare l'input CSR, utilizzando una CA privata e l'`SHA256WITHRSA`algoritmo di firma. Il certificato client restituito sarà valido per un anno. Per ulteriori informazioni AWS Private CA e su come creare una CA privata, consulta [Cos'è una CA AWS privata?](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) e [Creazione di una CA privata](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html).

```
import os
import time
import uuid
import boto3

def lambda_handler(event, context):
    ca_arn = os.environ['CA_ARN']
    csr = (event['certificateSigningRequest']).encode('utf-8')

    acmpca = boto3.client('acm-pca')
    cert_arn = acmpca.issue_certificate(
        CertificateAuthorityArn=ca_arn, 
        Csr=csr,
        Validity={"Type": "DAYS", "Value": 365}, 
        SigningAlgorithm='SHA256WITHRSA',
        IdempotencyToken=str(uuid.uuid4())
    )['CertificateArn']
    
    # Wait for certificate to be issued
    time.sleep(1)    
    cert_pem = acmpca.get_certificate(
        CertificateAuthorityArn=ca_arn,
        CertificateArn=cert_arn
    )['Certificate']
    
    return {
        'certificatePem': cert_pem
    }
```

**Importante**  
I certificati restituiti dalla funzione Lambda devono avere lo stesso nome dell'oggetto e la stessa chiave pubblica della Certificate Signing Request (CSR).
L'esecuzione della funzione Lambda deve terminare entro 5 secondi.
La funzione Lambda deve trovarsi nella stessa regione della Account AWS risorsa del fornitore di certificati.
Al responsabile del AWS IoT servizio deve essere concessa l'autorizzazione di invoca la funzione Lambda. Per evitare [confusi problemi con l'assistente](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html), ti consigliamo di impostare `sourceArn` e `sourceAccount` per i permessi di invoca. Per ulteriori informazioni consulta la pagina relativa alla [prevenzione del problema "confused deputy" tra servizi](https://docs.aws.amazon.com//iot/latest/developerguide/cross-service-confused-deputy-prevention.html).

Il seguente esempio di policy basata sulle risorse per Lambda concede l' AWS IoT autorizzazione a richiamare la funzione [Lambda](https://docs.aws.amazon.com//lambda/latest/dg/access-control-resource-based.html):

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Id": "InvokePermission",
	"Statement": [
		{
			"Sid": "LambdaAllowIotProvider",
			"Effect": "Allow",
			"Principal": {
				"Service": "iot.amazonaws.com"
			},
			"Action": "lambda:InvokeFunction",
			"Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
			"Condition": {
				"StringEquals": {
					"AWS:SourceAccount": "123456789012"
				},
				"ArnLike": {
				"AWS:SourceArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider/my-certificate-provider"
				}
			}
		}
	]
}
```

## Firma dei certificati autogestita per il rifornimento del parco veicoli
<a name="provisioning-self-certificate-signing"></a>

Puoi scegliere la firma dei certificati autogestita per il rifornimento della flotta utilizzando o. AWS CLI Console di gestione AWS

### AWS CLI
<a name="provisioning-self-certificate-signing-cli"></a>

Per scegliere la firma dei certificati autogestita, è necessario creare un fornitore di AWS IoT Core certificati per accedere CSRs al provisioning del parco veicoli. AWS IoT Core richiama il fornitore del certificato, che accetta un CSR come input e restituisce un certificato client. Per creare un fornitore di certificati, utilizza l'operazione `CreateCertificateProvider` API o il comando `create-certificate-provider` CLI.

**Nota**  
Dopo aver creato un fornitore di certificati, il comportamento dell'[`CreateCertificateFromCsr`API for fleet provisioning cambierà in](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) modo che tutte le chiamate a `CreateCertificateFromCsr` richiameranno il fornitore di certificati per creare i certificati. La modifica di questo comportamento dopo la creazione di un fornitore di certificati può richiedere alcuni minuti.

```
aws iot create-certificate-provider \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-1 \
                --accountDefaultForOperations CreateCertificateFromCsr
```

Di seguito viene illustrato un esempio di output per questo comando:

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Per ulteriori informazioni, vedere `[CreateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` dall'*AWS IoT**API Reference*.

### Console di gestione AWS
<a name="provisioning-self-certificate-signing-console"></a>

Per scegliere di utilizzare la firma dei certificati autogestita Console di gestione AWS, procedi nel seguente modo:

1. Accedere alla [console AWS IoT](https://console.aws.amazon.com//iot/home).

1. Nella barra di navigazione a sinistra, in **Sicurezza**, scegli **Firma del certificato**.

1. Nella pagina di **firma del certificato**, in **Dettagli di firma del certificato**, scegli **Modifica metodo di firma del certificato**.

1. Nella pagina **Modifica metodo di firma del certificato**, in **Metodo di firma del certificato**, scegli **Gestione automatica**.

1. Nella sezione **Impostazioni autogestite**, inserisci un nome per il fornitore di certificati, quindi crea o scegli una funzione Lambda.

1. Scegli **Aggiorna la firma del certificato**.

## AWS CLI comandi per il fornitore di certificati
<a name="provisioning-cert-provider-cli"></a>

### Crea un fornitore di certificati
<a name="provisioning-create-cert-provider"></a>

Per creare un fornitore di certificati, utilizza l'operazione `CreateCertificateProvider` API o il comando `create-certificate-provider` CLI. 

**Nota**  
Dopo aver creato un fornitore di certificati, il comportamento dell'[`CreateCertificateFromCsr`API for fleet provisioning cambierà in](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) modo che tutte le chiamate a `CreateCertificateFromCsr` richiameranno il fornitore di certificati per creare i certificati. La modifica di questo comportamento dopo la creazione di un fornitore di certificati può richiedere alcuni minuti.

```
aws iot create-certificate-provider \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-1 \
                --accountDefaultForOperations CreateCertificateFromCsr
```

Di seguito viene illustrato un esempio di output per questo comando:

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Per ulteriori informazioni, vedere `[CreateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` dall'*AWS IoT**API Reference*.

### Aggiorna il fornitore di certificati
<a name="provisioning-update-cert-provider"></a>

Per aggiornare un fornitore di certificati, utilizza l'operazione `UpdateCertificateProvider` API o il comando `update-certificate-provider` CLI.

```
aws iot update-certificate-provider \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-2 \
                --accountDefaultForOperations CreateCertificateFromCsr
```

Di seguito viene illustrato un esempio di output per questo comando:

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Per ulteriori informazioni, vedere `[UpdateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateCertificateProvider.html)` dall'*AWS IoT**API Reference*.

### Descrivi il fornitore di
<a name="provisioning-describe-cert-provider"></a>

Per descrivere un fornitore di certificati, utilizza l'operazione `DescribeCertificateProvider` API o il comando `describe-certificate-provider` CLI.

```
aws iot describe-certificate-provider --certificateProviderName my-certificate-provider
```

Di seguito viene illustrato un esempio di output per questo comando:

```
{
	"certificateProviderName": "my-certificate-provider",
	"lambdaFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
	"accountDefaultForOperations": [
		"CreateCertificateFromCsr"
	],
	"creationDate": "2022-11-03T00:15",
	"lastModifiedDate": "2022-11-18T00:15"
}
```

Per ulteriori informazioni, vedere `[DescribeCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeCertificateProvider.html)` dall'*AWS IoT**API Reference*.

### Eliminare il fornitore di certificati
<a name="provisioning-delete-cert-provider"></a>

Per eliminare un fornitore di certificati, utilizza l'operazione `DeleteCertificateProvider` API o il comando `delete-certificate-provider` CLI. Se elimini la risorsa relativa al fornitore di certificati, il comportamento di `CreateCertificateFromCsr` riprenderà e AWS IoT verranno creati certificati firmati AWS IoT da una CSR.

```
aws iot delete-certificate-provider --certificateProviderName my-certificate-provider
```

Il comando non produce output. 

Per ulteriori informazioni, consulta l'*AWS IoT**API `[DeleteCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_DeleteCertificateProvider.html)`* Reference.

### Elenca i fornitori di certificati
<a name="provisioning-list-cert-provider"></a>

Per elencare i fornitori di certificati all'interno del tuo Account AWS, utilizza l'operazione `ListCertificateProviders` API o il comando `list-certificate-providers` CLI.

```
aws iot list-certificate-providers
```

Di seguito viene illustrato un esempio di output per questo comando:

```
{
	"certificateProviders": [
		{
			"certificateProviderName": "my-certificate-provider",
			"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
		}
	]
}
```

Per ulteriori informazioni, vedere [https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html](https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html)dall'*AWS IoT**API Reference*.

# Creazione di policy e ruoli IAM per un utente che installa un dispositivo
<a name="provision-create-role"></a>

**Nota**  
Queste procedure possono essere utilizzate solo se indicate dalla AWS IoT console.  
Per accedere a questa pagina dalla console, apri [crea un nuovo modello di provisioning](https://console.aws.amazon.com//iot/home#/provisioningtemplate/create/provisioningmethods/trustedUser).

## Perché questa operazione non può essere eseguita nella AWS IoT console?
<a name="provision-create-role-why"></a>

Per un'esperienza più sicura, le operazioni IAM vengono eseguite nella console IAM. Le procedure di questa sezione illustrano i passaggi per creare i ruoli e le policy IAM necessarie per l'utilizzo del modello di provisioning.

## Creazione di una policy IAM per l'utente che installerà un dispositivo
<a name="provision-create-role-policy"></a>

Questa procedura descrive in che modo creare una policy IAM che autorizza un utente a installare un dispositivo utilizzando un modello di provisioning.

Durante l'esecuzione di questa procedura, passerai dalla console IAM alla AWS IoT console. Si consiglia di tenere entrambe le console aperte contemporaneamente mentre si completa questa procedura.

**Per creare una policy IAM per l'utente che installerà un dispositivo**

1. Aprire la pagina [Policies hub in the IAM console (Hub delle policy nella console IAM)](https://console.aws.amazon.com//iamv2/home#/policies).

1. Scegli **Crea policy**.

1. Nella pagina **Crea policy**, scegli la scheda **JSON**.

1. Passa alla pagina della AWS IoT console in cui hai scelto **Configura la politica e il ruolo dell'utente**.

1. Nella **Sample provisioning policy** (Policy di provisioning di esempio), scegliere **Copy** (Copia).

1. Tornare alla console IAM.

1. Nell'editor **JSON**, incolla la policy che hai copiato dalla AWS IoT console. Questa politica è specifica per il modello che stai creando nella AWS IoT console.

1. Scegliere **Next: Tags (Avanti: Tag)** per continuare.

1. Sulla pagina **Add tags (Optional)** (Aggiungi tag (Facoltativo)), scegliere **Add tags** (Aggiungi tag) per ogni tag che si desidera aggiungere a questa policy. È possibile ignorare questo passaggio se non si dispone di tag da aggiungere.

1. Per continuare, selezionare **Next: Review (Avanti: esamina)**.

1. Nella pagina **Review Policy (Rivedi policy)**, effettua le operazioni seguenti:

   1. Alla voce **Name\$1** (Nome\$1), inserire un nome per la policy che aiuterà a ricordare lo scopo della policy.

      Prendere nota del nome assegnato a questa policy perché verrà utilizzato nella procedura successiva.

   1. È possibile scegliere di inserire una descrizione opzionale per la policy che si sta creando.

   1. Consultare il resto di questa policy e i relativi tag.

1. Scegliere **Create Policy** (Crea policy) per completare la creazione della policy.

Dopo aver creato la nuova policy, proseguire su [Creazione di un ruolo IAM per l'utente che installerà un dispositivo](#provision-create-role-role) per creare la voce del ruolo dell'utente a cui associare questa policy.

## Creazione di un ruolo IAM per l'utente che installerà un dispositivo
<a name="provision-create-role-role"></a>

Questi passaggi descrivono il modo in cui creare un ruolo IAM che autentichi l'utente che installerà un dispositivo utilizzando un modello di provisioning.

**Per creare una policy IAM per l'utente che installerà un dispositivo**

1. Aprire la pagina [Role hub in the IAM console (Hub dei ruoli nella console IAM)](https://console.aws.amazon.com//iamv2/home#/roles).

1. Scegli **Crea ruolo**.

1. Alla voce **Select trusted entity** (Seleziona entità attendibile), scegliere il tipo di entità attendibile a cui si desidera concedere l'accesso al modello che si stai creando.

1. Scegliere o immettere l'identificativo dell'entità attendibile a cui si desidera concedere l'accesso, quindi scegliere **Next** (Successivo).

1. Nella pagina **Add permissions** (Aggiungi autorizzazioni), alla voce **Permission policies** (Policy di autorizzazione), immettere nella casella di ricerca il nome della policy creata nella [procedura precedente](#provision-create-role-policy).

1. Per l'elenco delle policy, scegliere la policy creata nella procedura precedente, quindi scegliere **Next** (Successivo).

1. Nella sezione **Name, review, and create** (Assegna un nome, rivedi e crea), eseguire le operazioni seguenti:

   1. In **Role name** (Nome ruolo), immettere un nome del ruolo che consenta di identificarne lo scopo.

   1. Per **Description (Descrizione)**, è possibile scegliere di immettere una descrizione opzionale del ruolo. Questo passaggio non è obbligatorio per proseguire.

   1. Rivedere i valori di **Passaggio 1** e **Passaggio 2**.

   1. Alla voce **Add tags (Optional)** (Aggiungi tag (Facoltativo)), è possibile scegliere di aggiungere tag a questo ruolo. Questo passaggio non è obbligatorio per proseguire.

   1. Verificare che le informazioni in questa pagina siano complete e corrette, quindi scegliere **Create role** (Crea ruolo). 

Dopo aver creato il nuovo ruolo, torna alla AWS IoT console per continuare a creare il modello.

## Aggiornamento di una policy esistente per autorizzare un nuovo modello
<a name="provision-create-role-update"></a>

Nei passaggi seguenti viene descritto come aggiungere un nuovo modello a una policy IAM che autorizza un utente a installare un dispositivo utilizzando un modello di provisioning.

**Per aggiungere un nuovo modello a una policy IAM esistente**

1. Aprire la pagina [Policies hub in the IAM console (Hub delle policy nella console IAM)](https://console.aws.amazon.com//iamv2/home#/policies).

1. Nella casella di ricerca inserire il nome della policy da aggiornare.

1. Nell'elenco sotto la casella di ricerca, individuare la policy che si desidera aggiornare e scegliere il suo nome.

1. Alla voce **Policy summary** (Riepilogo policy), scegliere la scheda **JSON** se tale pannello non è già visibile.

1. Se si desidera modificare la policy, scegliere **Edit policy** (Modifica policy).

1. Nell'editor, scegliere la scheda **JSON** se tale pannello non è già visibile.

1. Nel documento sulla policy, individuare l'istruzione della policy che contiene l'operazione `iot:CreateProvisioningClaim`.

   Se il documento della policy non contiene un'istruzione della policy con l'operazione `iot:CreateProvisioningClaim`, copiare il seguente frammento di istruzione e incollarlo come voce aggiuntiva nella sezione `Statement` nel documento della policy. 
**Nota**  
Questo frammento deve essere inserito prima del carattere `]` di chiusura della sezione `Statement`. Potrebbe essere necessario aggiungere una virgola prima o dopo questo frammento per correggere eventuali errori di sintassi.

   ```
   {
       "Effect": "Allow",
       "Action": [
           "iot:CreateProvisioningClaim"
       ],
       "Resource": [
           "--PUT YOUR NEW TEMPLATE ARN HERE--"
       ]
   }
   ```

1. Passa alla pagina della AWS IoT console in cui hai scelto **Modifica le autorizzazioni del ruolo utente**.

1. Individuare il **Resource ARN** (ARN della risorsa) del modello e scegliere **Copy** (Copia).

1. Tornare alla console IAM.

1. Incolla l'Amazon Resource Name (ARN) copiato nella parte superiore dell'elenco di ARNs modelli nell'array in `Statement` modo che sia la prima voce.

   Se questo è l'unico ARN nella sezione, rimuovere la virgola alla fine del valore appena incollato.

1. Esaminare l'istruzione della policy aggiornata e correggere eventuali errori indicati dall'editor.

1. Per salvare il documento di policy aggiornato, scegliere **Review policy** (Revisione policy).

1. Esaminare la policy e quindi scegliere **Save changes** (Salva modifiche).

1. Torna alla console. AWS IoT 

# API MQTT di provisioning del dispositivo
<a name="fleet-provision-api"></a><a name="provision-mqtt-api"></a>

Il servizio Fleet Provisioning supporta le seguenti operazioni dell'API MQTT:
+ `CreateCertificateFromCsr`
+ `CreateKeysAndCertificate`
+ `RegisterThing`

Questa API supporta buffer di risposta in formato Concise Binary Object Representation (CBOR) e JavaScript Object Notation (JSON), a seconda dell'argomento. *payload-format* Per maggiore chiarezza, gli esempi di risposta e richiesta in questa sezione sono mostrati in formato JSON.


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

**Importante**  
Prima di pubblicare un argomento del messaggio di richiesta, sottoscrivere gli argomenti di risposta per ricevere la risposta. I messaggi utilizzati da questa API utilizzano il protocollo di pubblicazione/sottoscrizione di MQTT per fornire un'interazione di richiesta e risposta.   
Se non ti iscrivi agli argomenti di risposta *prima di* pubblicare una richiesta, potresti non ricevere i risultati di quella richiesta.  
IoT Core Fleet Provisioning restituisce i risultati dell'API MQTT di provisioning del dispositivo tramite la stessa connessione MQTT utilizzata per pubblicare la richiesta API.

## CreateCertificateFromCsr
<a name="create-cert-csr"></a>

Crea un certificato da una richiesta di firma del certificato (CSR). AWS IoT fornisce certificati client firmati dall'autorità di certificazione Amazon Root (CA). Il nuovo certificato ha uno stato `PENDING_ACTIVATION`. Quando si chiama `RegisterThing` per eseguire il provisioning di un oggetto con questo certificato, lo stato del certificato cambia in `ACTIVE` o `INACTIVE` come descritto nel modello.

Per ulteriori informazioni sulla creazione di un certificato client utilizzando il certificato dell'autorità di certificazione e una richiesta di firma del certificato, consulta [Creare un certificato client utilizzando il certificato CA](create-device-cert.md).

**Nota**  
Per sicurezza, il valore `certificateOwnershipToken` restituito da `CreateCertificateFromCsr` scade dopo un'ora. `RegisterThing` deve essere chiamato prima della scadenza di `certificateOwnershipToken`. Se il certificato creato da `CreateCertificateFromCsr` non è stato attivato e allegato a una politica o a un oggetto entro la scadenza del token, il certificato viene eliminato. Se il token scade, il dispositivo può chiamare `CreateCertificateFromCsr` per generare un nuovo certificato.

### CreateCertificateFromCsr richiesta
<a name="create-cert-csr-request"></a>

Pubblicare un messaggio con l'argomento `$aws/certificates/create-from-csr/payload-format`.

`payload-format`  
Formato di payload del messaggio come `cbor` o `json`.

#### CreateCertificateFromCsr richiedere un payload
<a name="create-cert-csr-request-payload"></a>

```
{
    "certificateSigningRequest": "string"
}
```

`certificateSigningRequest`  
La CSR, in formato PEM.

### CreateCertificateFromCsr risposta
<a name="create-cert-csr-response"></a>

Sottoscrizione ad `$aws/certificates/create-from-csr/payload-format/accepted`.

`payload-format`  
Formato di payload del messaggio come `cbor` o `json`.

#### CreateCertificateFromCsr carico utile di risposta
<a name="create-cert-csr-response-payload"></a>

```
{
    "certificateOwnershipToken": "string",
    "certificateId": "string",
    "certificatePem": "string"
}
```

`certificateOwnershipToken`  
Il token per dimostrare la proprietà del certificato durante il provisioning. 

`certificateId`  
ID del certificato. Le operazioni di gestione dei certificati accettano solo un parametro certificateId. 

`certificatePem`  
Dati del certificato, in formato PEM.

### CreateCertificateFromCsr errore
<a name="create-cert-csr-error"></a>

Per ricevere risposte di errore, iscriviti a `$aws/certificates/create-from-csr/payload-format/rejected`.

`payload-format`  
Formato di payload del messaggio come `cbor` o `json`.

#### CreateCertificateFromCsr payload di errore
<a name="create-cert-csr-error-payload"></a>

```
{
    "statusCode": int,
    "errorCode": "string",
    "errorMessage": "string"
}
```

`statusCode`  
Il codice di stato.

`errorCode`  
Il codice di errore.

`errorMessage`  
Messaggio di errore.

## CreateKeysAndCertificate
<a name="create-keys-cert"></a>

Crea nuove chiavi e un certificato. AWS IoT fornisce certificati client firmati dall'autorità di certificazione Amazon Root (CA). Il nuovo certificato ha uno stato `PENDING_ACTIVATION`. Quando si chiama `RegisterThing` per eseguire il provisioning di un oggetto con questo certificato, lo stato del certificato cambia in `ACTIVE` o `INACTIVE` come descritto nel modello.

**Nota**  
Per sicurezza, il valore `certificateOwnershipToken` restituito da `CreateKeysAndCertificate` scade dopo un'ora. `RegisterThing` deve essere chiamato prima della scadenza di `certificateOwnershipToken`. Se il certificato creato da `CreateKeysAndCertificate` non è stato attivato e allegato a una politica o a un oggetto entro la scadenza del token, il certificato viene eliminato. Se il token scade, il dispositivo può chiamare `CreateKeysAndCertificate` per generare un nuovo certificato.

### CreateKeysAndCertificate richiesta
<a name="create-keys-cert-request"></a>

Pubblicare un messaggio su `$aws/certificates/create/payload-format` con un payload di messaggio vuoto.

`payload-format`  
Formato di payload del messaggio come `cbor` o `json`.

### CreateKeysAndCertificate risposta
<a name="create-keys-cert-response"></a>

Sottoscrizione ad `$aws/certificates/create/payload-format/accepted`.

`payload-format`  
Formato di payload del messaggio come `cbor` o `json`.

#### CreateKeysAndCertificate risposta
<a name="create-keys-cert-response-payload"></a>

```
{
    "certificateId": "string",
    "certificatePem": "string",
    "privateKey": "string",
    "certificateOwnershipToken": "string"
}
```

`certificateId`  
ID certificato.

`certificatePem`  
Dati del certificato, in formato PEM.

`privateKey`  
Chiave privata.

`certificateOwnershipToken`  
Il token per dimostrare la proprietà del certificato durante il provisioning.

### CreateKeysAndCertificate errore
<a name="create-keys-cert-error"></a>

Per ricevere risposte di errore, iscriviti a `$aws/certificates/create/payload-format/rejected`.

`payload-format`  
Formato di payload del messaggio come `cbor` o `json`.

#### CreateKeysAndCertificate payload di errore
<a name="create-keys-cert-error-payload"></a>

```
{
    "statusCode": int,
    "errorCode": "string",
    "errorMessage": "string"
}
```

`statusCode`  
Il codice di stato.

`errorCode`  
Il codice di errore.

`errorMessage`  
Messaggio di errore.

## RegisterThing
<a name="register-thing"></a>

Esegue il provisioning di un oggetto utilizzando un modello predefinito.

### RegisterThing richiesta
<a name="register-thing-request"></a>

Pubblicare un messaggio su `$aws/provisioning-templates/templateName/provision/payload-format`.

`payload-format`  
Formato di payload del messaggio come `cbor` o `json`.

`templateName`  
Il nome del modello di provisioning.

#### RegisterThing richiedere un payload
<a name="register-thing-request-payload"></a>

```
{
    "certificateOwnershipToken": "string",
    "parameters": {
        "string": "string",
        ...
    }
}
```

`certificateOwnershipToken`  
Il token per dimostrare la proprietà del certificato. AWS IoT genera il token quando si crea un certificato su MQTT.

`parameters`  
Opzionale. Coppie chiave-valore dal dispositivo utilizzato dagli [hook di pre-provisioning](pre-provisioning-hook.md) per valutare la richiesta di registrazione.

### RegisterThing risposta
<a name="register-thing-response"></a>

Sottoscrizione ad `$aws/provisioning-templates/templateName/provision/payload-format/accepted`.

`payload-format`  
Formato di payload del messaggio come `cbor` o `json`.

`templateName`  
Il nome del modello di provisioning.

#### RegisterThing carico utile di risposta
<a name="register-thing-response-payload"></a>

```
{
    "deviceConfiguration": {
        "string": "string",
        ...
    },
    "thingName": "string"
}
```

`deviceConfiguration`  
La configurazione del dispositivo definita nel modello.

`thingName`  
Il nome dell'oggetto IoT creato durante il provisioning.

### RegisterThing risposta all'errore
<a name="register-thing-error"></a>

Per ricevere risposte di errore, iscriviti a `$aws/provisioning-templates/templateName/provision/payload-format/rejected`.

`payload-format`  
Formato di payload del messaggio come `cbor` o `json`.

`templateName`  
Il nome del modello di provisioning.

#### RegisterThing payload di risposta agli errori
<a name="register-thing-error-payload"></a>

```
{
    "statusCode": int,
    "errorCode": "string",
    "errorMessage": "string"
}
```

`statusCode`  
Il codice di stato.

`errorCode`  
Il codice di errore.

`errorMessage`  
Messaggio di errore.