Just-in-time : aprovisionamiento - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Just-in-time : aprovisionamiento

Puede utilizar el just-in-time aprovisionamiento (JITP) para aprovisionar sus dispositivos la primera vez que intenten conectarse a ellos. AWS IoT Para aprovisionar el dispositivo, debe habilitar el registro automático y asociar una plantilla de aprovisionamiento al certificado de CA utilizado para firmar el certificado de dispositivo. Los éxitos y errores de aprovisionamiento se registran como Métricas de aprovisionamiento de dispositivos en Amazon CloudWatch.

Información general de JITP

Cuando un dispositivo intenta conectarse mediante un certificado firmado AWS IoT por un certificado de CA registrado, AWS IoT carga la plantilla del certificado de CA y la utiliza para realizar la llamada RegisterThing. El flujo de trabajo de JITP registra primero un certificado con un valor de estado de PENDING_ACTIVATION. Cuando se completa el flujo de aprovisionamiento del dispositivo, el estado del certificado cambia a ACTIVE.

AWS IoT define los siguientes parámetros que se pueden declarar y a los que se puede hacer referencia en las plantillas de aprovisionamiento:

  • 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

Los valores de estos parámetros de plantilla de aprovisionamiento se limitan a lo que JITP puede extraer del campo de asunto del certificado del dispositivo que se va a aprovisionar. El certificado debe contener valores para todos los parámetros en el cuerpo de la plantilla. El parámetro AWS::IoT::Certificate::Id se refiere a un ID generado internamente, no un ID que se encuentra en el certificado. Puede obtener el valor de este ID mediante la principal() función incluida en una AWS IoT regla.

nota

Puede aprovisionar dispositivos mediante la función de AWS IoT Core just-in-time aprovisionamiento (JITP) sin tener que enviar toda la cadena de confianza en la primera conexión de un dispositivo a una. AWS IoT Core La presentación del certificado de CA es opcional, pero es necesario que el dispositivo envíe la extensión Indicación del nombre del servidor (SNI) cuando se conecte a AWS IoT Core.

Ejemplo de cuerpo de plantilla

El siguiente archivo JSON es un ejemplo de cuerpo de plantilla de JITP completa.

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

Esta plantilla de ejemplo declara valores para los parámetros de aprovisionamiento AWS::IoT::Certificate::CommonName, AWS::IoT::Certificate::SerialNumber, AWS::IoT::Certificate::Country y AWS::IoT::Certificate::Id que se extraen del certificado y se usan en la sección Resources. El flujo de trabajo de JITP utiliza después esta plantilla para llevar a cabo las siguientes acciones:

  • Registrar un certificado y establecer su estado en PENDING_ACTIVE

  • Crear un recurso de objeto

  • Crear un recurso de política

  • Asociar la política al certificado

  • Asociar el certificado al objeto

  • Actualizar el estado del certificado a ACTIVE

Se produce un error en el aprovisionamiento del dispositivo si el certificado no tiene todas las propiedades mencionadas en la Parameters sección. templateBody Por ejemplo, si AWS::IoT::Certificate::Country está incluido en la plantilla, pero el certificado no tiene ninguna propiedad Country, se produce un error en el aprovisionamiento del dispositivo.

También puedes utilizarla CloudTrail para solucionar problemas con tu plantilla JITP. Para obtener información sobre las métricas que se registran en Amazon CloudWatch, consulteMétricas de aprovisionamiento de dispositivos. Para obtener más información acerca del aprovisionamiento de dispositivos, consulte Plantillas de aprovisionamiento.

nota

Durante el proceso de aprovisionamiento, el just-in-time aprovisionamiento (JITP) llama a otras operaciones de la API del plano AWS IoT de control. Estas llamadas pueden superar las cuotas de limitación de AWS IoT establecidas en su cuenta y provocar una limitación controlada de las llamadas. Póngase en contacto con el servicio de atención al cliente de AWS para aumentar las cuotas de limitación controlada, si es necesario.

Registrar CA mediante una plantilla de aprovisionamiento

Para registrar una CA mediante una plantilla de aprovisionamiento completa, siga estos pasos:

  1. Guarde la plantilla de aprovisionamiento y la información del ARN del rol como en el siguiente ejemplo como un archivo JSON:

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

    En este ejemplo, el valor del campo templateBody debe ser un objeto JSON especificado como una cadena de escape y solo puede utilizar los valores de la lista anterior. Puede utilizar distintas herramientas para crear la salida JSON necesaria, como json.dumps (Python) o JSON.stringify (Node). El valor del campo roleARN debe ser el ARN de un rol que tenga AWSIoTThingsRegistration asociado. Además, la plantilla puede utilizar un PolicyName existente en lugar del PolicyDocument insertado en el ejemplo.

  2. Registre un certificado de CA con la operación de API RegisterCACertificate o el comando de CLI register-ca-certificate. Especificará el directorio de la plantilla de aprovisionamiento y la información del ARN del rol que guardó en el paso anterior:

    A continuación, se muestra un ejemplo de cómo registrar un certificado de CA en modo DEFAULT mediante 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

    A continuación, se muestra un ejemplo de cómo registrar un certificado de CA en modo SNI_ONLY mediante 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

    Para obtener más información, consulte Registrar sus certificados de CA.

  3. (Opcional) Actualice la configuración de un certificado de CA mediante la operación de API UpdateCACertificate o el comando de CLI update-ca-certificate.

    El siguiente ejemplo muestra cómo actualizar un certificado de CA con la AWS CLI:

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

Registrar una CA mediante el nombre de la plantilla de aprovisionamiento

Para registrar una CA mediante el nombre de una plantilla de aprovisionamiento, siga estos pasos:

  1. Guarde el cuerpo de la plantilla de aprovisionamiento como un archivo JSON. Puedes encontrar un cuerpo de plantilla de ejemplo en el cuerpo de la plantilla de ejemplo.

  2. Para crear una plantilla de aprovisionamiento, utilice la CreateProvisioningTemplateAPI o el 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

    Para el just-in-time aprovisionamiento (JITP), debe especificar el tipo de plantilla que se utilizará JITP al crear la plantilla de aprovisionamiento. Para obtener más información sobre el tipo de plantilla, consulta la referencia de CreateProvisioningTemplatela AWS API.

  3. Para registrar una CA con el nombre de la plantilla, utilice la API RegisterCACertificate o el comando de CLI register-ca-certificate:

    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