Tutorial: Aprovisionamiento de dispositivos mediante grupos de inscripción de clave simétrica

En este tutorial se muestra cómo aprovisionar de forma segura varios dispositivos de clave simétrica simulados para una única instancia de IoT Hub mediante un grupo de inscripción.

Azure IoT Hub Device Provisioning Service admite dos tipos de inscripciones para los dispositivos de aprovisionamiento:

  • Grupos de inscripción: usados para inscribir varios dispositivos relacionados. En este tutorial se muestra el aprovisionamiento con grupos de inscripción.
  • Inscripciones individuales: usadas para inscribir un solo dispositivo.

Azure IoT Hub Device Provisioning Service admite tres formas de autenticación para el aprovisionamiento de dispositivos:

  • Certificados X.509
  • Módulo de plataforma segura (TPM)
  • Claves simétricas: en este tutorial se muestra la atestación de claves simétricas.

Puede que algunos dispositivos no tengan un certificado, un módulo de plataforma segura o cualquier otra característica de seguridad que se pueda usar para identificar de forma segura al dispositivo. Para estos dispositivos, Azure IoT Hub Device Provisioning Service (DPS) incluye atestación de clave simétrica. La atestación de clave simétrica se puede usar para identificar un dispositivo basándose en información única, como la dirección MAC o un número de serie.

En este tutorial, completará los siguientes objetivos:

  • Defina un id. de registro único para cada dispositivo.
  • Cree un grupo de inscripción que use la atestación de clave simétrica.
  • Genere una clave de dispositivo para cada dispositivo mediante su id. de registro único y la clave de grupo de inscripción compartida.
  • Aprovisione dispositivos mediante la clave de dispositivo y el código de ejemplo en los SDK de dispositivo IoT de Azure.

Este tutorial está orientado a una estación de trabajo basada en Windows. No obstante, también puede realizar los procedimientos en Linux. Para obtener un ejemplo de Linux, vea el Tutorial: Aprovisionamiento de la geolatencia.

Nota

Si ha completado anteriormente Inicio rápido: Aprovisionamiento de un dispositivo de clave simétrica simulado y sigue teniendo configurados los recursos de Azure y el entorno de desarrollo, puede continuar con Creación de un grupo de inscripción de claves simétricas en este tutorial.

Requisitos previos

  • Si utiliza un entorno de desarrollo en Windows, instale Visual Studio 2022 con la carga de trabajo "Desarrollo para el escritorio con C++" habilitada. También se admiten Visual Studio 2019, Visual Studio 2017 y Visual Studio 2015. En el caso de Linux o macOS, consulte la sección correspondiente en Preparación del entorno de desarrollo en la documentación del SDK.

  • Instale el sistema de compilación de CMake más reciente. Asegúrese de comprobar la opción que agrega el ejecutable de CMake a la ruta de acceso.

    Importante

    Confirme que los requisitos previos de Visual Studio (Visual Studio y la carga de trabajo "Desarrollo para el escritorio con C++") estén instalados en la máquina antes de empezar la instalación de CMake. Una vez que los requisitos previos están en su lugar, y se ha comprobado la descarga, instale el sistema de compilación de CMake. Igualmente, tenga en cuenta que las versiones anteriores del sistema de compilación CMake no generan el archivo de solución que se usa en este artículo. Asegúrese de usar la versión más reciente de CMake.

  • Instale el SDK de .NET 6.0 o una versión posterior en una máquina con Windows. Para comprobar la versión, use el siguiente comando.

    dotnet --info
    
  • Instale Python 3.7, o cualquier versión posterior, en una máquina con Windows. Puede comprobar la versión de Python ejecutando python --version.
  • Instale la última versión de Git. Asegúrese de que Git se ha agregado a las variables de entorno accesibles desde la ventana de comandos. Consulte las herramientas de cliente de Git de Software Freedom Conservancy para instalar la versión más reciente de las herramientas git, lo que incluye Git Bash, la aplicación de línea de comandos que puede usar para interactuar con su repositorio de Git local.

Preparación del entorno de desarrollo

