Creación y aprovisionamiento de dispositivos IoT Edge a escala en Linux mediante claves simétricas

Afecta a: icono Sí IoT Edge 1.1 Otras versiones: IoT Edge 1.2

Afecta a: icono Sí IoT Edge 1.2 Otras versiones: IoT Edge 1.1

En este artículo se proporcionan instrucciones de un extremo a otro para el aprovisionamiento automático de uno o varios dispositivos Linux IoT Edge mediante claves simétricas. Puede aprovisionar los dispositivos Azure IoT Edge de forma automática con Azure IoT Hub Device Provisioning Service (DPS). Si no está familiarizado con el proceso de aprovisionamiento automático, revise la información general sobre el aprovisionamiento antes de continuar.

Las tareas son las siguientes:

  1. Crear una inscripción individual para un dispositivo o una inscripción de grupo para un conjunto de dispositivos.
  2. Instale el entorno de ejecución de IoT Edge y conéctese a IoT Hub.

Sugerencia

Para una experiencia simplificada, pruebe la herramienta de configuración de Azure IoT Edge. Esta herramienta de línea de comandos, actualmente en versión preliminar pública, instala IoT Edge en el dispositivo y lo aprovisiona mediante DPS y la atestación de clave simétrica.

La atestación de clave simétrica es un enfoque sencillo para autenticar un dispositivo con una instancia de Device Provisioning Service. Este método de atestación representa una experiencia de "Hola mundo" para los desarrolladores que no estén familiarizados con el aprovisionamiento de dispositivos, o no tengan estrictos requisitos de seguridad. La atestación de dispositivo mediante un TPM o certificado X.509 es más segura y se debe usar cuando los requisitos de seguridad son más estrictos.

Prerrequisitos

Recursos en la nube

Instalación de IoT Edge

Un dispositivo Linux físico o virtual para que sea el dispositivo IoT Edge.

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. Por ejemplo, podría usar una combinación de una dirección MAC y un número de serie que formen la siguiente cadena de un identificador de registro: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6. Solo se pueden usar caracteres alfanuméricos en minúsculas y guiones (-).

Crear una inscripción de DPS

Cree una inscripción para aprovisionar uno o varios dispositivos mediante DPS.

Si desea aprovisionar un único dispositivo IoT Edge, cree una inscripción individual. Si necesita aprovisionar varios dispositivos, siga los pasos para crear una inscripción de grupo de DPS.

Al crear una inscripción en DPS, tiene la oportunidad de declarar un estado inicial de dispositivo gemelo. En el dispositivo gemelo, puede establecer etiquetas para agrupar dispositivos por cualquier métrica que necesite en su solución, como la región, el entorno, la ubicación o el tipo de dispositivo. Estas etiquetas se usan para crear implementaciones automáticas.

Para más información sobre las inscripciones en el servicio de aprovisionamiento de dispositivos, consulte Administración de inscripciones de dispositivos.

Creación de una inscripción individual de DPS

Sugerencia

Los pasos de este artículo son para Azure Portal, pero también puede crear inscripciones individuales mediante la CLI de Azure. Para más información, consulte az iot dps enrollment. Como parte del comando de la CLI, use la marca edge-enabled para especificar que la inscripción es para un dispositivo de IoT Edge.

  1. En Azure Portal, navegue hasta la instancia del servicio de aprovisionamiento de dispositivos de IoT Hub.

  2. En Configuración, seleccione Administrar inscripciones.

  3. Seleccione Add individual enrollment (Agregar inscripción individual) y, a continuación, complete los pasos siguientes para configurar la inscripción:

    1. En Mecanismo, seleccione Clave simétrica.

    2. Proporcione un Id. de registro único para el dispositivo.

    3. De manera opcional, proporcione un Id. de dispositivo IoT Hub para el dispositivo. Puede usar identificadores de dispositivo para dirigirse a un dispositivo individual para la implementación del módulo. Si no proporciona un id. de dispositivo, se usará el id. de registro.

    4. Seleccione Verdadero para declarar que la inscripción es para un dispositivo IoT Edge.

    5. De manera opcional, agregue un valor de etiqueta a Estado inicial de dispositivo gemelo. Puede usar etiquetas para los grupos de dispositivos de destino para la implementación del módulo. Por ejemplo:

      {
         "tags": {
            "environment": "test"
         },
         "properties": {
            "desired": {}
         }
      }
      
    6. Seleccione Guardar.

  4. Copie el valor de Clave principal de la inscripción individual para usarlo al instalar el entorno de ejecución de Azure IoT Edge.

Ahora que existe una inscripción para este dispositivo, el entorno de ejecución de Azure IoT Edge puede aprovisionar automáticamente el dispositivo durante la instalación.

Instalación de IoT Edge

En esta sección, preparará la máquina virtual Linux o el dispositivo físico para IoT Edge. A continuación, instalará IoT Edge.

Tendrá que completar dos pasos en el dispositivo antes de que esté listo para instalar el entorno de ejecución de IoT Edge. El dispositivo necesita acceso a los paquetes de instalación de Microsoft y requiere la instalación de un motor de contenedor.

Acceso a los paquetes de instalación de Microsoft

  1. Descargue el paquete de configuración del repositorio que coincida con el sistema operativo del dispositivo.

    • Ubuntu Server 18.04:

      curl https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb > ./packages-microsoft-prod.deb
      
    • Raspberry Pi OS Stretch:

      curl https://packages.microsoft.com/config/debian/stretch/multiarch/packages-microsoft-prod.deb > ./packages-microsoft-prod.deb
      
  2. Instale el paquete de configuración para agregar el repositorio de paquetes de Microsoft y la clave pública GPG.

    sudo apt install ./packages-microsoft-prod.deb
    

Nota

Los paquetes de software de Azure IoT Edge están sujetos a los términos de licencia que se encuentran cada paquete (usr/share/doc/{package-name} o el directorio LICENSE). Lea los términos de licencia antes de usar el paquete. La instalación y el uso de un paquete constituyen la aceptación de estos términos. Si no acepta los términos de licencia, no utilice ese paquete.

Instalación de un motor del contenedor

Azure IoT Edge utiliza un runtime de contenedor compatible con OCI. En los escenarios de producción, se recomienda utilizar el motor de Moby. El motor de Moby es el único motor de contenedor compatible oficialmente con IoT Edge. Las imágenes de contenedor de Docker CE/EE son totalmente compatibles con el entorno de ejecución de Moby.

  1. Actualice las listas de paquetes en el dispositivo.

    sudo apt-get update
    
  2. Instale el motor de Moby.

    sudo apt-get install moby-engine
    

    Sugerencia

    Si se producen errores al instalar el motor del contenedor Moby, compruebe la compatibilidad con Moby del kernel de Linux. Algunos fabricantes de dispositivos incrustados distribuyen imágenes de dispositivos que contienen kernels de Linux personalizados sin las características necesarias para la compatibilidad del motor del contenedor. Ejecute el siguiente comando, que usa el script check-config suministrado por Moby, para comprobar la configuración del kernel:

    curl -ssl https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh -o check-config.sh
    chmod +x check-config.sh
    ./check-config.sh
    

    En la salida del script, compruebe que todos los elementos que figuran en Generally Necessary y Network Drivers estén habilitados. Si faltan características, puede habilitarlas si vuelve a generar el kernel a partir del origen y selecciona los módulos asociados para incluirlos en el archivo .config de kernel adecuado. Igualmente, si usa un generador de configuración de kernel como defconfig o menuconfig, busque y habilite las características correspondientes y vuelva a generar el kernel como corresponda. Una vez que implemente el kernel recién modificado, vuelva a ejecutar el script check-config para comprobar que se han habilitado correctamente todas las características necesarias.

Instalación del entorno de ejecución de IoT Edge

El demonio de seguridad de IoT Edge proporciona y mantiene los estándares de seguridad en el dispositivo IoT Edge. El demonio se inicia en cada arranque e inicia el resto del entorno de ejecución de IoT Edge para arrancar el dispositivo.

