Compartir a través de


Creación y aprovisionamiento de dispositivos IoT Edge a escala con un TPM en Linux

Se aplica a:IoT Edge 1.5 checkmark IoT Edge 1.5

Importante

IoT Edge 1.5 LTS es la versión compatible. IoT Edge 1.4 LTS alcanzó el final del ciclo de vida el 12 de noviembre de 2024. Si usa una versión anterior, consulte Update IoT Edge.

En este artículo se proporcionan instrucciones para el aprovisionamiento automático de un dispositivo Azure IoT Edge para Linux mediante un módulo de plataforma segura (TPM). Puede aprovisionar automáticamente dispositivos IoT Edge con el servicio de aprovisionamiento de dispositivos Azure IoT Hub. Si no está familiarizado con el proceso de aprovisionamiento automático, revise la información general sobre el aprovisionamiento antes de continuar.

En este artículo, se describen dos metodologías. Seleccione sus preferencias en función de la arquitectura de la solución:

  • Aprovisionamiento automático de un dispositivo Linux con hardware de TPM físico.
  • Aprovisionar automáticamente una máquina virtual Linux con un TPM simulado que se ejecuta en una máquina de desarrollo de Windows con Hyper-V habilitado. Se recomienda usar esta metodología solo como escenario de prueba. Un TPM simulado no ofrece la misma seguridad que un TPM físico.

Las instrucciones varían en función de la metodología, por lo que debe asegurarse de que se encuentra en la pestaña correcta en el futuro.

Las tareas son las siguientes:

  1. Recuperar la información de aprovisionamiento del TPM.
  2. Cree un registro individual para su dispositivo en una instancia del servicio de aprovisionamiento de dispositivos de IoT Hub.
  3. Instale el entorno de ejecución de IoT Edge y conecte el dispositivo al centro de IoT.

Requisitos previos

Recursos en la nube

  • Un centro de IoT activo.
  • Instancia del servicio de aprovisionamiento de dispositivos de IoT Hub en Azure, vinculada a tu IoT Hub

Requisitos del dispositivo

Un dispositivo Linux físico que va a ser el dispositivo IoT Edge.

Si es un fabricante de dispositivos, consulte las instrucciones para integrar un TPM en el proceso de fabricación.

Nota:

Se necesita TPM 2.0 cuando se usa la atestación de TPM con el servicio de aprovisionamiento de dispositivos.

Solo pueden crear inscripciones individuales, no de grupo, para el servicio de aprovisionamiento de dispositivos cuando se utiliza un TPM.

Configurar su dispositivo

Si usa un dispositivo físico Linux con un TPM, no hay ningún paso adicional para configurar el dispositivo.

Ya estás listo para continuar.

Obtener la información de aprovisionamiento del TPM

Nota:

En este artículo se ha usado antes la herramienta tpm_device_provision del SDK de C para IoT con el fin de generar información de aprovisionamiento. Si ya antes usaba esta herramienta, tenga en cuenta que los pasos siguientes generan un identificador de registro diferente para la misma clave de aprobación pública. Si necesita volver a crear el identificador de registro como antes, consulte cómo la herramienta tpm_device_provision del SDK de C la genera. Asegúrese de que el identificador de registro de la inscripción individual en DPS coincide con el identificador de registro que el dispositivo de IoT Edge está configurado para su uso.

En esta sección, utilizarás las herramientas de software TPM2 para recuperar la clave de respaldo de tu TPM y luego generarás un identificador de registro único. Esta sección se corresponde con el Paso 3: El dispositivo tiene instalado el firmware y el software del proceso para integrar un TPM en el proceso de fabricación.

Instalación de las herramientas de TPM2

Inicie sesión en el dispositivo e instale el paquete tpm2-tools.

sudo apt-get install tpm2-tools

Ejecute el siguiente script para leer la clave de aprobación y crear una si aún no existe.

#!/bin/sh
if [ "$USER" != "root" ]; then
  SUDO="sudo "
fi