En esta sección, preparará un entorno de desarrollo que se usa para compilar el SDK de dispositivo de Azure IoT para C. El código de ejemplo aprovisiona el dispositivo durante la secuencia de arranque del dispositivo.

  1. En un explorador web, vaya a la página de versión de SDK de Azure IoT para C.

  2. Copie el nombre de etiqueta de la versión más reciente del SDK de Azure IoT para C, por ejemplo: lts_03_2024.

  3. Abra un símbolo del sistema de Windows y ejecute los siguientes comandos para clonar la última versión del SDK de dispositivo IoT de Azure para C del repositorio de GitHub. Reemplace <release-tag> por el nombre de la etiqueta que ha copiado en el paso anterior.

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    Esta operación puede tardar varios minutos en completarse.

  4. Una vez completada la operación, ejecute los siguientes comandos desde el directorio azure-iot-sdk-c:

    mkdir cmake
    cd cmake
    
  5. El ejemplo de código usa una clave simétrica para proporcionar atestación. Ejecute el siguiente comando para crear una versión del SDK específica para su plataforma del cliente de desarrollo que incluya el cliente de aprovisionamiento de dispositivos:

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    

    Sugerencia

    Si cmake no encuentra el compilador de C++, es posible que obtenga errores de compilación durante la ejecución del comando anterior. Si eso sucede, pruebe a ejecutar este comando en el símbolo del sistema de Visual Studio.

  6. Cuando la compilación se realiza correctamente, las últimas líneas de salida tendrán un aspecto similar al siguiente:

    $ cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    -- Building for: Visual Studio 16 2019
    -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22621.
    -- The C compiler identification is MSVC 19.29.30146.0
    -- The CXX compiler identification is MSVC 19.29.30146.0
    
    ...
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/azure-iot-sdk-c/cmake
    
  1. Abra un símbolo del sistema o el terminal de Bash de Git.

  2. Use el comando siguiente para clonar el repositorio de GitHub SDK de Azure IoT para C#:

    git clone https://github.com/Azure/azure-iot-sdk-csharp.git
    
  1. Abra un símbolo del sistema o el terminal de Bash de Git.

  2. Utilice el siguiente comando para clonar el repositorio de GitHub del SDK de Azure IoT para Node.js:

    git clone https://github.com/Azure/azure-iot-sdk-node.git --recursive
    
  1. Abra un símbolo del sistema o el terminal de Bash de Git.

  2. Utilice el siguiente comando para clonar el repositorio de GitHub del SDK de dispositivo IoT de Azure para Python:

    git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
    

    Nota

    Los ejemplos que se usan en este tutorial se encuentran en la rama v2 del repositorio azure-iot-sdk-python. La versión 3 del SDK de Python está disponible para su uso en la versión beta. Para obtener información sobre cómo actualizar ejemplos de código V2 para usar una versión V3 del SDK de Python, consulte la guía de migración del SDK de dispositivo loT de Azure para Python.

  1. Abra un símbolo del sistema o el terminal de Bash de Git.

  2. Utilice el siguiente comando para clonar el repositorio de GitHub del SDK de Azure IoT para Java:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. Vaya al directorio azure-iot-sdk-java raíz y compile el proyecto para descargar todos los paquetes necesarios. Este paso puede tardar varios minutos en completarse.

    cd azure-iot-sdk-java
    mvn install -DskipTests=true
    

