Aprovisionamiento de dispositivos que no tienen certificados de dispositivo mediante el aprovisionamiento de flotas - 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.

Aprovisionamiento de dispositivos que no tienen certificados de dispositivo mediante el aprovisionamiento de flotas

Al utilizar el aprovisionamiento de AWS IoT flotas, AWS IoT puede generar y entregar de forma segura certificados de dispositivo y claves privadas a sus dispositivos cuando se conectan a ellos AWS IoT por primera vez. AWS IoT proporciona certificados de cliente firmados por la autoridad de certificación (CA) raíz de Amazon.

Existen dos formas de utilizar el aprovisionamiento de flotas:

Aprovisionamiento por reclamación

Los dispositivos se pueden fabricar con un certificado de notificación de aprovisionamiento y una clave privada (que son credenciales de uso especial) incrustados. Si estos certificados están registrados AWS IoT, el servicio puede cambiarlos por certificados de dispositivo únicos que el dispositivo puede usar para sus operaciones habituales. El proceso consta de los pasos siguientes:

Antes de entregar el dispositivo
  1. Llame a CreateProvisioningTemplate para crear una plantilla de aprovisionamiento. Esta API devuelve un ARN de plantilla. Para obtener más información, consulte API de MQTT de aprovisionamiento de dispositivos.

    También puede crear una plantilla de aprovisionamiento de flota en la AWS IoT consola.

    1. En el panel de navegación, elija Conectar y, a continuación, Plantilla de aprovisionamiento de flotas.

    2. Elija Crear plantilla y siga las indicaciones.

  2. Cree los certificados y las claves privadas asociadas que se utilizarán como certificados de reclamación de aprovisionamiento.

  3. Registre estos certificados AWS IoT y asocie una política de IoT que restrinja el uso de los certificados. El siguiente ejemplo de política de IoT restringe el uso del certificado asociado a esta política para aprovisionar dispositivos.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iot:Connect"], "Resource": "*" }, { "Effect": "Allow", "Action": ["iot:Publish","iot:Receive"], "Resource": [ "arn:aws:iot:aws-region:aws-account-id:topic/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topic/$aws/provisioning-templates/templateName/provision/*" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/provisioning-templates/templateName/provision/*" ] } ] }
  4. Al aprovisionar dispositivos, otorga al AWS IoT servicio permiso para crear o actualizar recursos de IoT, como cosas y certificados, en tu cuenta. Para ello, asocie la política AWSIoTThingsRegistration gestionada a una función de IAM (denominada función de aprovisionamiento) que confíe en el principal del servicio. AWS IoT

  5. Fabricar el dispositivo con el certificado de reclamación de aprovisionamiento incrustado de forma segura en él.

El dispositivo ya está listo para ser entregado a donde se instalará para su uso.

importante

Las claves privadas de la notificación de aprovisionamiento deben estar protegidas en todo momento, también en el dispositivo. Le recomendamos que utilice AWS IoT CloudWatch métricas y registros para supervisar los indicios de un uso indebido. Si detecta un uso incorrecto, desactive el certificado de reclamación de aprovisionamiento para que no se pueda utilizar para el aprovisionamiento de dispositivos.

Para inicializar el dispositivo para su uso
  1. El dispositivo lo utiliza AWS IoT SDK de dispositivo, SDK para dispositivos móviles y AWS IoT cliente de dispositivo para conectarse y autenticarse AWS IoT mediante el certificado de notificación de aprovisionamiento que está instalado en el dispositivo.

    nota

    Por motivos de seguridad, el certificateOwnershipToken devuelto por CreateCertificateFromCsr y CreateKeysAndCertificate caduca al cabo de una hora. Debe llamarse a RegisterThing antes de que certificateOwnershipToken venza. Si el certificado creado por CreateCertificateFromCsr o CreateKeysAndCertificate no se ha activado y no se ha asociado a una política o a un objeto en el momento de caducar el token, el certificado se eliminará. Si el token caduca, el dispositivo puede volver a llamar a CreateCertificateFromCsr o a CreateKeysAndCertificate para generar un nuevo certificado.

  2. El dispositivo obtiene un certificado permanente y una clave privada mediante una de estas opciones. El dispositivo utilizará el certificado y la clave para todas las autenticaciones futuras AWS IoT.

    1. Llame CreateKeysAndCertificatepara crear un certificado y una clave privada nuevos mediante la autoridad de AWS certificación.

      Or (Disyunción)

    2. Llame a CreateCertificateFromCsr para generar un certificado desde una solicitud de firma de certificado que mantiene su clave privada segura.

  3. Desde el dispositivo, llame a RegisterThing para registrar el dispositivo con AWS IoT y crear recursos en la nube.

    El servicio de aprovisionamiento de flotas utiliza una plantilla de aprovisionamiento para definir y crear recursos en la nube como objetos de IoT. La plantilla puede especificar los atributos y grupos a los que pertenece el objeto. Los grupos de objetos deben existir para poder agregarles el nuevo objeto.

  4. Después de guardar el certificado permanente en el dispositivo, este debe desconectarse de la sesión que inició con el certificado de reclamación de aprovisionamiento y volver a conectarse con el certificado permanente.

El dispositivo ya está listo para comunicarse con normalidad con él AWS IoT.

Aprovisionamiento por usuario de confianza

En muchos casos, un dispositivo se conecta AWS IoT por primera vez cuando un usuario de confianza, como un usuario final o un técnico de instalación, utiliza una aplicación móvil para configurar el dispositivo en su ubicación de despliegue.

importante

Debe administrar el acceso y el permiso del usuario de confianza para realizar este procedimiento. Una forma de hacerlo es proporcionar y mantener una cuenta para el usuario de confianza que lo autentica y le otorga acceso a las características y las operaciones API de AWS IoT necesarias para realizar este procedimiento.

Antes de entregar el dispositivo
  1. Llame a CreateProvisioningTemplate para crear una plantilla de aprovisionamiento y devolver su templateArn y templateName.

  2. Cree un rol de IAM que utilice un usuario de confianza para iniciar el proceso de aprovisionamiento. La plantilla de aprovisionamiento solo permite a ese usuario aprovisionar un dispositivo. Por ejemplo:

    { "Effect": "Allow", "Action": [ "iot:CreateProvisioningClaim" ], "Resource": [ "arn:aws:iot:aws-region:aws-account-id:provisioningtemplate/templateName" ] }
  3. Al aprovisionar dispositivos, otorga al AWS IoT servicio permiso para crear o actualizar recursos de IoT, como cosas y certificados, en tu cuenta. Para ello, asocie la política AWSIoTThingsRegistration gestionada a una función de IAM (denominada función de aprovisionamiento) que confíe en el principal del servicio. AWS IoT

  4. Proporcione los medios para identificar a sus usuarios de confianza, por ejemplo, proporcionándoles una cuenta que pueda autenticarlos y autorizar sus interacciones con las operaciones de la AWS API necesarias para registrar sus dispositivos.

Para inicializar el dispositivo para su uso
  1. El usuario de confianza inicia sesión en su aplicación móvil o servicio web de aprovisionamiento.

  2. La aplicación móvil o la aplicación web utiliza el rol de IAM y llama a CreateProvisioningClaim para obtener un certificado de reclamación de aprovisionamiento temporal de AWS IoT.

    nota

    Por motivos de seguridad, el certificado de reclamación de aprovisionamiento temporal devuelto por CreateProvisioningClaim solo es válido durante cinco minutos. Los pasos siguientes deben devolver correctamente un certificado válido antes de que caduque el certificado de reclamación de aprovisionamiento temporal. Los certificados de reclamación de aprovisionamiento temporal no aparecen en la lista de certificados de su cuenta.

  3. La aplicación móvil o la aplicación web proporciona el certificado de reclamación de aprovisionamiento temporal al dispositivo junto con cualquier información de configuración necesaria, como credenciales Wi-Fi.

  4. El dispositivo utiliza el certificado de reclamación de aprovisionamiento temporal para conectarse a AWS IoT mediante el AWS IoT SDK de dispositivo, SDK para dispositivos móviles y AWS IoT cliente de dispositivo.

  5. El dispositivo obtiene un certificado permanente y una clave privada mediante una de estas opciones a los cinco minutos de conectarse AWS IoT con el certificado de notificación de aprovisionamiento temporal. El dispositivo utilizará el certificado y la clave que estas opciones devuelven para todas las autenticaciones futuras AWS IoT.

    1. Llame CreateKeysAndCertificatepara crear un certificado y una clave privada nuevos mediante la autoridad de AWS certificación.

      Or (Disyunción)

    2. Llame a CreateCertificateFromCsr para generar un certificado desde una solicitud de firma de certificado que mantiene su clave privada segura.

    nota

    Recuerde CreateKeysAndCertificateo CreateCertificateFromCsrdebe devolver un certificado válido en un plazo de cinco minutos a partir de la fecha de conexión AWS IoT con el certificado de solicitud de aprovisionamiento temporal.

  6. El dispositivo llama RegisterThingpara registrarlo AWS IoT y crear recursos en la nube.

    El servicio de aprovisionamiento de flotas utiliza una plantilla de aprovisionamiento para definir y crear recursos en la nube como objetos de IoT. La plantilla puede especificar los atributos y grupos a los que pertenece el objeto. Los grupos de objetos deben existir para poder agregarles el nuevo objeto.

  7. Después de guardar el certificado permanente en el dispositivo, el dispositivo debe desconectarse de la sesión que inició con el certificado de reclamación de aprovisionamiento temporal y volver a conectarse con el certificado permanente.

El dispositivo ya está listo para comunicarse normalmente con él AWS IoT.

Uso de enlaces de preaprovisionamiento con la CLI de AWS

El siguiente procedimiento crea una plantilla de aprovisionamiento con enlaces de preaprovisionamiento. La función de Lambda utilizada aquí es un ejemplo que se puede modificar.

Para crear y aplicar un enlace de preaprovisionamiento a una plantilla de aprovisionamiento
  1. Cree una función de Lambda que tenga una entrada y una salida definidas. Las funciones de Lambda son altamente personalizables. allowProvisioning y parameterOverrides son necesarias para crear enlaces previos al aprovisionamiento. Para obtener más información sobre la creación de funciones Lambda, consulte Utilización AWS Lambda con la interfaz de línea de AWS comandos.

    El siguiente es un ejemplo de una salida de función de Lambda:

    { "allowProvisioning": True, "parameterOverrides": { "incomingKey0": "incomingValue0", "incomingKey1": "incomingValue1" } }
  2. AWS IoT utiliza políticas basadas en recursos para llamar a Lambda, por lo que debe conceder AWS IoT permiso para llamar a su función Lambda.

    importante

    Asegúrese de incluir las claves contextuales de condición global source-arn o source-account en las de las políticas adjuntas a su acción de Lambda para evitar la manipulación de permisos. Para obtener más información acerca de este tema, consulte Prevención de la sustitución confusa entre servicios.

    El siguiente ejemplo utiliza add-permission para dar permiso de IoT a su Lambda.

    aws lambda add-permission \ --function-name myLambdaFunction \ --statement-id iot-permission \ --action lambda:InvokeFunction \ --principal iot.amazonaws.com
  3. Añada un enlace de preaprovisionamiento a una plantilla mediante el comando o. create-provisioning-templateupdate-provisioning-template

    El siguiente ejemplo de CLI utiliza el create-provisioning-templatepara crear una plantilla de aprovisionamiento que tiene ganchos de preaprovisionamiento:

    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

    El resultado de este comando tendrá un aspecto similar al siguiente.

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

    También puede cargar un parámetro desde un archivo en lugar de escribirlo todo como un valor de parámetro de línea de comandos para ahorrar tiempo. Para obtener más información, consulte Carga de parámetros de AWS CLI desde un archivo. A continuación se muestra el parámetro template en formato JSON expandido:

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

    A continuación se muestra el parámetro pre-provisioning-hook en formato JSON expandido:

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