Prise en charge des identités managées par IoT Hub

Les identités gérées fournissent aux services Azure une identité gérée automatiquement dans Microsoft Entra ID de manière sécurisée. Ainsi, les développeurs n’ont plus à gérer les informations d’identification en fournissant une identité. Il existe deux types d’identités managées : celles affectées par le système et celles affectées par l’utilisateur. IoT Hub prend en charge les deux.

Dans IoT Hub, les identités managées peuvent être utilisées pour la connectivité de sortie de IoT Hub à d’autres services Azure pour des fonctionnalités telles que le routage des messages, le chargement de fichiers et l’importation/exportation d’appareils en bloc. Dans cet article, vous allez apprendre à utiliser des identités managées affectées par le système et affectées par l’utilisateur dans votre hub IoT pour différentes fonctionnalités.

Prérequis

Identité managée affectée par le système

Activer ou désactiver une identité managée affectée par le système dans le portail Azure

  1. Connectez-vous au portail Azure et accédez à votre IoT Hub.

  2. Sélectionnez Identité dans la section Paramètres de sécurité du menu de navigation.

  3. Sélectionnez l’onglet Affectée par le système.

  4. Définissez l’État de l’identité managée affectée par le système sur Activé ou Désactivé, puis sélectionnez Enregistrer.

    Remarque

    Vous ne pouvez pas désactiver une identité managée affectée par le système tant qu’elle est en cours d’utilisation. Assurez-vous qu’aucun point de terminaison personnalisé n’utilise une authentification par identité managée affectée par le système avant de désactiver la fonctionnalité.

    Screenshot showing where to turn on system-assigned managed identity for an IoT hub.

Activer l’identité managée affectée par le système au moment de la création du hub en utilisant un modèle ARM

Pour activer l’identité managée affectée par le système dans votre hub IoT au moment de l’approvisionnement des ressources, utilisez le modèle Azure Resource Manager (ARM) ci-dessous.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": 
    {
      "iotHubName": {
        "type": "string",
        "metadata": {
          "description": "Name of iothub resource"
        }
      },
      "skuName": {
        "type": "string",
        "defaultValue": "S1",
        "metadata": {
          "description": "SKU name of iothub resource, by default is Standard S1"
        }
      },
      "skuTier": {
        "type": "string",
        "defaultValue": "Standard",
        "metadata": {
          "description": "SKU tier of iothub resource, by default is Standard"
        }
      },
      "location": {
        "type": "string",
        "defaultValue": "[resourceGroup().location]",
        "metadata": {
          "description": "Location of iothub resource. Please provide any of supported-regions of iothub"
        }
      }
    },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-10-01",
      "name": "createIotHub",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.Devices/IotHubs",
              "apiVersion": "2021-03-31",
              "name": "[parameters('iotHubName')]",
              "location": "[parameters('location')]",
              "identity": {
                "type": "SystemAssigned"
              },
              "sku": {
              "name": "[parameters('skuName')]",
              "tier": "[parameters('skuTier')]",
              "capacity": 1
              }
            }
          ] 
        }
      }
    }
  ]
}

Après avoir substitué les valeurs de votre ressource name, location, SKU.name et SKU.tier, vous pouvez utiliser l’interface de ligne de commande Azure pour déployer la ressource dans un groupe de ressources existant en utilisant :

az deployment group create --name <deployment-name> --resource-group <resource-group-name> --template-file <template-file.json> --parameters iotHubName=<valid-iothub-name> skuName=<sku-name> skuTier=<sku-tier> location=<any-of-supported-regions>

Une fois la ressource créée, vous pouvez récupérer l'identité affectée par le système à votre hub en utilisant l’interface de ligne de commande Azure :

az resource show --resource-type Microsoft.Devices/IotHubs --name <iot-hub-resource-name> --resource-group <resource-group-name>

Identité managée affectée par l’utilisateur