Crear un grupo de inscripción de clave simétrica

  1. Inicie sesión en Azure Portal y vaya a la instancia de Device Provisioning Service.

  2. Seleccione Administrar inscripciones de la sección Configuración del menú de navegación.

  3. Seleccione Agregar grupo de inscripción.

  4. En la pestaña Registro y aprovisionamiento de la página Agregar grupo de inscripción, proporcione la siguiente información para configurar los detalles del grupo de inscripción:

    Campo Descripción
    Atestación Seleccione Clave simétrica como Mecanismo de atestación.
    Configuración de clave simétrica Active la casilla Generar claves simétricas automáticamente si desea usar claves generadas aleatoriamente. Desactive esta casilla si desea proporcionar sus propias claves.
    Nombre de grupo Proporcione un nombre para el grupo de dispositivos. El nombre del grupo de inscripción es una cadena que no distingue mayúsculas de minúsculas (de hasta 128 caracteres) de caracteres alfanuméricos más los caracteres especiales: '-', '.', '_', ':'. El último carácter debe ser alfanumérico o un guion ('-').
    Estado de aprovisionamiento Active la casilla Habilitar esta inscripción si desea que este grupo de inscripción esté disponible para aprovisionar dispositivos. Desactive esta casilla si desea que el grupo esté deshabilitado. Podrá cambiar esta configuración más adelante.
    Directiva de reaprovisionamiento Elija una directiva de reaprovisionamiento que refleje cómo desea que DPS controle los dispositivos que soliciten el reaprovisionamiento. Para obtener más información, consulte Directivas de reaprovisionamiento

    Screenshot that shows adding an enrollment group for symmetric key attestation.

  5. Seleccione Siguiente: centros de IoT.

  6. En la pestaña Centros de IoT de la página Agregar grupo de inscripción, proporcione la siguiente información para determinar los centros de IoT a los que puede aprovisionar dispositivos el grupo de inscripción:

    Campo Descripción
    Centros de IoT de destino Seleccione uno o varios de los centros de IoT vinculados o agregue un nuevo vínculo a un centro de IoT. Para más información sobre cómo vincular centros de IoT a la instancia de DPS, consulte Vinculación y administración de centros de IoT.
    Directiva de asignación Si seleccionó más de un centro de IoT vinculado, seleccione cómo quiere asignar dispositivos a los distintos centros. Para más información sobre las directivas de asignación, consulte Uso de directivas de asignación.

    Si seleccionó solo un centro de IoT vinculado, se recomienda usar la directiva Distribución uniformemente ponderada.

    Screenshot that shows connecting IoT hubs to the new enrollment group.

  7. Seleccione Siguiente: configuración del dispositivo

  8. En la pestaña Configuración del dispositivo de la página Agregar grupo de inscripción, proporcione la siguiente información para definir cómo se configurarán los dispositivos recién aprovisionados:

    Campo Descripción
    IoT Edge Compruebe Habilitar IoT Edge en dispositivos aprovisionados si todos los dispositivos aprovisionados a través de este grupo ejecutarán Azure IoT Edge. Desactive esta casilla si este grupo es solo para dispositivos no habilitados para IoT Edge. Todos los dispositivos de un grupo estarán habilitados para IoT Edge o ninguno.
    Etiquetas de dispositivo Use este cuadro de texto para proporcionar las etiquetas que quiera aplicar a los dispositivos gemelos de dispositivos aprovisionados.
    Propiedades deseadas Use este cuadro de texto para proporcionar las propiedades deseadas que quiera aplicar a los dispositivos gemelos de dispositivos aprovisionados.

    Para más información, consulte Información y uso de dispositivos gemelos en IoT Hub.

  9. Seleccione Siguiente: Review + create (Revisar y crear).

  10. En la pestaña Revisar y crear, compruebe todos los valores y seleccione Crear.

Al crear el grupo de inscripción, DPS generará una clave principal y una clave secundaria y las agregará a la entrada de la inscripción. El grupo de inscripción de la clave simétrica aparece en la columna Nombre del grupo de la pestaña Grupos de inscripción.

Abra la inscripción y copie el valor de la clave principal. Esta clave es la clave de grupo.

Elección de un identificador de registro único para el dispositivo

Se debe definir un identificador de registro único para identificar cada dispositivo. Puede usar la dirección MAC, el número de serie o cualquier otra información única del dispositivo.

En este ejemplo se usa una combinación de una dirección MAC y un número de serie que forman la siguiente cadena de un identificador de registro.

sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6

Cree identificadores de registro únicos para cada dispositivo. El id. de registro es una cadena que no distingue mayúsculas de minúsculas (de hasta 128 caracteres) de caracteres alfanuméricos más los siguientes caracteres especiales: - . _ :. El último carácter debe ser alfanumérico o un guion (-).

Derivación de una clave de dispositivo

Para generar claves de dispositivo, use la clave principal del grupo de inscripción para calcular un hash HMAC-SHA256 del id. de registro de cada dispositivo. El resultado se convierte luego en formato Base 64 para cada dispositivo.

Advertencia

El código de dispositivo de cada dispositivo solo debe incluir la clave de dispositivo derivada de ese dispositivo. No incluya la clave principal del grupo en el código del dispositivo. Una clave de grupo vulnerada puede poner en peligro la seguridad de todos los dispositivos que se autentican con ella.

La extensión de IoT para la CLI de Azure proporciona el comando az iot dps enrollment-group compute-device-key para generar claves de dispositivo derivadas. Este comando se puede usar desde sistemas basados en Windows y Linux.

Reemplace el valor del parámetro --key por la clave principal del grupo de inscripción.

Reemplace el valor del parámetro --registration-id por el identificador de registro.

az iot dps enrollment-group compute-device-key --key <group_primary_key> --registration-id <device_registration_id>

Resultado de ejemplo:

"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="

Cada dispositivo usa su clave de dispositivo derivada y su identificador de registro único para realizar la atestación de claves simétricas con el grupo de inscripción durante el aprovisionamiento.

Preparación y ejecución del código de aprovisionamiento de dispositivos

En esta sección, actualizará el código de ejemplo del dispositivo para enviar la secuencia de arranque del dispositivo a la instancia del servicio de aprovisionamiento de dispositivos. Esta secuencia de arranque hará que el dispositivo se reconozca, se autentique y se asigne a un centro de IoT vinculado a la instancia del servicio de aprovisionamiento de dispositivos.

El código de aprovisionamiento de ejemplo realiza las siguientes tareas, en orden:

  1. Autentica el dispositivo en el recurso de Device Provisioning, para lo que usa los tres parámetros siguientes:

    • El ámbito de identificador de Device Provisioning Service
    • El identificador de registro del dispositivo.
    • La clave de dispositivo derivada del dispositivo.
  2. Asigna el dispositivo al centro de IoT ya vinculado a la instancia de Device Provisioning Service.

Para actualizar y ejecutar el ejemplo de aprovisionamiento con la información del dispositivo:

  1. En el menú principal de Device Provisioning Service, seleccione Información general.

  2. Copie el valor de del Ámbito de id.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. En Visual Studio, abra el archivo de solución azure_iot_sdks.sln que se ha generado al ejecutar CMake. El archivo de solución debe estar en la siguiente ubicación:

    
    \azure-iot-sdk-c\cmake\azure_iot_sdks.sln
    
    

    Sugerencia

    Si el archivo no se ha generado en el directorio cmake, asegúrese de que usó una versión reciente del sistema de compilación de CMake.

  4. En la ventana Explorador de soluciones de Visual Studio, vaya a la carpeta Provision_Samples. Expanda el proyecto de ejemplo denominado prov_dev_client_sample. Expanda Archivos de origen y abra prov_dev_client_sample.c.

  5. Busque la constante id_scope y reemplace el valor por el valor de Ámbito de id. que copió de Azure Portal.

    static const char* id_scope = "0ne00002193";
    
  6. Busque la definición de la función main() en el mismo archivo. Asegúrese de que la variable hsm_type está establecida en SECURE_DEVICE_TYPE_SYMMETRIC_KEY, tal como se muestra a continuación:

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    //hsm_type = SECURE_DEVICE_TYPE_X509;
    hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  7. Busque la llamada a prov_dev_set_symmetric_key_info() en prov_dev_client_sample.c que se ha convertido en comentario.

    // Set the symmetric key if using they auth type
    //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
    

    Quite la marca de comentario de la llamada de función y reemplace los valores de marcador de posición (incluidos los corchetes angulares) por el identificador de registro que eligió en Elección de un identificador de registro único para el dispositivo y la clave de dispositivo derivada que generó en Derivación de una clave de dispositivo.

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6", "Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc=");
    

    Precaución

    Tenga en cuenta que este paso incluye la clave de dispositivo derivada como parte de la imagen de cada dispositivo, lo que no es un procedimiento recomendado de seguridad. Este es uno de los motivos por los que la seguridad y la facilidad de uso pueden estar a menudo contrapuestos. Debe revisar por completo la seguridad de los dispositivos en función de sus propios requisitos.

  8. Guarde el archivo.

  9. Haga clic con el botón derecho en el proyecto prov_dev_client_sample y seleccione Establecer como proyecto de inicio.

  10. En el menú de Visual Studio, seleccione Depurar>Iniciar sin depurar para ejecutar la solución. En el indicador para recompilar el proyecto, seleccione Yes (Sí) para recompilar el proyecto antes de ejecutarlo.

    La salida siguiente es un ejemplo de conexión correcta del dispositivo a la instancia del servicio de aprovisionamiento para que se asigne a IoT Hub:

    Provisioning API Version: 1.9.1
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-hub-2.azure-devices.net, deviceId: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    Press enter key to exit:
    

El código de aprovisionamiento de ejemplo realiza las siguientes tareas:

  1. Autentica el dispositivo en el recurso de Device Provisioning, para lo que usa los tres parámetros siguientes:

    • El ámbito de identificador de Device Provisioning Service
    • El identificador de registro del dispositivo.
    • La clave de dispositivo derivada del dispositivo.
  2. Asigna el dispositivo al centro de IoT ya vinculado a la instancia de Device Provisioning Service.

  3. Envía un mensaje de telemetría de prueba al centro de IoT.

