Contrôler l’accès à IoT Hub en utilisant Microsoft Entra ID

Vous pouvez utiliser Microsoft Entra ID pour authentifier les requêtes aux API du service Azure IoT Hub, telles que la créer une identité d’appareil et appeler la méthode directe. Vous pouvez également utiliser le contrôle d’accès en fonction du rôle (RBAC) Azure pour autoriser ces mêmes API de service. En associant ces technologies, vous pouvez accorder des autorisations d’accès aux API du service IoT Hub à un principal de sécurité Microsoft Entra. Le principal de sécurité peut être un utilisateur, un groupe ou un principal du service d’application.

L’authentification de l’accès en utilisant Microsoft Entra ID et le contrôle des autorisations avec Azure RBAC offrent une sécurité et une simplicité d’utilisation améliorées par rapport aux jetons de sécurité. Pour limiter les problèmes de sécurité potentiels inhérents aux jetons de sécurité, nous vous recommandons d’appliquer l’authentification Microsoft Entra dans la mesure du possible.

Remarque

L’authentification avec Microsoft Entra ID n’est pas prise en charge pour les API d’appareil IoT Hub (comme les messages appareil-à-cloud et les propriétés de mise à jour signalées). Utilisez des clés symétriques ou X.509 pour authentifier les appareils auprès d’IoT Hub.

Authentification et autorisation

L’authentification est le processus visant à prouver que vous êtes bien qui vous prétendez être. L’authentification vérifie l’identité d’un utilisateur ou d’un appareil auprès d’IoT Hub. En anglais, elle est parfois abrégée en AuthN.

L’autorisation est le processus de confirmation des autorisations pour un utilisateur ou un appareil authentifié sur IoT Hub. Elle spécifie les ressources et les commandes auxquelles vous êtes autorisé à accéder, ainsi que ce que vous pouvez faire avec ces ressources et commandes. En anglais, elle est parfois abrégée en AuthZ.

Lorsqu’un principal de sécurité Microsoft Entra demande à accéder à une API de service IoT Hub, l’identité du principal est d’abord authentifiée. Pour l’authentification, la demande doit contenir un jeton d’accès OAuth 2.0 au moment de l’exécution. Le nom de ressource pour la demande du jeton est https://iothubs.azure.net. Si l’application s’exécute dans une ressource Azure comme une machine virtuelle Azure, une application Azure Functions ou une application Azure App Service, elle peut être représentée en tant qu’identité managée.

Une fois le principal Microsoft Entra authentifié, l’étape suivante est l’autorisation. Lors de cette étape, IoT Hub utilise le service d’attribution de rôle de Microsoft Entra pour déterminer les autorisations dont dispose le principal. Si les autorisations du principal correspondent à la ressource ou à l’API demandée, IoT Hub autorise la demande. Ainsi, cette étape exige qu’un ou plusieurs rôles Azure soient attribués au principal de sécurité. IoT Hub fournit des rôles intégrés qui ont des groupes d’autorisations communs.

Gérer l’accès à IoT Hub à l’aide de l’attribution de rôle Azure RBAC

Avec Microsoft Entra ID et RBAC, IoT Hub exige que le principal demandant l’API dispose du niveau d’autorisation approprié pour l’autorisation. Pour octroyer l’autorisation au principal, donnez-lui une attribution de rôle.

Pour garantir des privilèges minimum, attribuez toujours le rôle approprié au niveau de l’étendue de ressource le plus faible possible, à savoir probablement l’étendue IoT Hub.

IoT Hub fournit les rôles intégrés Azure suivants pour autoriser l’accès à l’API du service IoT Hub en utilisant Microsoft Entra ID et le RBAC :

Rôle Description
Contributeur de données IoT Hub Accorde un accès complet aux opérations du plan de données IoT Hub.
Lecteur de données IoT Hub Accorde un accès complet en lecture aux propriétés du plan de données IoT Hub.
Contributeur du Registre IoT Hub Accorde un accès complet au Registre de l’appareil IoT Hub.
Contributeur de jumeau IoT Hub Accorde l’accès en lecture et en écriture à tous les appareils et jumeaux de module IoT Hub.

Vous pouvez également définir des rôles personnalisés à utiliser avec IoT Hub en combinant les autorisations dont vous avez besoin. Pour plus d’informations, consultez Créer des rôles personnalisés pour le contrôle d’accès en fonction du rôle Azure.

Étendue des ressources