Dans cette section, vous allez découvrir comment ajouter une identité managée affectée par l’utilisateur sur un hub IoT et comment l’en supprimer en utilisant le portail Azure.

  1. Tout d’abord, vous devez créer une identité managée affectée par l’utilisateur en tant que ressource autonome. Pour ce faire, vous pouvez suivre les instructions fournies dans Créer une identité managée affectée par l’utilisateur.

  2. Accédez à votre hub IoT, puis à l’identité dans le portail IoT Hub.

  3. Sous l’onglet Affectée par l’utilisateur, cliquez sur Associer une identité managée affectée par l’utilisateur. Choisissez l’identité managée affectée par l’utilisateur que vous souhaitez ajouter à votre hub, puis cliquez sur Sélectionner.

  4. Vous pouvez supprimer une identité affectée par l’utilisateur d’un hub IoT. Choisissez l’identité affectée par l’utilisateur que vous souhaitez supprimer, puis cliquez sur le bouton Supprimer. Notez que vous le supprimez uniquement du hub IoT, et que cette suppression ne supprime pas l’identité affectée par l’utilisateur en tant que ressource. Pour supprimer l’identité affectée par l’utilisateur en tant que ressource, suivez les instructions fournies dans Supprimer une identité managée affectée par l’utilisateur.

    Screenshot showing how to add user-assigned managed identity for an I O T hub.

Activer l’identité managée affectée par l'utilisateur au moment de la création du hub en utilisant un modèle ARM

L’exemple de modèle suivant peut être utilisé pour créer un hub avec une identité managée affectée par l'utilisateur. Ce modèle crée une identité affectée par l’utilisateur portant le nom [iothub-name-provided]-identity et destinée au hub IoT créé. Si besoin, vous pouvez modifier ce modèle afin d’ajouter plusieurs identités affectées par l’utilisateur.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "iotHubName": {
      "type": "string",
      "metadata": {
        "description": "Name of iothub resource"
      }
    },
  "skuName": {
    "type": "string",
    "defaultValue": "S1",
    "metadata": {
      "description": "SKU name of iothub resource, by default is Standard S1"
    }
  },
  "skuTier": {
    "type": "string",
    "defaultValue": "Standard",
    "metadata": {
      "description": "SKU tier of iothub resource, by default is Standard"
    }
  },
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]",
    "metadata": {
      "description": "Location of iothub resource. Please provide any of supported-regions of iothub"
    }
  }
},
  "variables": {
    "identityName": "[concat(parameters('iotHubName'), '-identity')]"
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-10-01",
      "name": "createIotHub",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
              "name": "[variables('identityName')]",
              "apiVersion": "2018-11-30",
              "location": "[resourceGroup().location]"
            },
            {
              "type": "Microsoft.Devices/IotHubs",
              "apiVersion": "2021-03-31",
              "name": "[parameters('iotHubName')]",
              "location": "[parameters('location')]",
              "identity": {
                "type": "UserAssigned",
                "userAssignedIdentities": {
                  "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('identityName'))]": {}
                }
              },
              "sku": {
                "name": "[parameters('skuName')]",
                "tier": "[parameters('skuTier')]",
                "capacity": 1
              },
              "dependsOn": [
                "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('identityName'))]"
              ]
            }
          ]
        }
      }
    }
  ]
}
az deployment group create --name <deployment-name> --resource-group <resource-group-name> --template-file <template-file.json> --parameters iotHubName=<valid-iothub-name> skuName=<sku-name> skuTier=<sku-tier> location=<any-of-supported-regions>

Une fois la ressource créée, vous pouvez récupérer l'identité managée affectée par l'utilisateur dans votre hub en utilisant l’interface de ligne de commande Azure :

az resource show --resource-type Microsoft.Devices/IotHubs --name <iot-hub-resource-name> --resource-group <resource-group-name>

Connectivité entrante d’IoT Hub vers d'autres ressources Azure

Les identités managées peuvent être utilisées pour la connectivité de sortie de IoT Hub à d’autres services Azure pour le routage des messages, le chargement de fichiers et l’importation/exportation d’appareils en bloc. Vous pouvez choisir l’identité managée à utiliser pour chaque connectivité de sortie d’IoT Hub aux points de terminaison appartenant au client, y compris les comptes de stockage, les Event Hubs et les points de terminaison Service Bus.

Notes

Seule l’identité gérée affectée par le système permet IoT Hub l’accès aux ressources privées. Si vous souhaitez utiliser une identité gérée affectée par l’utilisateur, l’accès public à ces ressources privées doit être activé pour permettre la connectivité.

Configurer le routage des messages avec des identités managées