Para actualizar y ejecutar el ejemplo de aprovisionamiento con la información del dispositivo:

  1. En el menú principal de Device Provisioning Service, seleccione Información general.

  2. Copie el valor de del Ámbito de id.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Abra un símbolo del sistema y vaya a SymmetricKeySample en el repositorio de SDK clonados:

    cd .\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample
    
  4. En la carpeta SymmetricKeySample, abra el archivo Parameters.cs en un editor de texto. Este archivo muestra los parámetros a los que hace referencia el ejemplo. En este artículo, solo se usan los tres primeros parámetros necesarios al ejecutar el ejemplo. Revise el código de este archivo. No es necesario realizar ningún cambio.

    Parámetro Obligatorio Descripción
    --i o --IdScope True Ámbito del identificador de la instancia de DPS.
    --r o --RegistrationId True Identificador de registro del dispositivo. El id. de registro es una cadena que no distingue mayúsculas de minúsculas (de hasta 128 caracteres) de caracteres alfanuméricos más los caracteres especiales: '-', '.', '_', ':'. El último carácter debe ser alfanumérico o un guion ('-').
    --p o --PrimaryKey True Clave principal de una inscripción individual o la clave de dispositivo derivada de una inscripción de grupo.
    --g o --GlobalDeviceEndpoint False Punto de conexión global al que se conectarán los dispositivos. De manera predeterminada, su valor es global.azure-devices-provisioning.net.
    --t o --TransportType False Transporte que se va a utilizar para comunicarse con la instancia de Device Provisioning. Su valor predeterminado es Mqtt. Los valores posibles incluyen Mqtt, Mqtt_WebSocket_Only, Mqtt_Tcp_Only, Amqp, Amqp_WebSocket_Only, Amqp_Tcp_only y Http1.
  5. En la carpeta SymmetricKeySample, abra el archivo ProvisioningDeviceClientSample.cs en un editor de texto. Este archivo muestra cómo se usa la clase SecurityProviderSymmetricKey junto con la clase ProvisioningDeviceClient para aprovisionar el dispositivo de clave simétrica simulado. Revise el código de este archivo. No es necesario realizar ningún cambio.

  6. Compile y ejecute el código de ejemplo mediante el comando siguiente:

    dotnet run --i <id-scope> --r <registration-id> --p <primarykey>
    
  7. Debería ver algo similar a la siguiente salida. Se envía una cadena "TestMessage" al centro como mensaje de prueba.

    D:\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample>dotnet run --i 0ne00000A0A --r sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 --p sbDDeEzRuEuGKag+kQKV+T1QGakRtHpsERLP0yPjwR93TrpEgEh/Y07CXstfha6dhIPWvdD1nRxK5T0KGKA+nQ==
    
    Initializing the device provisioning client...
    Initialized for registration Id sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6.
    Registering with the device provisioning service...
    Registration status: Assigned.
    Device sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 registered to contoso-hub-2.azure-devices.net.
    Creating symmetric key authentication for IoT Hub...
    Testing the provisioned device with IoT Hub...
    Sending a telemetry message...
    Finished.
    

El código de aprovisionamiento de ejemplo realiza las siguientes tareas, en orden:

  1. Autentica el dispositivo en el recurso de Device Provisioning, para lo que usa los cuatro parámetros siguientes:

    • PROVISIONING_HOST
    • PROVISIONING_IDSCOPE
    • PROVISIONING_REGISTRATION_ID
    • PROVISIONING_SYMMETRIC_KEY
  2. Asigna el dispositivo al centro de IoT ya vinculado a la instancia de Device Provisioning Service.

  3. Envía un mensaje de telemetría de prueba al centro de IoT.

