Control del acceso a IoT Hub mediante Azure Active Directory

Puede usar Azure Active Directory (Azure AD) 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 Azure AD. Esta entidad de seguridad podría ser un usuario, grupo o entidad de servicio de aplicación.

La autenticación del acceso con Azure AD 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 posibles problemas de seguridad inherentes a los tokens de seguridad, recomendamos usar Azure AD con su instancia de IoT Hub siempre que sea posible.

Nota

La autenticación con Azure AD 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

Cuando una entidad de seguridad de Azure AD 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 Azure AD, el siguiente paso es la autorización. En este paso, IoT Hub usa el servicio de asignación de roles de Azure AD 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 Azure AD 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 Azure AD y RBAC:

Rol 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 sección de la identidad del dispositivo individual o del gemelo.
  • 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 Azure AD, configure el enrutamiento a un centro de eventos independiente. 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.

Acceso de Azure AD y directivas de acceso compartido

De forma predeterminada, IoT Hub permite el acceso a la API de servicio a través de Azure AD, además de mediante directivas de acceso compartido y tokens de seguridad. Para minimizar posibles vulnerabilidades de seguridad asociadas a los tokens de seguridad, deshabilite el acceso con directivas de acceso compartido:

  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 Connect using shared access policies (Conectar mediante directivas de acceso compartido),seleccione Denegar. Captura de pantalla que muestra cómo desactivar las directivas de acceso compartido de IoT Hub.
  5. Revise la advertencia y seleccione Guardar.

Ahora solo se puede acceder a las API del servicio IoT Hub mediante Azure AD y RBAC.

Acceso de Azure AD desde Azure Portal

Cuando intenta acceder a IoT Hub, 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 Azure AD.

Para acceder a IoT Hub desde Azure Portal con su cuenta de Azure AD, 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.

Extensión de Azure IoT para la CLI de Azure

La mayoría de comandos de IoT Hub admiten autenticación de Azure AD. 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