Controlar acceso a IoT Hub mediante Microsoft Entra ID

Puede usar Microsoft Entra ID para autenticar las solicitudes a las API del servicio Azure IoT Hub, como crear una identidad de dispositivo o invocar un método directo. También puede usar el control de acceso basado en roles de Azure (RBAC de Azure) para autorizar esas mismas API del servicio. Al usar conjuntamente estas tecnologías, puede conceder permisos para acceder a API del servicio IoT Hub a una entidad de seguridad de Microsoft Entra. Esta entidad de seguridad podría ser un usuario, grupo o entidad de servicio de aplicación.

La autenticación del acceso con Microsoft Entra ID y el control de permisos con RBAC de Azure proporcionan una mayor seguridad y facilidad de uso respecto a los tokens de seguridad. Para minimizar los posibles problemas de seguridad inherentes a los tokens de seguridad, se recomienda aplicar la autenticación de Microsoft Entra siempre que sea posible.

Nota:

La autenticación con Microsoft Entra ID no es compatible con las API de dispositivo de IoT Hub (como mensajes del dispositivo a la nube y la actualización de las propiedades notificadas). Use claves simétricas o X.509 para autenticar dispositivos en IoT Hub.

Autenticación y autorización

La autenticación es el proceso de demostrar que es quien dice ser. La autenticación comprueba la identidad de un usuario o dispositivo en IoT Hub. A veces se acorta a AuthN.

La autorización es el proceso de confirmar permisos para un usuario o dispositivo autenticado en IoT Hub. Especifica los recursos y comandos a los que puede acceder y lo que puede hacer con esos recursos y comandos. A veces, la autorización se acorta a AuthZ.

Cuando una entidad de seguridad de Microsoft Entra solicita el acceso a una API del servicio IoT Hub, la identidad de la entidad de seguridad primero se autentica. Para realizar la autenticación, la solicitud debe contener un token de acceso de OAuth 2.0 en el entorno de ejecución. El nombre del recurso para solicitar el token es https://iothubs.azure.net. Si la aplicación se ejecuta en un recurso de Azure, como una máquina virtual de Azure, una aplicación de función de Azure Functions o una aplicación de Azure App Service, se puede representar como una identidad administrada.

Una vez autenticada la entidad de Microsoft Entra, el siguiente paso es la autorización. En este paso, IoT Hub usa el servicio de asignación de roles de Microsoft Entra para determinar que permisos tiene la entidad de seguridad. Si los permisos de la entidad de seguridad coinciden con el recurso o la API solicitados, IoT Hub autoriza la solicitud. Así, este paso exige que se asignen uno o varios roles de Azure a la entidad de seguridad. IoT Hub proporciona algunos roles integrados que tienen grupos comunes de permisos.

Administración del acceso a IoT Hub mediante la asignación de roles de RBAC de Azure

Con Microsoft Entra ID y RBAC, IoT Hub requiere que la entidad de seguridad que solicita la API tenga el nivel de permiso adecuado para la autorización. Para conceder permiso a la entidad de seguridad, asígnele también una asignación de roles.

Para garantizar los privilegios mínimos, asigne siempre el rol adecuado en el ámbito de recursos más bajo posible,que es probable que sea el ámbito de IoT Hub.

Azure proporciona los siguientes roles integrados de Azure para autorizar el acceso a la API del servicio IoT Hub mediante Microsoft Entra ID y RBAC:

Role Descripción
Colaborador de datos de IoT Hub Permite el acceso total a las operaciones del plano de datos de IoT Hub.
Lector de datos de IoT Hub Permite el acceso de lectura total a las propiedades del plano de datos de IoT Hub.
Colaborador del registro de IoT Hub Permite el acceso completo al registro de dispositivos de IoT Hub.
Colaborador de gemelos de IoT Hub Permite el acceso de lectura y escritura a todos los dispositivos y módulos gemelos de IoT Hub.

También puede definir roles personalizados para su uso con IoT Hub mediante la combinación de los permisos que necesita. Para más información, consulte Creación de roles personalizados para el control de acceso basado en roles de Azure.

Ámbito de recursos

Antes de asignar un rol de Azure RBAC a una entidad de seguridad, determine el ámbito de acceso que debería tener la entidad de seguridad. Siempre es mejor conceder únicamente el ámbito más restringido posible. Los roles de Azure RBAC definidos en un ámbito más amplio los heredan los recursos que están debajo de ellos.

En la lista se describen los niveles en los que puede definir el ámbito de acceso a IoT Hub, empezando por el ámbito más restringido:

  • IoT Hub. En este ámbito, se aplica una asignación de roles a IoT Hub. No hay ningún ámbito menor que un centro de IoT individual. No se admite la asignación de roles en ámbitos más pequeños, como la identidad de dispositivo individual.
  • el grupo de recursos. En este ámbito, se aplica una asignación de roles a todos los centros de IoT del grupo de recursos.
  • Suscripción. En este ámbito, se aplica una asignación de roles a todos los centros de IoT de todos los grupos de recursos de la suscripción.
  • Un grupo de administración. En este ámbito, se aplica una asignación de roles a todos los centros de IoT de todos los grupos de recursos de todas las suscripciones del grupo de administración.

Permisos para las API del servicio IoT Hub

En las tablas siguientes se describen los permisos disponibles para las API del servicio IoT Hub. Para permitir que un cliente llame a una operación determinada, asegúrese de que el rol RBAC asignado del cliente ofrezca permisos suficientes para esa operación.

Acción de RBAC Descripción
Microsoft.Devices/IotHubs/devices/read Lee cualquier identidad de dispositivo o módulo.
Microsoft.Devices/IotHubs/devices/write Crea o actualiza cualquier identidad de dispositivo o módulo.
Microsoft.Devices/IotHubs/devices/delete Elimina cualquier identidad del dispositivo o módulo.
Microsoft.Devices/IotHubs/twins/read Lee cualquier dispositivo o módulo gemelo.
Microsoft.Devices/IotHubs/twins/write Escribe en cualquier dispositivo o módulo gemelo.
Microsoft.Devices/IotHubs/jobs/read Obtiene una lista de trabajos.
Microsoft.Devices/IotHubs/jobs/write Crea o actualiza cualquier trabajo.
Microsoft.Devices/IotHubs/jobs/delete Elimina cualquier trabajo.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/send/action Envía un mensaje de la nube al dispositivo a cualquier dispositivo.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/feedback/action Recibe, completa o abandona la notificación de comentarios de mensajes de la nube al dispositivo.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/queue/purge/action Elimina todos los comandos pendientes de un dispositivo.
Microsoft.Devices/IotHubs/directMethods/invoke/action Invoca un método directo en cualquier dispositivo o módulo.
Microsoft.Devices/IotHubs/fileUpload/notifications/action Recibe, completa o abandona notificaciones de carga de archivos.
Microsoft.Devices/IotHubs/statistics/read Lee las estadísticas de dispositivos y servicios.
Microsoft.Devices/IotHubs/configurations/read Lee las configuraciones de administración de dispositivos.
Microsoft.Devices/IotHubs/configurations/write Crea o actualiza las configuraciones de administración de dispositivos.
Microsoft.Devices/IotHubs/configurations/delete Elimina cualquier configuración de administración de dispositivos.
Microsoft.Devices/IotHubs/configurations/applyToEdgeDevice/action Aplica el contenido de configuración a un dispositivo perimetral.
Microsoft.Devices/IotHubs/configurations/testQueries/action Valida la condición de destino y las consultas de métricas personalizadas para una configuración.

Sugerencia

Nota:

Para obtener datos de IoT Hub mediante Microsoft Entra ID, configure el enrutamiento a un punto de conexión de Event Hubs personalizado. Para acceder al punto de conexión compatible integrado de Event Hubs, use el método de la cadena de conexión (clave de acceso compartido) como antes.

Aplicar la autenticación de Microsoft Entra

De forma predeterminada, IoT Hub permite el acceso a la API de servicio a través de Microsoft Entra ID, además de mediante directivas de acceso compartido y tokens de seguridad. Para minimizar posibles vulnerabilidades de seguridad asociadas a los tokens de seguridad, puede deshabilitar el acceso con directivas de acceso compartido.

Advertencia