Dans cette section, nous utilisons le routage des messages vers un point de terminaison personnalisé des Event Hubs en guise d’exemple. L’exemple s’applique également à d’autres points de terminaison personnalisés de routage.

  1. Accédez à votre Event Hub dans le Portail Azure pour attribuer l’accès approprié à l’identité managée.

  2. Sélectionnez Contrôle d’accès (IAM) .

  3. Sélectionner Ajouter> Ajouter une attribution de rôle.

    Screenshot showing Access control (IAM) page with Add role assignment menu open.

  4. Sous l’onglet Rôle, sélectionnez Expéditeur de données Azure Event Hubs.

    Notes

    Pour un compte de stockage, sélectionnez Contributeur aux données Blob du stockage (et non Contributeur ou Contributeur de compte de stockage) en tant que rôle. Pour un Service Bus, sélectionnez Expéditeur de données Service Bus.

    Screenshot showing Add role assignment page with Role tab selected.

  5. Sous l’onglet Membres, sélectionnez Identité managée, puis Sélectionner des membres.

  6. Sélectionnez votre abonnement, sélectionnez Identité managée affectée par l’utilisateur, puis votre identité managée affectée par l’utilisateur.

  7. Pour les identités managées affectées par le système, sélectionnez votre abonnement, sélectionnez Toutes les identités managées affectées par le système, puis sélectionnez le nom de la ressource de votre IoT Hub.

  8. Dans l’onglet Passer en revue + affecter, sélectionnez Passer en revue + affecter pour affecter le rôle.

    Pour plus d’informations sur l’attribution de rôle, consultez Attribuer des rôles Azure à l’aide du Portail Azure

  9. Si vous devez restreindre la connectivité à votre point de terminaison personnalisé par le biais d’un réseau virtuel, vous devez activer l’exception des premiers tiers Microsoft approuvés pour permettre à votre hub IoT d’accéder au point de terminaison spécifique. Par exemple, si vous ajoutez un point de terminaison personnalisé d’Event Hub, accédez à l’onglet Pare-feux et réseaux virtuels dans votre Event Hub et activez l’option Autoriser l’accès à partir des réseaux sélectionnés. Sous la liste Exceptions, cochez la case Autoriser les services Microsoft approuvés à accéder aux hubs d’événements. Cliquez sur le bouton Enregistrer . Cela s’applique également au compte de stockage et à Service Bus. En savoir plus sur la prise en charge des réseaux virtuels par IoT Hub.

    Notes

    Vous devez effectuer les étapes ci-dessus pour attribuer le bon accès à l’identité managée avant d’ajouter l’Event Hub comme point de terminaison personnalisé dans IoT Hub. Patientez quelques minutes pour que l’attribution de rôle se propage.

  10. Ensuite, accédez à votre hub IoT. Dans votre hub, accédez à Routage des messages, puis sélectionnez Ajouter.

  11. Sous l’onglet Point de terminaison, créez un point de terminaison pour votre hub d’événements en fournissant les informations suivantes :

    Paramètre Valeur
    Type de point de terminaison Sélectionnez Event Hubs.
    Nom du point de terminaison Fournissez un nom unique pour un nouveau point de terminaison ou sélectionnez Sélectionner un élément existant pour choisir un point de terminaison Event Hubs existant.
    Espace de noms Event Hubs Utilisez le menu déroulant pour sélectionner un espace de noms Event Hubs existant dans votre abonnement.
    Instance Event Hub Utilisez le menu déroulant pour sélectionner un hub d’événements existant dans votre espace de noms.
    Type d’authentification Sélectionnez Attribué par l’utilisateur, puis utilisez le menu déroulant pour sélectionner Identité attribuée par l’utilisateur que vous avez créé dans votre hub d’événements.

    Screenshot that shows event hub endpoint with user assigned authentication.

  12. Sélectionnez Créer + suivant. Vous pouvez continuer via l’Assistant pour créer un itinéraire qui pointe vers ce point de terminaison, ou vous pouvez fermer l’Assistant.

Vous pouvez modifier le type d’authentification d’un point de terminaison personnalisé existant. Pour modifier un point de terminaison, procédez comme suit :

  1. Dans votre hub IoT, sélectionnez Routage des messages dans le volet de navigation gauche, puis Points de terminaison personnalisés.

  2. Cochez la case du point de terminaison personnalisé que vous souhaitez modifier, puis sélectionnez Modifier le type d’authentification.

  3. Choisissez le nouveau type d’authentification pour ce point de terminaison, puis sélectionnez Enregistrer.

Configurer le chargement de fichiers avec des identités managées