Avant d’attribuer un rôle RBAC Azure à un principal de sécurité, déterminez l’étendue de l’accès dont doit disposer le principal de sécurité. Il est toujours préférable d’accorder la plus petite étendue possible. Les rôles RBAC Azure définis au niveau d’une étendue plus large sont hérités par les ressources qui sont sous eux.

Cette liste décrit les niveaux auxquels vous pouvez étendre l’accès à IoT Hub, en commençant par la plus petite étendue :

  • L’instance IoT Hub. Dans cette étendue, une attribution de rôle s’applique au hub IoT. Il n’y a pas d’étendue plus étroite qu’une instance IoT Hub individuelle. L’attribution de rôle à des étendues plus petites, comme l’identité d’appareil individuelle, n’est pas prise en charge.
  • Groupe de ressources. Dans cette étendue, une attribution de rôle s’applique à tous les hubs IoT dans le groupe de ressources.
  • Abonnement. Dans cette étendue, une attribution de rôle s’applique à tous les hubs IoT dans tous les groupes de ressources de l’abonnement.
  • Un groupe d’administration. Dans cette étendue, une attribution de rôle s’applique à tous les hubs IoT dans tous les groupes de ressources de tous les abonnements dans le groupe d’administration.

Autorisations pour les API de service IoT Hub

Le tableau suivant décrit les autorisations disponibles pour les opérations d’API de service IoT Hub. Pour permettre à un client d’appeler une opération particulière, vérifiez que le rôle RBAC attribué au client offre des autorisations suffisantes pour l’opération.

Action RBAC Description
Microsoft.Devices/IotHubs/devices/read Lit une identité d’appareil ou de module.
Microsoft.Devices/IotHubs/devices/write Crée ou met à jour une identité d’appareil ou de module.
Microsoft.Devices/IotHubs/devices/delete Supprime une identité d’appareil ou de module.
Microsoft.Devices/IotHubs/twins/read Lit un jumeau d’appareil ou de module.
Microsoft.Devices/IotHubs/twins/write Écrit un jumeau d’appareil ou de module.
Microsoft.Devices/IotHubs/jobs/read Obtient une liste de travaux.
Microsoft.Devices/IotHubs/jobs/write Crée ou met à jour un travail.
Microsoft.Devices/IotHubs/jobs/delete Supprime un travail.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/send/action Envoie un message cloud-à-appareil à n’importe quel appareil.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/feedback/action Reçoit, termine ou abandonne une notification de commentaire de message cloud-à-appareil.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/queue/purge/action Supprime toutes les commandes en attente pour un appareil.
Microsoft.Devices/IotHubs/directMethods/invoke/action Appelle une méthode directe sur un appareil ou un module.
Microsoft.Devices/IotHubs/fileUpload/notifications/action Reçoit, termine ou abandonne les notifications de chargement de fichier.
Microsoft.Devices/IotHubs/statistics/read Lit les statistiques des services et des appareils.
Microsoft.Devices/IotHubs/configurations/read Lit des configurations de gestion des appareils.
Microsoft.Devices/IotHubs/configurations/write Crée ou met à jour des configurations de gestion des appareils.
Microsoft.Devices/IotHubs/configurations/delete Supprime une configuration de gestion des appareils.
Microsoft.Devices/IotHubs/configurations/applyToEdgeDevice/action Applique le contenu de configuration à un appareil de périphérie.
Microsoft.Devices/IotHubs/configurations/testQueries/action Valide la condition cible et les requêtes de métriques personnalisées pour une configuration.

Conseil

Remarque

Pour obtenir des données d’IoT Hub à l’aide de Microsoft Entra ID, configurez le routage vers un point de terminaison Event Hubs personnalisé. Pour accéder au point de terminaison compatible Event Hubs intégré, utilisez la méthode de la chaîne de connexion (clé d’accès partagé) comme auparavant.

Appliquer l’authentification Microsoft Entra

Par défaut, IoT Hub prend en charge l’accès à l’API de service via Microsoft Entra ID et des stratégies d’accès partagé et des jetons de sécurité. Pour limiter les failles de sécurité potentielles inhérentes aux jetons de sécurité, vous pouvez désactiver l’accès avec des stratégies d’accès partagé.

Avertissement

En refusant les connexions à l’aide de stratégies d’accès partagé, tous les utilisateurs et services qui se connectent à l’aide de cette méthode perdent immédiatement l’accès. Notamment, étant donné que le service DPS (Device Provisioning Service) prend uniquement en charge la liaison de hubs IoT à l’aide de stratégies d’accès partagé, tous les flux de provisionnement des appareils échouent avec une erreur indiquant une absence d’autorisation. Procédez avec soin et prévoyez de remplacer l’accès par un accès en fonction du rôle Microsoft Entra.

