

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

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

Quando i tuoi dispositivi provano a connettersi per la prima volta a AWS IoT, puoi utilizzare il provisioning just-in-time (JITP) per eseguirne il provisioning. 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 Amazon. [Parametri di provisioning dei dispositivi](metrics_dimensions.md#provisioning-metrics) 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 che è 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 provisioning dei dispositivi utilizzando la funzionalità AWS IoT Core Just-in-Time 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\_ACTIVE.
+ 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 non riesce 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 utilizzarlo anche CloudTrail per risolvere i problemi relativi al tuo modello JITP. Per informazioni sulle metriche registrate in Amazon, consulta. CloudWatch [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'API [RegisterCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) o il comando [`register-ca-certificate`](https://docs.aws.amazon.com/cli/latest/reference/iot/register-ca-certificate.html) della 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 di un certificato CA utilizzando l'operazione API [UpdateCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) o il comando [`update-ca-certificate`](https://docs.aws.amazon.com/cli/latest/reference/iot/update-ca-certificate.html) della 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'API o il comando CLI: [ CreateProvisioningTemplate ](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html) [`create-provisioning-template`](https://docs.aws.amazon.com/cli/latest/reference/iot/create-provisioning-template.html)

   ```
   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 provisioning just-in-time (JITP), è necessario impostare il tipo di modello a `JITP` durante la creazione del modello di provisioning. Per ulteriori informazioni sul tipo di modello, consulta l'*AWS API [ CreateProvisioningTemplate ](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html) Reference. *

1. Per registrare la CA con il nome del modello, utilizza l'API [RegisterCACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) o il comando [`register-ca-certificate`](https://docs.aws.amazon.com/cli/latest/reference/iot/register-ca-certificate.html) della 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}}
   ```