La fonctionnalité de chargement de fichiers d’IoT Hub permet aux appareils de charger des fichiers sur un compte de stockage appartenant au client. Pour que le chargement de fichiers puisse fonctionner, IoT Hub doit être connecté au compte de stockage. À l’instar du routage des messages, vous pouvez choisir le type d’authentification et l’identité managée de votre choix pour la connectivité de sortie d’IoT Hub à votre compte de stockage Azure.

  1. Dans le portail Azure, accédez à votre compte de stockage.

  2. Sélectionnez Contrôle d’accès (IAM) .

  3. Sélectionner Ajouter> Ajouter une attribution de rôle.

    Screenshot showing Access control (IAM) page with Add role assignment menu open.

  4. Dans l’onglet Rôle, sélectionnez Contributeur aux données Blob du stockage. (Ne sélectionnez pas Contributeur ou contributeur de compte Stockage.)

  5. Sous l’onglet Membres, sélectionnez Identité managée, puis Sélectionner des membres.

  6. Sélectionnez votre abonnement, sélectionnez Identité managée affectée par l’utilisateur, puis votre identité managée affectée par l’utilisateur.

  7. Pour les identités managées affectées par le système, sélectionnez votre abonnement, sélectionnez Toutes les identités managées affectées par le système, puis sélectionnez le nom de la ressource de votre IoT Hub.

  8. Dans l’onglet Passer en revue + affecter, sélectionnez Passer en revue + affecter pour affecter le rôle.

    Pour plus d’informations sur l’attribution de rôle, consultez Attribuer des rôles Azure à l’aide du Portail Azure

    Si vous devez restreindre la connectivité à votre compte de stockage par le biais d’un réseau virtuel, vous devez activer l’exception des premiers tiers Microsoft approuvés pour permettre à votre hub IoT d’accéder au compte de stockage. Sur la page des ressources de votre compte de stockage, accédez à l’onglet Pare-feux et réseaux virtuels et activez l’option Autoriser l’accès à partir des réseaux sélectionnés. Sous la liste Exceptions, cochez la case Autoriser les services Microsoft approuvés à accéder à ce compte de stockage. Cliquez sur le bouton Enregistrer . En savoir plus sur la prise en charge des réseaux virtuels par IoT Hub.

    Notes

    Vous devez effectuer les étapes ci-dessus pour attribuer à l’identité managée le bon accès avant d’enregistrer le compte de stockage dans IoT Hub pour le chargement de fichiers à l’aide de l’identité managée. Patientez quelques minutes pour que l’attribution de rôle se propage.

  9. Sur la page des ressources de votre hub IoT, accédez à l’onglet Chargement de fichiers.

  10. Sur la page qui s’affiche, sélectionnez le conteneur que vous comptez utiliser dans votre stockage blob, puis configurez les paramètres de notification de fichier, la durée de vie SAP, la durée de vie par défaut et le nombre maximal de distributions comme vous le souhaitez. Choisissez le type d’authentification de votre choix, puis cliquez sur Enregistrer. Si vous recevez une erreur à cette étape, configurez temporairement votre compte de stockage afin d’autoriser l’accès à partir de tous les réseaux, puis réessayez. Vous pouvez configurer le pare-feu sur le compte de stockage une fois la configuration du chargement de fichiers terminée.

    Screen shot that shows file upload with msi.

    Remarque

    Dans le scénario de chargement de fichiers, le hub et votre appareil doivent tous deux se connecter à votre compte de stockage. Les étapes ci-dessus permettent de connecter votre hub IoT à votre compte de stockage avec le type d’authentification souhaité. Vous devez toujours connecter votre appareil au stockage à l’aide de l’URI SAS. Actuellement, l’URI SAS est généré à l’aide d’une chaîne de connexion. Prochainement, l’URI SAS pourra également être généré à l’aide d’une identité managée. Suivez la procédure décrite dans Chargement de fichiers.

Configurer l’importation/exportation d’appareils en bloc avec des identités managées