Ne procédez pas si vous utilisez le service Provisionnement des appareils.

  1. Vérifiez que les clients et les utilisateurs de votre service disposent de droits d’accès suffisants à votre hub IoT. Suivez le principe des privilèges minimum.

  2. Accédez à votre IoT Hub dans le Portail Azure.

  3. Dans le volet gauche, sélectionnez Stratégies d’accès partagé.

  4. Sous Connecter à l’aide de stratégies d’accès partagé, sélectionnez Refuser et passez en revue l’avertissement.

    Capture d’écran montrant comment désactiver les stratégies d’accès partagé IoT Hub.

  5. Cliquez sur Enregistrer.

Vos API du service IoT Hub sont désormais accessibles uniquement via Microsoft Entra ID et le RBAC.

Accès à Microsoft Entra ID à partir du Portail Azure

Vous pouvez fournir l’accès à IoT Hub à partir du Portail Azure avec des stratégies d’accès partagé ou des autorisations Microsoft Entra.

Lorsque vous essayez d’accéder à IoT Hub à partir du Portail Azure, celui-ci vérifie d’abord si un rôle Azure vous a été attribué avec Microsoft.Devices/iotHubs/listkeys/action. Si c’est le cas, le portail Azure utilise les clés des stratégies d’accès partagé pour accéder à IoT Hub. Sinon, il tente d’accéder aux données en utilisant votre compte Microsoft Entra.

Pour accéder à IoT Hub à partir du Portail Azure en tirant parti de votre compte Microsoft Entra, vous avez besoin d’autorisations pour accéder aux ressources de données IoT Hub (comme les appareils et les jumeaux). Vous avez également besoin d’autorisations pour accéder à la ressource IoT Hub dans le portail Azure. Les rôles intégrés fournis par IoT Hub accordent l’accès à des ressources telles que des appareils et des jumeaux, mais ils n’accordent pas l’accès à la ressource IoT Hub. Par conséquent, l’accès au portail nécessite également l’attribution d’un rôle Azure Resource Manager, comme Lecteur. Le rôle Lecteur est un bon choix, car il s’agit du rôle le plus restreint qui vous permet de naviguer dans le portail. Il n’inclut pas l’autorisation Microsoft.Devices/iotHubs/listkeys/action (qui donne accès à toutes les ressources de données IoT Hub par le biais de stratégies d’accès partagé).

Pour vous assurer qu’un compte n’a pas accès en dehors des autorisations qui lui sont attribuées, n’incluez pas l’autorisation Microsoft.Devices/iotHubs/listkeys/action lorsque vous créez un rôle personnalisé. Par exemple, pour créer un rôle personnalisé qui peut lire les identités des appareils mais ne peut pas créer ou supprimer d’appareil, créez un rôle personnalisé qui :

  • A l’action de données Microsoft.Devices/IotHubs/devices/read.
  • N’a pas l’action de données Microsoft.Devices/IotHubs/devices/write.
  • N’a pas l’action de données Microsoft.Devices/IotHubs/devices/delete.
  • N’a pas l’action Microsoft.Devices/iotHubs/listkeys/action.

Ensuite, vérifiez que le compte n’a pas d’autres rôles qui disposent de l’autorisation Microsoft.Devices/iotHubs/listkeys/action, comme Propriétaire ou Contributeur. Pour permettre au compte d’accéder aux ressources et de naviguer dans le portail, attribuez le rôle Lecteur.

Accès à Microsoft Entra ID à partir d’Azure CLI

La plupart des commandes sur IoT Hub prennent en charge l’authentification Microsoft Entra. Vous pouvez contrôler le type d’authentification utilisé pour exécuter des commandes à l’aide du paramètre --auth-type, qui accepte des valeurs key ou login. La valeur par défaut est key.

  • Lorsque --auth-type a la valeur key, comme précédemment, l’interface CLI découvre automatiquement une stratégie appropriée lors de l’interaction avec IoT Hub.

  • Lorsque --auth-type a la valeur login, un jeton d’accès du principal connecté à Azure CLI est utilisé pour l’opération.

Pour plus d’informations, consultez la page de publication de l’extension Azure IoT pour Azure CLI.

Exemples du Kit de développement logiciel (SDK)

Étapes suivantes