Para actualizar y ejecutar el ejemplo de aprovisionamiento con la información del dispositivo:

  1. En el menú principal de Device Provisioning Service, seleccione Información general.

  2. Copie el valor de del Ámbito de id.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Abra un símbolo del sistema para ejecutar comandos de Node.js y vaya al siguiente directorio:

    cd azure-iot-sdk-node\provisioning\device\samples
    
  4. En la carpeta provisioning/device/samples, abra register_symkey.js y examine el código.

    El ejemplo tiene como valor predeterminado MQTT como protocolo de transporte. Si desea usar otro protocolo, marque como comentario la línea siguiente y quite la marca de comentario de la línea del protocolo adecuado.

    var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
    

    Observe también que el código de ejemplo establece una carga personalizada:

    provisioningClient.setProvisioningPayload({a: 'b'});
    

    Puede marcar este código como comentario, ya que no es necesario para este tutorial. Se puede usar una carga personalizada cuando utilice un webhook de asignación personalizado para asignar el dispositivo a una instancia de IoT Hub. Para más información, consulte el Tutorial: Uso de directivas de asignación personalizadas.

    El método provisioningClient.register() intenta registrar el dispositivo.

  5. En el símbolo del sistema, ejecute los comandos siguientes para establecer las variables de entorno que usa el ejemplo:

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    
    set PROVISIONING_IDSCOPE=<id-scope>
    
    set PROVISIONING_REGISTRATION_ID=<registration-id>
    
    set PROVISIONING_SYMMETRIC_KEY=<derived-device-key>
    
  6. Compile y ejecute el código de ejemplo mediante los siguientes comandos:

     npm install
    
    node register_symkey.js
    
  7. Debería ver algo parecido a los siguiente. Se envía la cadena "Hola mundo" al centro como mensaje de prueba.

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    payload=undefined
    Client connected
    send status: MessageEnqueued
    

El código de aprovisionamiento de ejemplo realiza las siguientes tareas, en orden:

  1. Autentica el dispositivo en el recurso de Device Provisioning, para lo que usa los cuatro parámetros siguientes:

    • PROVISIONING_HOST
    • PROVISIONING_IDSCOPE
    • PROVISIONING_REGISTRATION_ID
    • PROVISIONING_SYMMETRIC_KEY
  2. Asigna el dispositivo al centro de IoT ya vinculado a la instancia de Device Provisioning Service.

  3. Envía un mensaje de telemetría de prueba al centro de IoT.

Para actualizar y ejecutar el ejemplo de aprovisionamiento con la información del dispositivo:

  1. En el menú principal de Device Provisioning Service, seleccione Información general.

  2. Copie el valor de del Ámbito de id.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Abra un símbolo del sistema y vaya al directorio donde se encuentra el archivo de ejemplo provision_symmetric_key.py.

    cd azure-iot-sdk-python\samples\async-hub-scenarios
    
  4. En el símbolo del sistema, ejecute los comandos siguientes para establecer las variables de entorno que usa el ejemplo:

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    
    set PROVISIONING_IDSCOPE=<id-scope>
    
    set PROVISIONING_REGISTRATION_ID=<registration-id>
    
    set PROVISIONING_SYMMETRIC_KEY=<derived-device-key>
    
  5. Instale la biblioteca azure-iot-device ejecutando el siguiente comando.

    pip install azure-iot-device
    
  6. Ejecute el código de ejemplo de Python en provision_symmetric_key.py.

    python provision_symmetric_key.py
    
  7. Debería ver algo parecido a los siguiente. También se envían al centro algunos ejemplos de mensajes de telemetría de velocidad del viento como prueba.

    D:\azure-iot-sdk-python\samples\async-hub-scenarios>python provision_symmetric_key.py
    The complete registration result is
    sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    contoso-hub-2.azure-devices.net
    initialAssignment
    null
    Will send telemetry from the provisioned device
    sending message #1
    sending message #2
    sending message #3
    sending message #4
    sending message #5
    sending message #6
    sending message #7
    sending message #8
    sending message #9
    sending message #10
    done sending message #1
    done sending message #2
    done sending message #3
    done sending message #4
    done sending message #5
    done sending message #6
    done sending message #7
    done sending message #8
    done sending message #9
    done sending message #10
    

El código de aprovisionamiento de ejemplo realiza las siguientes tareas, en orden:

  1. Autentica el dispositivo en el recurso de Device Provisioning, para lo que usa los cuatro parámetros siguientes:

    • GLOBAL_ENDPOINT
    • SCOPE_ID
    • REGISTRATION_ID
    • SYMMETRIC_KEY
  2. Asigna el dispositivo al centro de IoT ya vinculado a la instancia de Device Provisioning Service.

  3. Envía un mensaje de telemetría de prueba al centro de IoT.

