Share via


IoT Hub-ondersteuning voor beheerde identiteiten

Beheerde identiteiten bieden Azure-services met een automatisch beheerde identiteit in Microsoft Entra ID op een veilige manier. Dit elimineert de noodzaak voor ontwikkelaars om referenties te beheren door een identiteit op te geven. Er zijn twee typen beheerde identiteiten: door het systeem toegewezen en door de gebruiker toegewezen. IoT Hub ondersteunt beide.

In IoT Hub kunnen beheerde identiteiten worden gebruikt voor uitgaande connectiviteit van IoT Hub naar andere Azure-services voor functies zoals berichtroutering, bestandsupload en bulksgewijs importeren/exporteren van apparaten. In dit artikel leert u hoe u door het systeem toegewezen en door de gebruiker toegewezen beheerde identiteiten in uw IoT-hub gebruikt voor verschillende functies.

Vereisten

Door het systeem toegewezen beheerde identiteit

Door het systeem toegewezen beheerde identiteit in- of uitschakelen in Azure Portal

  1. Meld u aan bij de Azure-portal en ga naar uw IoT Hub.

  2. Selecteer Identiteit in de sectie Beveiligingsinstellingen van het navigatiemenu.

  3. Selecteer het tabblad Systeem toegewezen .

  4. Stel de door het systeem toegewezen beheerde identiteitsstatus in op Aan of Uit en selecteer Opslaan.

    Notitie

    U kunt door het systeem toegewezen beheerde identiteit niet uitschakelen terwijl deze wordt gebruikt. Zorg ervoor dat er geen aangepaste eindpunten gebruikmaken van door het systeem toegewezen beheerde identiteitverificatie voordat u de functie uitschakelt.

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

Door het systeem toegewezen beheerde identiteit inschakelen tijdens het maken van de hub met behulp van een ARM-sjabloon

Als u de door het systeem toegewezen beheerde identiteit wilt inschakelen in uw IoT-hub tijdens het inrichten van resources, gebruikt u de azure Resource Manager-sjabloon (ARM) hieronder.

{
  "$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
              }
            }
          ] 
        }
      }
    }
  ]
}

Nadat u de waarden voor uw resource namehebt vervangen, SKU.namelocationkunt SKU.tieru Azure CLI gebruiken om de resource in een bestaande resourcegroep te implementeren met behulp van:

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>

Nadat de resource is gemaakt, kunt u de door het systeem toegewezen aan uw hub ophalen met behulp van Azure CLI:

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

Door de gebruiker toegewezen beheerde identiteit

In deze sectie leert u hoe u een door de gebruiker toegewezen beheerde identiteit toevoegt aan en verwijdert uit een IoT-hub met behulp van Azure Portal.

  1. Eerst moet u een door de gebruiker toegewezen beheerde identiteit maken als een zelfstandige resource. Hiervoor kunt u de instructies volgen in Een door de gebruiker toegewezen beheerde identiteit maken.

  2. Ga naar uw IoT-hub en navigeer naar de identiteit in de IoT Hub-portal.

  3. Klik op het tabblad Door de gebruiker toegewezen op Een door de gebruiker toegewezen beheerde identiteit koppelen. Kies de door de gebruiker toegewezen beheerde identiteit die u wilt toevoegen aan uw hub en klik vervolgens op Selecteren.

  4. U kunt een door de gebruiker toegewezen identiteit verwijderen uit een IoT-hub. Kies de door de gebruiker toegewezen identiteit die u wilt verwijderen en klik op de knop Verwijderen . Houd er rekening mee dat u deze alleen verwijdert uit De IoT-hub. Met deze verwijdering wordt de door de gebruiker toegewezen identiteit niet als een resource verwijderd. Als u de door de gebruiker toegewezen identiteit als een resource wilt verwijderen, volgt u de instructies in Een door de gebruiker toegewezen beheerde identiteit verwijderen.

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

Door de gebruiker toegewezen beheerde identiteit inschakelen tijdens het maken van de hub met behulp van een ARM-sjabloon

De volgende voorbeeldsjabloon kan worden gebruikt om een hub te maken met door de gebruiker toegewezen beheerde identiteit. Met deze sjabloon maakt u één door de gebruiker toegewezen identiteit met de naam [iothub-name-provided]-identity en toegewezen aan de Gemaakte IoT-hub. U kunt de sjabloon zo nodig wijzigen om meerdere door de gebruiker toegewezen identiteiten toe te voegen.