IoT Hub prend en charge la fonctionnalité permettant d’importer/exporter en bloc les informations des appareils depuis/vers un stockage de blobs fourni par le client. Cette fonctionnalité nécessite une connectivité entre IoT Hub et le compte de stockage.

  1. Dans le portail Azure, accédez à votre compte de stockage.

  2. Sélectionnez Contrôle d’accès (IAM) .

  3. Sélectionner Ajouter> Ajouter une attribution de rôle.

    Screenshot showing Access control (IAM) page with Add role assignment menu open.

  4. Dans l’onglet Rôle, sélectionnez Contributeur aux données Blob du stockage. (Ne sélectionnez pas Contributeur ou contributeur de compte Stockage.)

  5. Sous l’onglet Membres, sélectionnez Identité managée, puis Sélectionner des membres.

  6. Sélectionnez votre abonnement, sélectionnez Identité managée affectée par l’utilisateur, puis votre identité managée affectée par l’utilisateur.

  7. Pour les identités managées affectées par le système, sélectionnez votre abonnement, sélectionnez Toutes les identités managées affectées par le système, puis sélectionnez le nom de la ressource de votre IoT Hub.

  8. Dans l’onglet Passer en revue + affecter, sélectionnez Passer en revue + affecter pour affecter le rôle.

    Pour plus d’informations sur l’attribution de rôle, consultez Attribuer des rôles Azure à l’aide du Portail Azure

Utilisation de l’API REST ou du Kit de développement logiciel (SDK) pour les travaux d’importation et d’exportation

Vous pouvez désormais utiliser les API REST d’Azure IoT pour créer des travaux d’importation et d’exportation. Vous devrez fournir les propriétés suivantes dans le corps de la demande :

  • storageAuthenticationType : Définissez la valeur sur identityBased.
  • inputBlobContainerUri : Définissez cette propriété uniquement dans le travail d’importation.
  • outputBlobContainerUri : Définissez cette propriété pour les travaux d’importation et d’exportation.
  • identity : Définissez la valeur sur l’identité managée à utiliser.

Les kits SDK IoT Hub Azure prennent également en charge cette fonctionnalité dans le gestionnaire de registre du client du service. L’extrait de code suivant indique comment créer une tâche d’importation ou d’exportation en utilisant le SDK C#.

Extrait de code C#

    // Create an export job
 
    using RegistryManager srcRegistryManager = RegistryManager.CreateFromConnectionString(hubConnectionString);
 
    JobProperties jobProperties = JobProperties.CreateForExportJob(
        outputBlobContainerUri: blobContainerUri,
        excludeKeysInExport: false,
        storageAuthenticationType: StorageAuthenticationType.IdentityBased,
        identity: new ManagedIdentity
        {
            userAssignedIdentity = userDefinedManagedIdentityResourceId
        });
    // Create an import job
    
    using RegistryManager destRegistryManager = RegistryManager.CreateFromConnectionString(hubConnectionString);
 
    JobProperties jobProperties = JobProperties.CreateForImportJob(
        inputBlobContainerUri: blobContainerUri,
        outputBlobContainerUri: blobContainerUri,
        storageAuthenticationType: StorageAuthenticationType.IdentityBased,
        identity: new ManagedIdentity
        {
            userAssignedIdentity = userDefinedManagedIdentityResourceId
        });

Extrait de code Python

# see note below
iothub_job_manager = IoTHubJobManager("<IoT Hub connection string>")

# Create an import job
result = iothub_job_manager.create_import_export_job(JobProperties(
    type="import",
    input_blob_container_uri="<input container URI>",
    output_blob_container_uri="<output container URI>",
    storage_authentication_type="identityBased",
    identity=ManagedIdentity(
        user_assigned_identity="<resource ID of user assigned managed identity>"
    )
))

# Create an export job
result = iothub_job_manager.create_import_export_job(JobProperties(
    type="export",
    output_blob_container_uri="<output container URI>",
    storage_authentication_type="identityBased",
    exclude_keys_in_export=True,
    identity=ManagedIdentity(
        user_assigned_identity="<resource ID of user assigned managed identity>"
    ) 
))

Notes

  • Si storageAuthenticationType est défini sur identityBased et que la propriété userAssignedIdentity n’a pas la valeur Null, les travaux utilisent l’identité managée affectée par l’utilisateur spécifiée.
  • Si le hub IoT n’est pas configuré avec l’identité managée affectée par l’utilisateur spécifiée dans userAssignedIdentity, le travail échoue.
  • Si storageAuthenticationType est défini sur identityBased et que la propriété userAssignedIdentity a la valeur Null, les travaux utilisent l’identité affectée par le système.
  • Si le hub IoT n’est pas configuré avec l’identité managée affectée par l’utilisateur, le travail échoue.
  • Si storageAuthenticationType est défini sur identityBased et que ni les identités managées affectées par l’utilisateur ni celles affectées par le système ne sont configurées sur le hub, le travail échoue.

Exemples du Kit de développement logiciel (SDK)

Étapes suivantes

Utilisez les liens ci-dessous pour en savoir plus sur les fonctionnalités IoT Hub :