Para actualizar y ejecutar el ejemplo de aprovisionamiento con la información del dispositivo:

  1. En el menú principal de Device Provisioning Service, seleccione Información general.

  2. Copie el valor de del Ámbito de id.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Abra el código de ejemplo del dispositivo Java para editarlo. La ruta de acceso completa al código de ejemplo del dispositivo es:

    azure-iot-sdk-java/provisioning/provisioning-samples/provisioning-symmetrickey-individual-sample/src/main/java/samples/com/microsoft/azure/sdk/iot/ProvisioningSymmetricKeyIndividualEnrollmentSample.java

  4. Establezca el valor de las variables siguientes para la inscripción de DPS y del dispositivo:

    • Reemplace [Your scope ID here] con el ámbito de id. que copió de Azure Portal.
    • Reemplace [Your Provisioning Service Global Endpoint here] por el punto de conexión de dispositivos global: global.azure-devices-provisioning.net. Este punto de conexión es el mismo para todas las instancias de DPS.
    • Reemplace [Enter your Symmetric Key here] por la clave de dispositivo derivada que generó en Derivación de una clave de dispositivo.
    • Reemplace [Enter your Registration ID here] por el identificador de registro que eligió en Elección de un identificador de registro único para el dispositivo.
    private static final String SCOPE_ID = "[Your scope ID here]";
    private static final String GLOBAL_ENDPOINT = "[Your Provisioning Service Global Endpoint here]";
    private static final String SYMMETRIC_KEY = "[Enter your Symmetric Key here]";
    private static final String REGISTRATION_ID = "[Enter your Registration ID here]";
    

    Precaución

    Tenga en cuenta que este paso incluye la clave de dispositivo derivada como parte de la imagen de cada dispositivo, lo que no es un procedimiento recomendado de seguridad. Este es uno de los motivos por los que la seguridad y la facilidad de uso pueden estar a menudo contrapuestos. Debe revisar por completo la seguridad de los dispositivos en función de sus propios requisitos.

  5. Abra el símbolo del sistema para la compilación. Vaya a la carpeta del proyecto de ejemplo de aprovisionamiento del repositorio del SDK de Java.

    cd azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-symmetrickey-individual-sample
    
  6. Compile el ejemplo.

    mvn clean install
    
  7. Vaya a la carpeta target y ejecute el archivo .jar que se ha creado. En el comando java, reemplace el marcador de posición {version} por la versión en el nombre de archivo .jar de la máquina.

    cd target
    java -jar ./provisioning-symmetrickey-individual-sample-{version}-with-deps.jar
    
  8. Debería ver algo parecido a los siguiente.

    Starting...
    Beginning setup.
    WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
    2022-10-07 18:14:48,388 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.2
    2022-10-07 18:14:48,390 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread...
    Waiting for Provisioning Service to register
    2022-10-07 18:14:48,392 INFO (global.azure-devices-provisioning.net-002edcf5-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service...
    2022-10-07 18:14:48,518 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message
    2022-10-07 18:14:48,521 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using symmetric key
    2022-10-07 18:14:49,252 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device...
    2022-10-07 18:14:49,253 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING
    2022-10-07 18:14:52,459 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully
    IotHUb Uri : contoso-hub-2.azure-devices.net
    Device ID : sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    2022-10-07 18:14:58,424 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-10-07 18:14:58,436 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-10-07 18:14:58,440 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.1.1
    2022-10-07 18:14:58,450 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection...
    2022-10-07 18:14:58,471 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet...
    2022-10-07 18:14:59,314 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged
    2022-10-07 18:14:59,315 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6/messages/devicebound/#
    2022-10-07 18:14:59,378 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6/messages/devicebound/# was acknowledged
    2022-10-07 18:14:59,379 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully
    2022-10-07 18:14:59,381 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established
    2022-10-07 18:14:59,383 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK
    2022-10-07 18:14:59,389 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads
    2022-10-07 18:14:59,392 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details
    2022-10-07 18:14:59,395 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully
    2022-10-07 18:14:59,404 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully
    Sending message from device to IoT Hub...
    2022-10-07 18:14:59,408 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] )
    Press any key to exit...
    2022-10-07 18:14:59,409 DEBUG (contoso-hub-2.azure-devices.net-sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6-c32c76d0-Cxn0e70bbf7-8476-441d-8626-c17250585ee6-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] )
    2022-10-07 18:14:59,777 DEBUG (MQTT Call: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] )
    2022-10-07 18:14:59,779 DEBUG (contoso-hub-2.azure-devices.net-sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6-c32c76d0-Cxn0e70bbf7-8476-441d-8626-c17250585ee6-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] ) with status OK
    Message received! Response status: OK
    