Los pasos de esta sección representan el proceso habitual para instalar la versión más reciente en un dispositivo que tenga conexión a Internet. Si tiene que instalar una versión específica, como una versión preliminar, o tiene que realizar la instalación mientras está sin conexión, siga los pasos de Instalación sin conexión o de una versión específica, más adelante en este artículo.

Actualice las listas de paquetes en el dispositivo.

sudo apt-get update

Instale IoT Edge versión 1.1.* junto con el paquete libiothsm-std:

sudo apt-get install iotedge

Nota

IoT Edge versión 1.1 es la rama de soporte técnico a largo plazo de IoT Edge. Si ejecuta una versión anterior, se recomienda instalar o actualizar a la revisión más reciente, ya que ya no se admiten las versiones anteriores.

El servicio IoT Edge proporciona y mantiene los estándares de seguridad en el dispositivo IoT Edge. El servicio se inicia en cada arranque e inicia el resto del entorno de ejecución de IoT Edge para arrancar el dispositivo.

El servicio de identidad de IoT se introdujo junto con la versión 1.2 de IoT Edge. Este servicio controla el aprovisionamiento y la administración de identidades para IoT Edge y otros componentes de dispositivo que necesitan comunicarse con IoT Hub.

Los pasos de esta sección representan el proceso habitual para instalar la versión más reciente en un dispositivo que tenga conexión a Internet. Si tiene que instalar una versión específica, como una versión preliminar, o tiene que realizar la instalación mientras está sin conexión, siga los pasos de Instalación sin conexión o de una versión específica, más adelante en este artículo.

Nota

Los pasos de esta sección le muestran cómo instalar la versión 1.2 de IoT Edge.

Si ya tiene un dispositivo IoT Edge que ejecuta una versión anterior y desea actualizar a 1.2, siga los pasos descritos en Actualización del demonio de seguridad de IoT Edge y el entorno de ejecución. La versión 1.2 es suficientemente diferente de las versiones anteriores de IoT Edge para que sean necesarios pasos específicos para la actualización.

Actualice las listas de paquetes en el dispositivo.

sudo apt-get update

Compruebe qué versiones de IoT Edge y el servicio de identidad de IoT están disponibles.

apt list -a aziot-edge aziot-identity-service

Para instalar la versión más reciente de IoT Edge y el paquete de servicio de identidad de IoT, use el comando siguiente:

sudo apt-get install aziot-edge

Aprovisionamiento del dispositivo con su identidad de nube

Una vez que el entorno de ejecución está instalado en el dispositivo, configure el dispositivo con la información que usa para conectarse a Device Provisioning Service y a IoT Hub.

