Creación y aprovisionamiento de un dispositivo IoT Edge en Linux mediante certificados X.509
Se aplica a: IoT Edge 1.1
Importante
IoT Edge 1.1: la fecha de finalización del soporte técnico fue el 13 de diciembre de 2022. Consulte la página del ciclo de vida de productos de Microsoft para obtener información sobre cómo se admite este producto, servicio, tecnología o API. Para más información sobre cómo actualizar a la versión más reciente de IoT Edge, consulte Actualización de IoT Edge.
En este artículo se proporcionan instrucciones completas para registrar y aprovisionar un dispositivo IoT Edge en Linux, incluida la instalación de IoT Edge.
Todos los dispositivos que se conectan a IoT Hub tienen un identificador de dispositivo que se usa para realizar un seguimiento de las comunicaciones de la nube al dispositivo o del dispositivo a la nube. Configure un dispositivo con su información de conexión, que incluye el nombre de host del centro de IoT, el identificador de dispositivo y la información que el dispositivo usa para autenticarse en IoT Hub.
Los pasos de este artículo le guían a través de un proceso denominado aprovisionamiento manual, donde conecta un único dispositivo a su centro de IoT. En el caso del aprovisionamiento manual, tiene dos opciones para autenticar dispositivos IoT Edge:
Claves simétricas: cuando se crea una identidad de dispositivo en IoT Hub, el servicio crea dos claves. Debe colocar una de las claves en el dispositivo para que este la presente a IoT Hub al autenticarse.
Este método de autenticación es más rápido para comenzar, pero no es tan seguro.
X.509 auto firmado: se crean dos certificados de identidad X.509 y se colocan en el dispositivo. Cuando se crea una nueva identidad de dispositivo en IoT Hub, se proporcionan huellas digitales de ambos certificados. Cuando el dispositivo se autentica en IoT Hub, presenta un certificado, y IoT Hub comprueba que el certificado coincide con su huella digital.
Este método de autenticación es más seguro y se recomienda para los escenarios de producción.
En este artículo se describe el uso de certificados X.509 como método de autenticación. Si quiere usar claves simétricas, consulte Creación y aprovisionamiento de un dispositivo IoT Edge en Linux mediante claves simétricas.
Nota:
Si tiene muchos dispositivos para configurar y no quiere aprovisionar manualmente cada uno, siga uno de los artículos a continuación para obtener información sobre cómo funciona IoT Edge con IoT Hub Device Provisioning Service:
Requisitos previos
En este artículo se explica cómo registrar un dispositivo IoT Edge e instalar IoT Edge en él. Estas tareas tienen requisitos previos y utilidades diferentes que se usan para realizarlas. Asegúrese de que cumple todos los requisitos previos antes de continuar.
Herramientas de administración de dispositivos
Puede usar Azure Portal, Visual Studio Code o la CLI de Azure para seguir los pasos para registrar el dispositivo. Cada utilidad tiene sus propios requisitos previos:
Un centro de IoT gratuito o estándar en la suscripción de Azure.
Requisitos del dispositivo
Dispositivo Linux X64, ARM32 o ARM64.
Microsoft publica paquetes de instalación para una variedad de sistemas operativos.
para la información más reciente sobre qué sistemas operativos se admiten actualmente en los escenarios de producción, consulte Sistemas compatibles con Azure IoT Edge.
Generación de los certificados de identidad del dispositivo
El aprovisionamiento manual con certificados X.509 requiere IoT Edge, versión 1.0.10 o posterior.
Al aprovisionar un dispositivo IoT Edge con certificados X.509, se usa lo que se denomina un certificado de identidad del dispositivo. Este certificado solo se usa para aprovisionar un dispositivo IoT Edge y autenticarlo en Azure IoT Hub. Es un certificado de hoja que no firma otros certificados. El certificado de identidad del dispositivo es independiente de los certificados de la entidad de certificación (CA) que el dispositivo IoT Edge presenta a los módulos o dispositivos de nivel inferior para la verificación.
En el caso de la autenticación mediante certificados X.509, la información de autenticación de cada dispositivo se proporciona en forma de huellas digitales tomadas de los certificados de identidad del dispositivo. Estas huellas digitales se proporcionan a IoT Hub en el momento de registrar el dispositivo para que el servicio pueda reconocer el dispositivo al conectarse.
Para obtener más información sobre cómo se usan los certificados de CA en los dispositivos IoT Edge, consulte Información sobre los certificados de Azure IoT Edge.
Necesita los siguientes archivos para el aprovisionamiento manual con X.509:
Dos certificados de identidad del dispositivo con sus certificados de clave privada coincidentes en los formatos .cer o .pem.
Se proporciona un conjunto de archivos de certificado y clave al entorno de ejecución de IoT Edge. Al crear los certificados de identidad del dispositivo, establezca el nombre común del certificado (CN) en el id. de dispositivo que quiere que tenga el dispositivo en el centro de IoT.
Huellas digitales tomadas de ambos certificados de identidad del dispositivo.
Los valores de huella digital son 40 caracteres hexadecimales para hashes de tipo SHA-1 o 64 caracteres hexadecimales para hashes de tipo SHA-256. Ambas huellas digitales se proporcionan a IoT Hub en el momento del registro del dispositivo.
Si no tiene certificados disponibles, puede proceder a la Creación de certificados de demostración para probar las características de dispositivo IoT Edge. Siga las instrucciones de ese artículo para configurar scripts de creación de certificados, crear un certificado de CA raíz y luego crear dos certificados de identidad del dispositivo IoT Edge.
Una manera de recuperar la huella digital de un certificado es con el siguiente comando openssl:
openssl x509 -in <certificate filename>.pem -text -fingerprint
Registro del dispositivo
Puede usar Azure Portal, Visual Studio Code o la CLI de Azure para registrar el dispositivo, según su preferencia.
En su centro de IoT en Azure Portal, los dispositivos IoT Edge se crean y administran por separado de los dispositivos IOT que no están habilitados para Edge.
Inicie sesión en Azure Portal y vaya a IoT Hub.
En el panel izquierdo, seleccione Dispositivos en el menú y, luego, elija Agregar dispositivo.
En la página Crear un dispositivo, proporcione la información siguiente:
- Cree un id. de dispositivo descriptivo. Anote este identificador de dispositivo, ya que lo usará más adelante.
- Active la casilla Dispositivo IoT Edge.
- Seleccione X.509 autofirmado como el tipo de autenticación.
- Proporcione las huellas digitales de certificado de identidad principal y secundaria. Los valores de huella digital son 40 caracteres hexadecimales para hashes de tipo SHA-1 o 64 caracteres hexadecimales para hashes de tipo SHA-256.
Seleccione Guardar.
Ahora que tiene un dispositivo registrado en IoT Hub, recupere la información que usa para completar la instalación y el aprovisionamiento del entorno de ejecución de Azure IoT Edge.
Visualización de dispositivos registrados y recuperación de la información de aprovisionamiento
Los dispositivos que usan la autenticación con certificados X.509 necesitan el nombre de su centro de IoT, su nombre de dispositivo y sus archivos de certificado para completar la instalación y el aprovisionamiento del entorno de ejecución de Azure IoT Edge.
Todos los dispositivos habilitados para Edge que se conectan al centro de IoT se enumeran en la página Dispositivos. Puede filtrar la lista por el tipo Dispositivo IoT Edge.
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.
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 se retiró Raspberry Pi OS Stretch de la lista de soporte técnico del sistema operativo de nivel 1. Para evitar posibles vulnerabilidades de seguridad, actualice el sistema operativo del host a Bullseye.
La instalación se puede realizar con unos pocos comandos. Abra un terminal y ejecute los comandos siguientes:
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
18.04:
wget https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm 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.
Instale el motor de Moby.
sudo apt-get update; \
sudo apt-get install moby-engine
Una vez instalado correctamente el motor de Moby, configúrelo para usar el controlador de registro local
como mecanismo de registro. Para más información sobre la configuración de registro, consulte Lista de comprobación de implementación de producción.
Cree o abra el archivo de configuración del demonio de Docker en
/etc/docker/daemon.json
.Establezca el controlador de registro predeterminado en el controlador de registro
local
, tal como se muestra en el ejemplo siguiente.{ "log-driver": "local" }
Reinicie el motor de contenedores para que se apliquen los cambios.
sudo systemctl restart docker
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
yNetwork 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 comodefconfig
omenuconfig
, 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.
Instale IoT Edge versión 1.1.* junto con el paquete libiothsm-std:
sudo apt-get update; \
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.
Aprovisionamiento del dispositivo con su identidad de nube
Ahora que el motor del contenedor y el entorno de ejecución de IoT Edge están instalados en el dispositivo, está preparado para el paso siguiente, que consiste en configurar el dispositivo con su información de identidad de nube y autenticación.
Abra el archivo de configuración en el dispositivo IoT Edge.
sudo nano /etc/iotedge/config.yaml
Busque la sección de configuraciones de aprovisionamiento del archivo y quite la marca de comentario de la sección Manual provisioning configuration using an X.509 identity certificate (Configuración de aprovisionamiento manual mediante un certificado de identidad X.509). Asegúrese de que cualquier otra sección de aprovisionamiento esté comentada. Asegúrese de que la línea de aprovisionamiento: no tiene ningún espacio en blanco anterior y que los elementos anidados tienen sangría en dos espacios.
# Manual provisioning configuration using an x.509 identity certificate
provisioning:
source: "manual"
authentication:
method: "x509"
iothub_hostname: "REQUIRED_IOTHUB_HOSTNAME"
device_id: "REQUIRED_DEVICE_ID_PROVISIONED_IN_IOTHUB"
identity_cert: "REQUIRED_URI_TO_DEVICE_IDENTITY_CERTIFICATE"
identity_pk: "REQUIRED_URI_TO_DEVICE_IDENTITY_PRIVATE_KEY"
Actualice los siguientes campos:
- iothub_hostname: nombre de host del centro de IoT al que se conectará el dispositivo. Por ejemplo,
{IoT hub name}.azure-devices.net
. - device_id: el id. que proporcionó al registrar el dispositivo.
- identity_cert: URI a un certificado de identidad en el dispositivo. Por ejemplo,
file:///path/identity_certificate.pem
. - identity_pk: URI al archivo de clave privada para el certificado de identidad proporcionado. Por ejemplo,
file:///path/identity_key.pem
.
Guarde y cierre el archivo.
CTRL + X
, , Y
, Enter
Después de especificar la información de aprovisionamiento en el archivo de configuración, reinicie el demonio:
sudo systemctl restart iotedge
Comprobación de configuración correcta
Compruebe que el runtime se ha instalado y configurado correctamente en el dispositivo de IoT Edge.
Sugerencia
Necesita privilegios elevados para ejecutar comandos iotedge
. Cuando cierre la sesión en su máquina y la inicie de nuevo por primera vez después de instalar el entorno de ejecución de IoT Edge, sus permisos se actualizarán automáticamente. Hasta entonces, use sudo
delante de los comandos.
Compruebe que el servicio del sistema IoT Edge esté en ejecución.
sudo systemctl status iotedge
Si necesita solucionar problemas del servicio, recupere los registros del servicio.
journalctl -u iotedge
Use la herramienta check
para comprobar el estado de configuración y conexión del dispositivo.
sudo iotedge check
Sugerencia
Use siempre sudo
para ejecutar la herramienta de comprobación, incluso después de que se actualicen los permisos. Para comprobar el estado de la configuración, la herramienta necesita privilegios elevados para acceder al archivo de configuración.
Nota:
En un dispositivo recién aprovisionado, es posible que vea un error relacionado con IoT Edge Hub:
× preparación para producción: el directorio de almacenamiento de Edge Hub se conserva en el sistema de archivos host: error
No se pudo comprobar el estado actual del contenedor de Edge Hub
Este error se espera en un dispositivo recién aprovisionado porque el módulo de IoT Edge Hub no se está ejecutando. Para resolver el error, en IoT Hub, establezca los módulos del dispositivo y cree una implementación. La creación de una implementación para el dispositivo inicia los módulos en el dispositivo, incluido el módulo de IoT Edge Hub.
Vea todos los módulos que se ejecutan en el dispositivo IoT Edge. Cuando el servicio se inicia por primera vez, solo verá la ejecución del módulo edgeAgent. El módulo edgeAgent se ejecuta de forma predeterminada y le ayuda a instalar e iniciar todos los módulos adicionales que implemente en el dispositivo.
sudo iotedge list
Al crear un nuevo dispositivo IoT Edge, se mostrará el código de estado 417 -- The device's deployment configuration is not set
en Azure Portal. Este estado es normal y significa que el dispositivo está listo para recibir una implementación de módulo.
Instalación sin conexión o de una versión específica (opcional)
Los pasos de esta sección corresponden a escenarios que no se tratan en los pasos de instalación estándar. Esto puede incluir:
- Instalación de IoT Edge sin conexión
- Instalación de una versión candidata para lanzamiento
Siga los pasos de esta sección si quiere instalar una versión específica del entorno de ejecución de Azure IoT Edge que no esté disponible mediante el administrador de paquetes. La lista de paquetes de Microsoft solo contiene un conjunto limitado de versiones recientes y sus subversiones, por lo que estos pasos son para cualquiera que quiera instalar una versión anterior o una versión candidata para lanzamiento.
Con los comandos curl, puede dirigirse a los archivos de componentes directamente desde el repositorio de GitHub de IoT Edge.
Vaya a Versiones de Azure IoT Edge y busque la versión de lanzamiento que desea tener como destino.
Expanda la sección Recursos para esa versión.
Cada versión debe tener archivos nuevos para el demonio de seguridad de IoT Edge y hsmlib. Si va a instalar IoT Edge en un dispositivo sin conexión, descargue estos archivos con anterioridad. De lo contrario, use los comandos siguientes para actualizar esos componentes.
Busque el archivo libiothsm-std que coincida con la arquitectura del dispositivo IoT Edge. Haga clic con el botón derecho en el vínculo del archivo y copie la dirección del vínculo.
Use el vínculo copiado en el comando siguiente para instalar esa versión de hsmlib:
curl -L libiothsm-std_link_here -o libiothsm-std.deb && sudo apt-get install ./libiothsm-std.deb
Busque el archivo iotedge que coincida con la arquitectura del dispositivo IoT Edge. Haga clic con el botón derecho en el vínculo del archivo y copie la dirección del vínculo.
Use el vínculo copiado en el comando siguiente para instalar esa versión del demonio de seguridad de IoT Edge.
curl -L iotedge_link_here -o iotedge.deb && sudo apt-get install ./iotedge.deb
Ahora que el motor del contenedor y el entorno de ejecución de IoT Edge están instalados en el dispositivo, está preparado para el paso siguiente, que consiste en aprovisionar el dispositivo con su identidad de nube.
Desinstalación de IoT Edge
Si quiere quitar la instalación de IoT Edge de su dispositivo, use los siguientes comandos.
Quite el entorno de ejecución de Azure IoT Edge.
sudo apt-get autoremove iotedge
Al quitar el entorno de ejecución de IoT Edge, los contenedores que se hayan creado en él se detendrán, pero seguirán existiendo en el dispositivo. Observe todos los contenedores para ver cuáles permanecen.
sudo docker ps -a
Elimine los contenedores del dispositivo, incluidos los dos contenedores del entorno en tiempo de ejecución.
sudo docker rm -f <container name>
Por último, quite el entorno en tiempo de ejecución del contenedor del dispositivo.
sudo apt-get autoremove --purge moby-engine
Pasos siguientes
Vaya a Implementación de módulos de Azure IoT Edge para obtener información sobre cómo implementar módulos en el dispositivo.