Al denegar las conexiones mediante directivas de acceso compartido, todos los usuarios y servicios que se conectan mediante este método pierden el acceso inmediatamente. En particular, dado que Device Provisioning Service (DPS) solo admite la vinculación de centros de IoT mediante directivas de acceso compartido, se producirá el error "No autorizado" en todos los flujos de aprovisionamiento de dispositivos. Proceda con cautela y planee reemplazar el acceso por el acceso basado en roles de Microsoft Entra.

No continuar si usa un servicio de aprovisionamiento de dispositivos.

  1. Asegúrese de que los clientes y usuarios del servicio tengan el nivel de acceso suficiente a IoT Hub. Para ello, aplique el principio de acceso con privilegios mínimos.

  2. En Azure Portal, vaya hasta su instancia de IoT Hub.

  3. En el panel izquierdo, seleccione Directivas de acceso compartido.

  4. En Conectar con las directivas de acceso compartido, seleccione Denegar y revise la advertencia.

    Captura de pantalla que muestra cómo desactivar las directivas de acceso compartido de IoT Hub.

  5. Seleccione Guardar.

Ahora solo se puede acceder a las API del servicio IoT Hub mediante Microsoft Entra ID y RBAC.

Acceso de Microsoft Entra ID desde Azure Portal

Puede proporcionar acceso a IoT Hub desde Azure Portal con directivas de acceso compartido o permisos de Microsoft Entra.

Cuando intenta acceder a IoT Hub desde Azure Portal, Azure Portal primero comprueba si se le ha asignado un rol de Azure con Microsoft.Devices/iotHubs/listkeys/action. Si es así, Azure Portal usará las claves de las directivas de acceso compartido para acceder a IoT Hub. En caso contrario, Azure Portal intentará acceder a los datos mediante su cuenta de Microsoft Entra.

Para acceder a IoT Hub desde Azure Portal con su cuenta de Microsoft Entra, necesita permisos para acceder a los recursos de datos de IoT Hub (como los dispositivos y gemelos). También necesita permisos para acceder al recurso de IoT Hub en Azure Portal. Los roles integrados proporcionados por IoT Hub conceden acceso a recursos como dispositivos y gemelos, pero no conceden acceso al recurso de IoT Hub. Por lo tanto, el acceso al portal también requiere la asignación de un rol de Azure Resource Manager, como Lector. El rol Lector es una buena opción porque es el rol más restringido que le permite navegar por el portal. y no incluye el permiso Microsoft.Devices/iotHubs/listkeys/action (que proporciona acceso a todos los recursos de datos de IoT Hub a través de directivas de acceso compartido).

Para asegurarse de que una cuenta no tiene acceso fuera de los permisos asignados, no incluya el permiso Microsoft.Devices/iotHubs/listkeys/action al crear un rol personalizado. Por ejemplo, para crear un rol personalizado que pueda leer identidades de dispositivo, pero que no pueda crear ni eliminar dispositivos, cree un rol personalizado que:

  • Tenga la acción de datos Microsoft.Devices/IotHubs/devices/read.
  • No tenga la acción de datos Microsoft.Devices/IotHubs/devices/write.
  • No tenga la acción de datos Microsoft.Devices/IotHubs/devices/delete.
  • No tenga la acción Microsoft.Devices/iotHubs/listkeys/action.

A continuación, asegúrese de que la cuenta no tiene ningún otro rol que tenga el permiso Microsoft.Devices/iotHubs/listkeys/action, como Propietario o Colaborador. Para permitir que la cuenta tenga acceso a los recursos y pueda navegar por el portal, asigne Lector.

Acceso de Microsoft Entra ID desde la CLI de Azure

La mayoría de comandos de IoT Hub admiten autenticación de Microsoft Entra. Puede controlar el tipo de autenticación que se usa para ejecutar comandos mediante el parámetro --auth-type, que acepta los valores key o login. El valor predeterminado es key.

  • Cuando --auth-type tiene el valor de key, como antes, la CLI detecta automáticamente una directiva adecuada al interactuar con IoT Hub.

  • Cuando --auth-type tiene el valor login, se utiliza un token de acceso de la entidad de seguridad que ha iniciado sesión en la CLI de Azure para llevar a cabo la operación.

Para obtener más información, consulte la página de versiones de la extensión de Azure IoT para la CLI de Azure.

Ejemplos del SDK

Pasos siguientes