$SUDO tpm2_readpublic -Q -c 0x81010001 -o ek.pub 2> /dev/null
if [ $? -gt 0 ]; then
  # Create the endorsement key (EK)
  $SUDO tpm2_createek -c 0x81010001 -G rsa -u ek.pub

  # Create the storage root key (SRK)
  $SUDO tpm2_createprimary -Q -C o -c srk.ctx > /dev/null

  # make the SRK persistent
  $SUDO tpm2_evictcontrol -c srk.ctx 0x81000001 > /dev/null

  # open transient handle space for the TPM
  $SUDO tpm2_flushcontext -t > /dev/null
fi

printf "Gathering the registration information...\n\nRegistration Id:\n%s\n\nEndorsement Key:\n%s\n" $(sha256sum -b ek.pub | cut -d' ' -f1 | sed -e 's/[^[:alnum:]]//g') $(base64 -w0 ek.pub)
$SUDO rm ek.pub srk.ctx 2> /dev/null

En la ventana de salida se muestra la Clave de aprobación y el Id. de registro único. Copie estos valores; los usará más adelante cuando cree una inscripción individual para el dispositivo en el servicio de aprovisionamiento de dispositivos.

Cuando tenga el identificador de registro y la clave de aprobación, estará listo para continuar.

Sugerencia

Si no quiere usar las herramientas de software de TPM2 para recuperar la información, debe encontrar otra manera de obtener la información de aprovisionamiento. La clave de aprobación, que es única para cada chip de TPM, se obtiene del fabricante del chip de TPM asociado a ella. Puede derivar un identificador de registro único para su dispositivo TPM. Por ejemplo, como se muestra en párrafos anteriores, puede crear un hash SHA-256 de la clave de aprobación.

Crear una inscripción en el servicio de aprovisionamiento de dispositivos

Use la información de aprovisionamiento del TPM para crear una inscripción individual en el servicio de aprovisionamiento de dispositivos.

Al crear una inscripción en el servicio de aprovisionamiento de dispositivos, 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 utilizada en la 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.

Sugerencia

Los pasos de este artículo son para el portal de Azure, pero también puede crear inscripciones individuales mediante el Azure CLI. Para obtener 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 IoT Edge.

  1. En el portal Azure, vaya a su instancia del servicio de aprovisionamiento de dispositivos de IoT Hub.

  2. En Configuración, seleccione Administrar inscripciones.

  3. Seleccione Agregar inscripción individual y, después, complete los pasos siguientes para configurar la inscripción:

    1. En Mecanismo, seleccione TPM.

    2. Proporcione la clave de aprobación y el identificador de registro que ha copiado de la máquina virtual o el dispositivo físico.

    3. Si quiere, proporcione un identificador para el dispositivo. Si no proporciona un id. de dispositivo, se usará el id. de registro.

    4. Seleccione True para declarar que la máquina virtual o el dispositivo físico es un dispositivo IoT Edge.

    5. Elija el IoT hub vinculado al que quiere conectar el dispositivo o seleccione Link to new IoT Hub. Puede elegir varios centros y el dispositivo se asignará a uno de ellos según la directiva de asignación seleccionada.

    6. Si quiere, 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. Para obtener más información, consulte Desplegar módulos de IoT Edge a gran escala.

    7. Haga clic en Guardar.

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

Instalar IoT Edge

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

Ejecute los comandos siguientes para agregar el repositorio de paquetes y luego agregue la clave de firma de paquetes de Microsoft a la lista de claves de confianza.

Importante

El 30 de junio de 2022, Raspberry Pi OS Stretch se retiró de la lista de soporte técnico del sistema operativo de nivel 1. Para evitar posibles vulnerabilidades de seguridad, actualice el sistema operativo host a Bullseye.

Para los sistemas operativos de plataforma compatibles de nivel 2, los paquetes de instalación están disponibles en lanzamientos de Azure IoT Edge. Consulte los pasos de instalación en Instalación sin conexión o instalación de versión específica (opcional).

Puede instalar IoT Edge mediante algunos comandos. Abra un terminal y ejecute los comandos siguientes:

  • 24.04:

    wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    
  • 22.04:

    wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    
  • 20.04:

    wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    

Para obtener más información sobre las versiones del sistema operativo, consulte Azure IoT Edge plataformas compatibles.

Nota:

Azure IoT Edge paquetes de software están sujetos a los términos de licencia ubicados en cada paquete (usr/share/doc/{package-name} o el directorio LICENSE). Lea los términos de licencia antes de usar un 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 se basa en un entorno de ejecución de contenedores compatible con OCI. Para escenarios de producción, use el motor Moby. El motor moby es el motor de contenedor compatible oficialmente con IoT Edge. Las imágenes de contenedor de Docker CE y Docker EE funcionan con el entorno de ejecución de Moby. Si usa los snaps de Ubuntu Core, Canonical proporciona el snap de Docker y lo soporta para escenarios de producción.

Instale el motor de Moby.

sudo apt-get update; \
  sudo apt-get install moby-engine

De manera predeterminada, el motor del contenedor no establece límites de tamaño de registro de contenedor. Con el tiempo, esta situación puede provocar que el dispositivo se rellene con registros y se agote el espacio en disco. Sin embargo, puede configurar el registro para que se muestre localmente, aunque es opcional. Para obtener más información sobre la configuración de registro, consulte Prepare para implementar la solución de IoT Edge en producción.

En los pasos siguientes se muestra cómo configurar el contenedor para usar el local controlador de registro como mecanismo de registro.

  1. Cree o edite el archivo de configuración del demonio Docker existente:

    sudo nano /etc/docker/daemon.json
    
  2. Establezca el controlador de registro predeterminado como local, tal como se muestra en el ejemplo:

       {
          "log-driver": "local"
       }
    
  3. Reinicie el motor de contenedores para que se apliquen los cambios.

    sudo systemctl restart docker
    

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

El servicio IoT Edge proporciona y mantiene estándares de seguridad en el dispositivo IoT Edge. El servicio se inicia en cada arranque y arranca el dispositivo iniciando el resto del tiempo de ejecución de IoT Edge.

Nota:

A partir de la versión 1.2, el servicio de identidad Azure IoT controla el aprovisionamiento y la administración de identidades para IoT Edge y para otros componentes de dispositivo que necesitan comunicarse con IoT Hub.

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

Sugerencia

Si ya tiene un dispositivo IoT Edge que ejecuta una versión anterior y quiere actualizar a la versión más reciente, siga los pasos descritos en Update IoT Edge. Las versiones posteriores son lo suficientemente diferentes de las versiones anteriores de IoT Edge que son necesarios pasos específicos para actualizar.

Instale la versión más reciente de IoT Edge y el paquete del servicio de identidad de IoT (si aún no está up-to-date):

  • 22.04:

    sudo apt-get update; \
       sudo apt-get install aziot-edge
    
  • 20.04:

    sudo apt-get update; \
       sudo apt-get install aziot-edge
    

Aprovisionamiento del dispositivo con su identidad de nube

Una vez instalado el entorno de ejecución en el dispositivo, configure el dispositivo con la información que usa para conectarse al servicio de aprovisionamiento de dispositivos y IoT Hub.

Conozca el ámbito de ID del servicio de aprovisionamiento de dispositivos y el Identificador de registro del dispositivo que se han recopilado previamente.

Cree un archivo de configuración para el dispositivo en función de un archivo de plantilla que se proporcione como parte de la instalación de IoT Edge.

sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml

Abra el archivo de configuración en el dispositivo IoT Edge.

sudo nano /etc/aziot/config.toml
  1. Busque la sección configuraciones de aprovisionamiento del archivo. Quite las marcas de comentario del aprovisionamiento TPM y asegúrese de que cualquier otra línea de aprovisionamiento esté comentada.

    # DPS provisioning with TPM
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "DPS_ID_SCOPE_HERE"
    
    # Uncomment to send a custom payload during DPS registration
    # payload = { uri = "PATH_TO_JSON_FILE" }
    
    [provisioning.attestation]
    method = "tpm"
    registration_id = "REGISTRATION_ID_HERE"
    
    # auto_reprovisioning_mode = Dynamic
    
  2. Actualice los valores de id_scope y registration_id con la información del servicio de aprovisionamiento de dispositivos y del dispositivo. El valor scope_id es el ámbito de identificador de la página de información general de la instancia del servicio de aprovisionamiento de dispositivos.

    Para obtener más información sobre la configuración de aprovisionamiento, consulte Configurar la configuración del dispositivo IoT Edge.

  3. Opcionalmente, busque la sección del modo de reaprovisionamiento automático del archivo. Use el parámetro auto_reprovisioning_mode para configurar el comportamiento de reaprovisionamiento del dispositivo. Dynamic - Reprovisionar cuando el dispositivo detecta que podría haberse movido de un IoT Hub a otro. Este es el valor predeterminado. AlwaysOnStartup: reaprovicionar cuando se reinicia el dispositivo o un fallo hace que los daemons se reinicien. OnErrorOnly: el reaprovisionamiento del dispositivo nunca se desencadena automáticamente. Cada modo tiene un mecanismo alternativo de aprovisionamiento de dispositivo implícito si el dispositivo no puede conectarse a IoT Hub durante el aprovisionamiento de identidad debido a errores de conectividad. Para obtener más información, consulte conceptos de reaprovisionamiento de dispositivos de IoT Hub.

  4. Opcionalmente, descomente el parámetro payload para especificar la ruta de acceso a un archivo JSON local. El contenido del archivo se enviará a DPS como datos adicionales cuando el dispositivo se registre. Esto es útil para la asignación personalizada. Por ejemplo, si desea asignar los dispositivos en función de un identificador de modelo de IoT Plug and Play sin intervención humana.

  5. Guarde y cierre el archivo.