Confirmación del registro de aprovisionamiento de dispositivos

En este tutorial, ha usado la directiva de asignación de configuración estática para asignar dispositivos que se registran mediante el grupo de inscripción en el mismo centro de IoT. Sin embargo, para las asignaciones en las que un dispositivo se puede aprovisionar en uno de varios centros de IoT, puede examinar las entradas de registro del grupo de inscripción para ver en qué centro de IoT se ha aprovisionado el dispositivo:

  1. En Azure Portal, vaya a la instancia de DPS.

  2. En el menú de Configuración, seleccione Administrar inscripciones.

  3. Seleccione Grupos de inscripción.

  4. Seleccione el grupo de inscripción que haya creado para este tutorial.

  5. En la página Detalles del grupo de inscripciones, seleccione Estado del registro.

  6. Busque el identificador de dispositivo de la columna Id. de dispositivo del dispositivo y anote el centro de IoT de la columna IoT Hub asignado.

    Puede seleccionar el registro del dispositivo para ver más detalles, como el gemelo inicial asignado al dispositivo.

Para comprobar el dispositivo en el centro de IoT:

  1. En Azure Portal, vaya al centro de IoT al que se asignó el dispositivo.

  2. En el menú Administración de dispositivos, seleccione Dispositivos.

  3. Si el dispositivo se aprovisionó correctamente, su identificador de dispositivo debería aparecer en la lista y el valor de Estado debería ser Habilitado. Si no ve el dispositivo, seleccione Actualizar.

    Device is registered with the IoT hub

Nota:

Si ha cambiado el estado inicial del dispositivo gemelo a uno distinto del valor predeterminado en el grupo de inscripción, el dispositivo puede extraer el estado gemelo deseado desde el centro y actuar en consecuencia. Para más información, consulte Información y uso de dispositivos gemelos en IoT Hub.

Aprovisionar más dispositivos

Para aprovisionar más dispositivos mediante el grupo de inscripción, siga los pasos descritos en las secciones anteriores para:

  1. Elección de un identificador de registro único para el dispositivo.

  2. Derivación de una clave de dispositivo. Como hizo anteriormente, use la clave principal del grupo de inscripción como clave de grupo.

  3. Ejecución del código de aprovisionamiento de dispositivos. Reemplace los artefactos necesarios por la nueva clave de dispositivo derivada y el identificador de registro.

Limpieza de recursos

Si planea seguir trabajando con el ejemplo de cliente de dispositivo y explorándolo, no quite los recursos que se hayan creado en este tutorial. Si no va a continuar, use los siguientes pasos para eliminar todos los recursos creados en este tutorial.

Eliminación del grupo de inscripción

La eliminación de un grupo de inscripción no elimina las entradas de registro asociadas a él. Estos registros huérfanos no cuentan para la cuota de registros de la instancia de DPS. Por este motivo, se recomienda eliminar todas las entradas de registro asociadas a un grupo de inscripción antes de eliminar el propio grupo de inscripción.

  1. En Azure Portal, vaya a la instancia de DPS.

  2. En el menú de Configuración, seleccione Administrar inscripciones.

  3. Seleccione la pestaña Grupos de inscripción.

  4. Seleccione el nombre del grupo de inscripción que usó para este tutorial para abrir su página de detalles.

  5. En la página Detalles de inscripción, seleccione Estado del registro. A continuación, seleccione la casilla situada junto al encabezado de columna Id. de dispositivo para seleccionar todas las entradas de registro del grupo de inscripción. Seleccione Eliminar en la parte superior de la página para eliminar las entradas de registro.

  6. Regrese a la página Administrar inscripciones.

  7. Active la casilla situada junto al nombre del grupo de inscripción que haya utilizado para este tutorial.

  8. En la parte superior de la página, seleccione Eliminar.

Eliminación de registros de dispositivos de IoT Hub

  1. En Azure Portal, vaya al centro de IoT al que se asignó el dispositivo.

  2. Seleccione Dispositivos en la sección Administración de dispositivos del menú de navegación.

  3. Seleccione la casilla situada junto al Id. de dispositivo de los dispositivos que registró en este tutorial.

  4. En la parte superior de la página, seleccione Eliminar.

Pasos siguientes

En este tutorial, aprovisionó varios dispositivos a un centro de IoT único mediante un grupo de inscripción. Luego, obtenga información sobre cómo aprovisionar dispositivos IoT en varios centros.