Tenga lista la siguiente información:

  • El valor Ámbito de id. del DPS
  • El Id. de registro del dispositivo que ha creado
  • La Clave principal de una inscripción individual o una clave derivada para dispositivos que usan una inscripción de grupo.
  1. Abra el archivo de configuración en el dispositivo IoT Edge.

    sudo nano /etc/iotedge/config.yaml
    
  2. Busque la sección configuraciones de aprovisionamiento del archivo. Quite las marcas de comentario de las líneas del aprovisionamiento de claves simétricas de DPS y asegúrese de que cualquier otra línea de aprovisionamiento esté comentada.

    La línea provisioning: no debe ir precedida por espacios en blanco y se debe aplicar una sangría de dos espacios a los elementos anidados.

    # DPS TPM provisioning configuration
    provisioning:
      source: "dps"
      global_endpoint: "https://global.azure-devices-provisioning.net"
      scope_id: "PASTE_YOUR_SCOPE_ID_HERE"
      attestation:
        method: "symmetric_key"
        registration_id: "PASTE_YOUR_REGISTRATION_ID_HERE"
        symmetric_key: "PASTE_YOUR_PRIMARY_KEY_OR_DERIVED_KEY_HERE"
    #  always_reprovision_on_startup: true
    #  dynamic_reprovisioning: false
    
  3. Actualice los valores de scope_id, registration_id y symmetric_key con la información de DPS y del dispositivo.

  4. También puede usar las líneas always_reprovision_on_startup o dynamic_reprovisioning para configurar el comportamiento de reaprovisionamiento del dispositivo. Si un dispositivo se establece para que se vuelva a aprovisionar en el inicio, siempre intentará aprovisionar con DPS primero y, a continuación, revertir a la copia de seguridad de aprovisionamiento si se produce un error. Si un dispositivo se establece para que se vuelva a aprovisionar dinámicamente, IoT Edge se reiniciará y volverá a aprovisionar si se detecta un evento de reaprovisionamiento. Para más información, consulte Conceptos sobre el reaprovisionamiento de dispositivos de IoT Hub.

  5. Reinicie el entorno de ejecución de IoT Edge para que aplique todos los cambios de configuración realizados en el dispositivo.

    sudo systemctl restart iotedge
    
  1. Cree un archivo de configuración para el dispositivo basándose en un archivo de plantilla que se proporciona como parte de la instalación de IoT Edge.

    sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
    
  2. Abra el archivo de configuración en el dispositivo IoT Edge.

    sudo nano /etc/aziot/config.toml
    
  3. Busque la sección Provisioning (Aprovisionamiento) del archivo. Quite las marcas de comentario de las líneas del aprovisionamiento a DPS de clave simétrica y asegúrese de que cualquier otra línea de aprovisionamiento esté comentada.

    # DPS provisioning with symmetric key
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "PASTE_YOUR_SCOPE_ID_HERE"
    
    [provisioning.attestation]
    method = "symmetric_key"
    registration_id = "PASTE_YOUR_REGISTRATION_ID_HERE"
    
    symmetric_key = "PASTE_YOUR_PRIMARY_KEY_OR_DERIVED_KEY_HERE"
    
  4. Actualice los valores de id_scope, registration_id y symmetric_key con la información de DPS y del dispositivo.

    El parámetro de clave simétrica puede aceptar un valor de una clave insertada, un URI de archivo o un URI de PKCS#11. Quite la marca de comentario de una sola línea de clave simétrica, en función del formato que esté usando.

    Si usa cualquier URI de PKCS#11, busque la sección PKCS#11 en el archivo de configuración y proporcione información sobre la configuración de PKCS#11.

  5. Guarde y cierre el archivo config.toml.

  6. Aplique los cambios de configuración que ha realizado a IoT Edge.

    sudo iotedge config apply
    

Comprobación de instalación correcta

Si el entorno de ejecución se inició correctamente, puede ir a IoT Hub y empezar a implementar módulos de IoT Edge en el dispositivo.

Puede comprobar que la inscripción individual que ha creado en Device Provisioning Service se ha usado. En Azure Portal, vaya a la instancia de Device Provisioning Service. Abra los detalles de la inscripción para la inscripción individual que ha creado. Tenga en cuenta que el estado de la inscripción está asignado y se muestra el id. de dispositivo.

Use los siguientes comandos en el dispositivo para comprobar que la instancia de IoT Edge se haya instalado e iniciado correctamente.

Compruebe el estado del servicio IoT Edge.

systemctl status iotedge

Examine los registros del servicio.

journalctl -u iotedge --no-pager --no-full

Enumere los módulos en ejecución.

iotedge list

Compruebe el estado del servicio IoT Edge.

sudo iotedge system status

Examine los registros del servicio.

sudo iotedge system logs

Enumere los módulos en ejecución.

sudo iotedge list

Pasos siguientes

El proceso de inscripción en Device Provisioning Service permite establecer el id. de dispositivo y las etiquetas del dispositivo gemelo al mismo tiempo que se aprovisiona el nuevo dispositivo. Puede usar esos valores para dirigirse a dispositivos individuales o grupos de dispositivos con la administración automática de dispositivos. Aprenda a implementar y supervisar los módulos de IoT Edge a escala mediante Azure Portal o la CLI de Azure.