Dar acceso a IoT Edge al TPM

El entorno de ejecución de IoT Edge se basa en un servicio de TPM que gestiona el acceso al TPM de un dispositivo. Para que este servicio aprovisione automáticamente el dispositivo, necesita acceso al TPM.

Puede conceder acceso al TPM sobrescribiendo la configuración de systemd para que el servicio aziottpm tenga privilegios de root. Si no desea elevar los privilegios de servicio, también puede usar los pasos siguientes para proporcionar manualmente el acceso TPM.

  1. Cree una nueva regla que proporcione al entorno de ejecución de IoT Edge acceso a tpm0 y tpmrm0.

    sudo touch /etc/udev/rules.d/tpmaccess.rules
    
  2. Abra el archivo de reglas.

    sudo nano /etc/udev/rules.d/tpmaccess.rules
    
  3. Copie la siguiente información de acceso en el archivo de reglas. Es posible que tpmrm0 no esté presente en los dispositivos que usan un kernel anterior a 4.12. Los dispositivos que no tengan tpmrm0 omitirán esa regla de forma segura.

    # allow aziottpm access to tpm0 and tpmrm0
    KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="root", GROUP="aziottpm", MODE="0660"
    KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="root", GROUP="aziottpm", MODE="0660"
    
  4. Guarde y cierre el archivo.

  5. Desencadene el sistema udev para evaluar la nueva regla.

    /bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrm
    
  6. Compruebe que la regla se haya aplicado correctamente.

    ls -l /dev/tpm*
    

    Una salida correcta tiene el siguiente aspecto:

    crw-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpm0
    crw-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpmrm0
    

    Si no ve que se hayan aplicado los permisos correctos, intente reiniciar la máquina para actualizar udev.

  7. Aplique los cambios de configuración realizados en el dispositivo.

    sudo iotedge config apply
    

Comprobación de instalación correcta

Si todavía no lo ha hecho, aplique los cambios de configuración realizados en el dispositivo.

sudo iotedge config apply

Compruebe que el entorno de ejecución de IoT Edge se está ejecutando.

sudo iotedge system status

Examine los registros del daemon.

sudo iotedge system logs

Si ve errores de aprovisionamiento, es posible que los cambios de configuración no hayan surtido efecto todavía. Intente reiniciar el servicio de IoT Edge.

sudo systemctl daemon-reload

O bien, pruebe a reiniciar la máquina virtual para ver si los cambios surten efecto con un inicio nuevo.

Si el entorno de ejecución se ha iniciado correctamente, puede entrar en su centro de IoT y ver que el nuevo dispositivo se ha aprovisionado automáticamente. Ahora el dispositivo está listo para ejecutar módulos IoT Edge.

Enumere los módulos en ejecución.

iotedge list

Puede comprobar que se ha utilizado la inscripción individual que ha creado en el servicio de aprovisionamiento de dispositivos. Vaya a la instancia del servicio de aprovisionamiento de dispositivos en el portal de Azure. 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.

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.

Obtenga información sobre cómo implementar y supervisar módulos de IoT Edge a escala mediante el portal de Azure o la Azure CLI.