J: approvvigionamento ust-in-time - AWS IoT Core

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

J: approvvigionamento ust-in-time

È 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 Amazon. CloudWatch

Panoramica di JITP

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 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) quando si collega a AWS IoT Core.

Modello di corpo di esempio

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 fallisce se il certificato non ha tutte le proprietà menzionate nella sezione delParameters. 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 Per ulteriori informazioni sui modelli di provisioning, consulta Modelli di provisioning.

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 impostate per il tuo account e causare limitazioni delle chiamate. Se necessario, contatta il supporto clienti AWS per aumentare le quote di limitazione.

Registrare la CA utilizzando il modello di provisioning

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

  2. Registra un certificato CA con l'API RegisterCACertificate o il comando register-ca-certificate 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.

  3. (Facoltativo) Aggiorna le impostazioni di un certificato CA utilizzando l'operazione API UpdateCACertificate o il comando update-ca-certificate 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

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.

  2. Per creare un modello di provisioning, utilizza l'API CreateProvisioningTemplate o il comando create-provisioning-templateCLI:

    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 nell'API Reference.AWS

  3. Per registrare la CA con il nome del modello, utilizza l'API RegisterCACertificate o il comando register-ca-certificate 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