{
  "$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>

Nadat de resource is gemaakt, kunt u de door de gebruiker toegewezen beheerde identiteit in uw hub ophalen met behulp van Azure CLI:

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

Uitgaande connectiviteit van IoT Hub naar andere Azure-resources

Beheerde identiteiten kunnen worden gebruikt voor uitgaande connectiviteit van IoT Hub naar andere Azure-services voor berichtroutering, bestandsupload en bulksgewijs importeren/exporteren van apparaten. U kunt kiezen welke beheerde identiteit moet worden gebruikt voor elke uitgaande IoT Hub-verbinding met eindpunten die eigendom zijn van de klant, waaronder opslagaccounts, Event Hubs en Service Bus-eindpunten.

Notitie

Alleen door het systeem toegewezen beheerde identiteit geeft IoT Hub toegang tot privéresources. Als u een door de gebruiker toegewezen beheerde identiteit wilt gebruiken, moet de openbare toegang voor deze privébronnen worden ingeschakeld om connectiviteit mogelijk te maken.

Berichtroutering configureren met beheerde identiteiten

In deze sectie gebruiken we de berichtroutering naar een aangepast Event Hubs-eindpunt als voorbeeld. Het voorbeeld is ook van toepassing op andere aangepaste routeringseindpunten.

  1. Ga naar uw Event Hub in Azure Portal om de beheerde identiteit de juiste toegang toe te wijzen.

  2. Klik op Toegangsbeheer (IAM) .

  3. Selecteer Roltoewijzing toevoegen.>

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

  4. Selecteer op het tabblad Rol de optie Azure Event Hubs-gegevenszender.

    Notitie

    Voor een opslagaccount selecteert u Inzender voor Opslagblobgegevens (niet Inzender of Inzender voor opslagaccount) als de rol. Selecteer Azure Service Bus-gegevenszender voor een servicebus.

    Screenshot showing Add role assignment page with Role tab selected.

  5. Selecteer beheerde identiteit op het tabblad Leden en selecteer vervolgens Leden selecteren.

  6. Voor door de gebruiker toegewezen beheerde identiteiten selecteert u uw abonnement, selecteert u door de gebruiker toegewezen beheerde identiteit en selecteert u vervolgens uw door de gebruiker toegewezen beheerde identiteit.

  7. Selecteer uw abonnement voor door het systeem toegewezen beheerde identiteiten, selecteer alle door het systeem toegewezen beheerde identiteiten en selecteer vervolgens de resourcenaam van uw IoT Hub.

  8. Selecteer op het tabblad Beoordelen en toewijzen de optie Beoordelen en toewijzen om de rol toe te wijzen.

    Zie Azure-rollen toewijzen met behulp van Azure Portal voor meer informatie over roltoewijzingen

  9. Als u de connectiviteit met uw aangepaste eindpunt wilt beperken via een VNet, moet u de uitzondering van de vertrouwde Microsoft first party inschakelen om uw IoT-hub toegang te geven tot het specifieke eindpunt. Als u bijvoorbeeld een aangepast eindpunt voor een Event Hub toevoegt, gaat u naar het tabblad Firewalls en virtuele netwerken in uw Event Hub en schakelt u Toegang vanuit geselecteerde netwerken in. Schakel onder de lijst Uitzonderingen het selectievakje vertrouwde Microsoft-services toegang tot Event Hubs toestaan in. Klik op de knop Opslaan. Dit geldt ook voor opslagaccounts en servicebus. Meer informatie over ioT Hub-ondersteuning voor virtuele netwerken.

    Notitie

    U moet bovenstaande stappen uitvoeren om de beheerde identiteit de juiste toegang toe te wijzen voordat u de Event Hub toevoegt als een aangepast eindpunt in IoT Hub. Wacht enkele minuten totdat de roltoewijzing is doorgegeven.

  10. Ga vervolgens naar uw IoT-hub. Navigeer in uw hub naar Berichtroutering en selecteer Vervolgens Toevoegen.

  11. Maak op het tabblad Eindpunt een eindpunt voor uw Event Hub door de volgende informatie op te geven:

    Parameter Waarde
    Eindpunttype Selecteer Event Hubs.
    Eindpuntnaam Geef een unieke naam op voor een nieuw eindpunt of selecteer Bestaande selecteren om een bestaand Event Hubs-eindpunt te kiezen.
    Event Hubs-naamruimte Gebruik de vervolgkeuzelijst om een bestaande Event Hubs-naamruimte in uw abonnement te selecteren.
    Event Hub-exemplaar Gebruik de vervolgkeuzelijst om een bestaande Event Hub in uw naamruimte te selecteren.
    Verificatietype Selecteer Door de gebruiker toegewezen en gebruik vervolgens de vervolgkeuzelijst om de door de gebruiker toegewezen identiteit te selecteren die u in uw Event Hub hebt gemaakt.

    Screenshot that shows event hub endpoint with user assigned authentication.

  12. Selecteer Maken + volgende. U kunt doorgaan met de wizard om een route te maken die naar dit eindpunt verwijst, of u kunt de wizard sluiten.

U kunt het verificatietype van een bestaand aangepast eindpunt wijzigen. Gebruik de volgende stappen om een eindpunt te wijzigen:

  1. Selecteer in uw IoT-hub berichtroutering in het linkernavigatiedeelvenster en vervolgens Aangepaste eindpunten.

  2. Schakel het selectievakje in voor het aangepaste eindpunt dat u wilt wijzigen en selecteer vervolgens Verificatietype wijzigen.

  3. Kies het nieuwe verificatietype voor dit eindpunt en selecteer Opslaan.

Bestandsupload configureren met beheerde identiteiten

Met de functie voor het uploaden van bestanden van IoT Hub kunnen apparaten bestanden uploaden naar een opslagaccount dat eigendom is van de klant. Om het uploaden van bestanden naar functie toe te staan, moet IoT Hub verbinding hebben met het opslagaccount. Net als bij berichtroutering kunt u het voorkeursverificatietype en de beheerde identiteit kiezen voor uitgaande ioT Hub-connectiviteit met uw Azure Storage-account.

  1. Ga in Azure Portal naar uw opslagaccount.

  2. Klik op Toegangsbeheer (IAM) .

  3. Selecteer Roltoewijzing toevoegen.>

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

  4. Selecteer op het tabblad Rol de optie Inzender voor opslagblobgegevens. (Selecteer nietInzender of inzender voor opslagaccounts.)

  5. Selecteer beheerde identiteit op het tabblad Leden en selecteer vervolgens Leden selecteren.

  6. Voor door de gebruiker toegewezen beheerde identiteiten selecteert u uw abonnement, selecteert u door de gebruiker toegewezen beheerde identiteit en selecteert u vervolgens uw door de gebruiker toegewezen beheerde identiteit.

  7. Selecteer uw abonnement voor door het systeem toegewezen beheerde identiteiten, selecteer alle door het systeem toegewezen beheerde identiteiten en selecteer vervolgens de resourcenaam van uw IoT Hub.

  8. Selecteer op het tabblad Beoordelen en toewijzen de optie Beoordelen en toewijzen om de rol toe te wijzen.

    Zie Azure-rollen toewijzen met behulp van Azure Portal voor meer informatie over roltoewijzingen

    Als u de connectiviteit met uw opslagaccount via een VNet wilt beperken, moet u de uitzondering van de vertrouwde Microsoft first party inschakelen om uw IoT-hub toegang te geven tot het opslagaccount. Navigeer op de resourcepagina van uw opslagaccount naar het tabblad Firewalls en virtuele netwerken en schakel de optie Toegang vanuit geselecteerde netwerken toestaan in. Schakel onder de lijst Uitzonderingen het selectievakje vertrouwde Microsoft-services toegang tot dit opslagaccount in. Klik op de knop Opslaan. Meer informatie over ioT Hub-ondersteuning voor virtuele netwerken.

    Notitie

    U moet bovenstaande stappen uitvoeren om de beheerde identiteit de juiste toegang toe te wijzen voordat u het opslagaccount opslaat in IoT Hub voor het uploaden van bestanden met behulp van de beheerde identiteit. Wacht enkele minuten totdat de roltoewijzing is doorgegeven.

  9. Navigeer op de resourcepagina van uw IoT Hub naar het tabblad Bestand uploaden .

  10. Selecteer op de pagina die wordt weergegeven de container die u wilt gebruiken in uw blobopslag, configureer de instellingen voor bestandsmeldingen, SAS TTL, standaard-TTL en maximum aantal leveringen naar wens. Kies het gewenste verificatietype en klik op Opslaan. Als er tijdens deze stap een fout optreedt, stelt u tijdelijk uw opslagaccount in om toegang vanuit alle netwerken toe te staan. Probeer het vervolgens opnieuw. U kunt de firewall voor het opslagaccount configureren zodra de configuratie voor het uploaden van bestanden is voltooid.

    Screen shot that shows file upload with msi.

    Notitie

    In het scenario voor het uploaden van bestanden moeten zowel hub als uw apparaat verbinding maken met uw opslagaccount. De bovenstaande stappen zijn bedoeld voor het verbinden van uw IoT-hub met uw opslagaccount met het gewenste verificatietype. U moet uw apparaat nog steeds verbinden met opslag met behulp van de SAS-URI. Vandaag wordt de SAS-URI gegenereerd met behulp van verbindingsreeks. We voegen binnenkort ondersteuning toe voor het genereren van SAS-URI met beheerde identiteit. Volg de stappen in het uploaden van bestanden.

Bulksgewijs importeren/exporteren van apparaten configureren met beheerde identiteiten

IoT Hub ondersteunt de functionaliteit voor het bulksgewijs importeren/exporteren van gegevens van/naar een door de klant geleverde opslagblob. Voor deze functionaliteit is connectiviteit van IoT Hub met het opslagaccount vereist.

  1. Ga in Azure Portal naar uw opslagaccount.

  2. Klik op Toegangsbeheer (IAM) .

  3. Selecteer Roltoewijzing toevoegen.>

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

  4. Selecteer op het tabblad Rol de optie Inzender voor opslagblobgegevens. (Selecteer nietInzender of inzender voor opslagaccounts.)

  5. Selecteer beheerde identiteit op het tabblad Leden en selecteer vervolgens Leden selecteren.

  6. Voor door de gebruiker toegewezen beheerde identiteiten selecteert u uw abonnement, selecteert u door de gebruiker toegewezen beheerde identiteit en selecteert u vervolgens uw door de gebruiker toegewezen beheerde identiteit.

  7. Selecteer uw abonnement voor door het systeem toegewezen beheerde identiteiten, selecteer alle door het systeem toegewezen beheerde identiteiten en selecteer vervolgens de resourcenaam van uw IoT Hub.

  8. Selecteer op het tabblad Beoordelen en toewijzen de optie Beoordelen en toewijzen om de rol toe te wijzen.

    Zie Azure-rollen toewijzen met behulp van Azure Portal voor meer informatie over roltoewijzingen

REST API of SDK gebruiken voor import- en exporttaken

U kunt nu de Azure IoT REST API's gebruiken voor het maken van import- en exporttaken. U moet de volgende eigenschappen opgeven in de aanvraagbody:

  • storageAuthenticationType: stel de waarde in op identityBased.
  • inputBlobContainerUri: stel deze eigenschap alleen in de importtaak in.
  • outputBlobContainerUri: stel deze eigenschap in voor zowel de import- als exporttaken.
  • identiteit: Stel de waarde in op de beheerde identiteit die moet worden gebruikt.

Azure IoT Hub SDK's ondersteunen deze functionaliteit ook in registerbeheer van de serviceclient. In het volgende codefragment ziet u hoe u een importtaak of exporttaak initieert met behulp van de C#SDK.

C#-codefragment

    // 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
        });

Python-codefragment

# 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>"
    ) 
))

Notitie

  • Als storageAuthenticationType is ingesteld op identityBased en de eigenschap userAssignedIdentity niet null is, gebruiken de taken de opgegeven door de gebruiker toegewezen beheerde identiteit.
  • Als de IoT-hub niet is geconfigureerd met de door de gebruiker toegewezen beheerde identiteit die is opgegeven in userAssignedIdentity, mislukt de taak.
  • Als storageAuthenticationType is ingesteld op identityBased , is de eigenschap userAssignedIdentity null, dan gebruiken de taken een door het systeem toegewezen identiteit.
  • Als de IoT-hub niet is geconfigureerd met de door de gebruiker toegewezen beheerde identiteit, mislukt de taak.
  • Als storageAuthenticationType is ingesteld op identityBased en geen door de gebruiker toegewezen of door het systeem toegewezen beheerde identiteiten zijn geconfigureerd op de hub, mislukt de taak.

SDK-voorbeelden

Volgende stappen

Gebruik de onderstaande koppelingen voor meer informatie over IoT Hub-functies: