IoT Hub-stöd för hanterade identiteter

Hanterade identiteter tillhandahåller Azure-tjänster med en automatiskt hanterad identitet i Microsoft Entra-ID på ett säkert sätt. Detta eliminerar behovet för utvecklare att hantera autentiseringsuppgifter genom att tillhandahålla en identitet. Det finns två typer av hanterade identiteter: systemtilldelade och användartilldelade. IoT Hub kan användas med båda.

I IoT Hub kan hanterade identiteter användas för utgående anslutning från IoT Hub till andra Azure-tjänster för funktioner som meddelanderoutning, filuppladdning och massimport/export av enheter. I den här artikeln får du lära dig hur du använder systemtilldelade och användartilldelade hanterade identiteter i din IoT-hubb för olika funktioner.

Förutsättningar

Systemtilldelad hanterad identitet

Aktivera eller inaktivera systemtilldelad hanterad identitet i Azure-portalen

  1. Logga in på Azure-portalen och gå till din IoT-hubb.

  2. Välj Identitet i avsnittet Säkerhetsinställningar i navigeringsmenyn.

  3. Välj fliken Systemtilldelad .

  4. Ange den systemtilldelade hanterade identitetsstatusen till eller Av och välj sedan Spara.

    Kommentar

    Du kan inte inaktivera systemtilldelad hanterad identitet när den används. Kontrollera att inga anpassade slutpunkter använder systemtilldelad hanterad identitetsautentisering innan du inaktiverar funktionen.

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

Aktivera systemtilldelad hanterad identitet när hubben skapas med hjälp av ARM-mall

Om du vill aktivera den systemtilldelade hanterade identiteten i din IoT-hubb vid resursetableringstillfället använder du mallen Azure Resource Manager (ARM) nedan.

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

När du har ersatt värdena för resursen name, locationSKU.name och SKU.tier, kan du använda Azure CLI för att distribuera resursen i en befintlig resursgrupp med hjälp av:

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>

När resursen har skapats kan du hämta den systemtilldelade som tilldelats din hubb med hjälp av Azure CLI:

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

Användartilldelad hanterad identitet

I det här avsnittet får du lära dig hur du lägger till och tar bort en användartilldelad hanterad identitet från en IoT-hubb med hjälp av Azure-portalen.

  1. Först måste du skapa en användartilldelad hanterad identitet som en fristående resurs. För att göra det kan du följa anvisningarna i Skapa en användartilldelad hanterad identitet.

  2. Gå till din IoT-hubb och gå till identiteten i IoT Hub-portalen.

  3. Under fliken Användartilldelad klickar du på Associera en användartilldelad hanterad identitet. Välj den användartilldelade hanterade identitet som du vill lägga till i hubben och klicka sedan på Välj.

  4. Du kan ta bort en användartilldelad identitet från en IoT-hubb. Välj den användartilldelade identitet som du vill ta bort och klicka på knappen Ta bort . Observera att du bara tar bort den från IoT Hub, och den här borttagningen tar inte bort den användartilldelade identiteten som en resurs. Om du vill ta bort den användartilldelade identiteten som en resurs följer du anvisningarna i Ta bort en användartilldelad hanterad identitet.

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

Aktivera användartilldelad hanterad identitet när hubben skapas med hjälp av ARM-mall

Följande exempelmall kan användas för att skapa en hubb med användartilldelad hanterad identitet. Den här mallen skapar en användartilldelad identitet med namnet [iothub-name-provided]-identity och tilldelas till den skapade IoT-hubben. Du kan ändra mallen för att lägga till flera användartilldelade identiteter efter behov.

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

När resursen har skapats kan du hämta den användartilldelade hanterade identiteten i din hubb med hjälp av Azure CLI:

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

Utgående anslutning från IoT Hub till andra Azure-resurser

Hanterade identiteter kan användas för utgående anslutning från IoT Hub till andra Azure-tjänster för meddelanderoutning, filuppladdning och massimport/export av enheter. Du kan välja vilken hanterad identitet som ska användas för varje IoT Hub-utgående anslutning till kundägda slutpunkter, inklusive lagringskonton, händelsehubbar och Service Bus-slutpunkter.

Kommentar

Endast systemtilldelad hanterad identitet ger IoT Hub åtkomst till privata resurser. Om du vill använda användartilldelad hanterad identitet måste den offentliga åtkomsten för dessa privata resurser aktiveras för att tillåta anslutning.

Konfigurera meddelanderoutning med hanterade identiteter

I det här avsnittet använder vi meddelandedirigering till en anpassad händelsehubbslutpunkt som exempel. Exemplet gäller även för andra anpassade routningsslutpunkter.

  1. Gå till din händelsehubb i Azure-portalen för att tilldela den hanterade identiteten rätt åtkomst.

  2. Välj Åtkomstkontroll (IAM) .

  3. Välj Lägg till lägg till > rolltilldelning.

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

  4. På fliken Roll väljer du Azure Event Hubs Data Sender.

    Kommentar

    För ett lagringskonto väljer du Storage Blob Data Contributor (inte Deltagare eller Lagringskontodeltagare) som roll. För en servicebuss väljer du Azure Service Bus Data Sender.

    Screenshot showing Add role assignment page with Role tab selected.

  5. På fliken Medlemmar väljer du Hanterad identitet och väljer sedan Välj medlemmar.

  6. För användartilldelade hanterade identiteter väljer du din prenumeration, väljer Användartilldelad hanterad identitet och väljer sedan din användartilldelade hanterade identitet.

  7. För systemtilldelade hanterade identiteter väljer du din prenumeration, väljer Alla systemtilldelade hanterade identiteter och väljer sedan resursnamnet för din IoT Hub.

  8. På fliken Granska + tilldela väljer du Granska + tilldela för att tilldela rollen.

    Mer information om rolltilldelningar finns i Tilldela Azure-roller med hjälp av Azure-portalen

  9. Om du behöver begränsa anslutningen till din anpassade slutpunkt via ett virtuellt nätverk måste du aktivera det betrodda microsoft-undantaget från första part för att ge din IoT Hub-åtkomst till den specifika slutpunkten. Om du till exempel lägger till en anpassad slutpunkt för händelsehubben går du till fliken Brandväggar och virtuella nätverk i händelsehubben och aktiverar alternativet Tillåt åtkomst från valda nätverk . I listan Undantag markerar du kryssrutan Tillåt betrodda Microsoft-tjänster att komma åt händelsehubbar. Klicka på knappen Spara. Detta gäller även för lagringskonto och Service Bus. Läs mer om IoT Hub-stöd för virtuella nätverk.

    Kommentar

    Du måste slutföra stegen ovan för att tilldela den hanterade identiteten rätt åtkomst innan du lägger till händelsehubben som en anpassad slutpunkt i IoT Hub. Vänta några minuter tills rolltilldelningen har spridits.

  10. Gå sedan till din IoT-hubb. I hubben navigerar du till Meddelanderoutning och väljer sedan Lägg till.

  11. På fliken Slutpunkt skapar du en slutpunkt för händelsehubben genom att ange följande information:

    Parameter Värde
    Slutpunktstyp Välj Event Hubs.
    Slutpunktsnamn Ange ett unikt namn för en ny slutpunkt eller välj Välj befintlig för att välja en befintlig Event Hubs-slutpunkt.
    Event Hubs-namnrymd Använd den nedrullningsbara menyn för att välja ett befintligt Event Hubs-namnområde i din prenumeration.
    Händelsehubbinstans Använd den nedrullningsbara menyn för att välja en befintlig händelsehubb i ditt namnområde.
    Autentiseringstyp Välj Användartilldelad och använd sedan den nedrullningsbara menyn för att välja den användartilldelade identitet som du skapade i händelsehubben.

    Screenshot that shows event hub endpoint with user assigned authentication.

  12. Välj Skapa + nästa. Du kan fortsätta genom guiden för att skapa en väg som pekar på den här slutpunkten, eller så kan du stänga guiden.

Du kan ändra autentiseringstypen för en befintlig anpassad slutpunkt. Använd följande steg för att ändra en slutpunkt:

  1. I din IoT-hubb väljer du Meddelanderoutning i det vänstra navigeringsfönstret och sedan Anpassade slutpunkter.

  2. Markera kryssrutan för den anpassade slutpunkt som du vill ändra och välj sedan Ändra autentiseringstyp.

  3. Välj den nya autentiseringstypen för den här slutpunkten och välj sedan Spara.

Konfigurera filuppladdning med hanterade identiteter

Med IoT Hubs filuppladdningsfunktion kan enheter ladda upp filer till ett kundägt lagringskonto. För att filuppladdningen ska fungera måste IoT Hub ha anslutning till lagringskontot. På samma sätt som för meddelanderoutning kan du välja önskad autentiseringstyp och hanterad identitet för utgående IoT Hub-anslutning till ditt Azure Storage-konto.

  1. Navigera till ditt lagringskonto på Azure-portalen.

  2. Välj Åtkomstkontroll (IAM) .

  3. Välj Lägg till lägg till > rolltilldelning.

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

  4. På fliken Roll väljer du Lagringsblobdatadeltagare. (Välj inteDeltagare eller lagringskontodeltagare.)

  5. På fliken Medlemmar väljer du Hanterad identitet och väljer sedan Välj medlemmar.

  6. För användartilldelade hanterade identiteter väljer du din prenumeration, väljer Användartilldelad hanterad identitet och väljer sedan din användartilldelade hanterade identitet.

  7. För systemtilldelade hanterade identiteter väljer du din prenumeration, väljer Alla systemtilldelade hanterade identiteter och väljer sedan resursnamnet för din IoT Hub.

  8. På fliken Granska + tilldela väljer du Granska + tilldela för att tilldela rollen.

    Mer information om rolltilldelningar finns i Tilldela Azure-roller med hjälp av Azure-portalen

    Om du behöver begränsa anslutningen till ditt lagringskonto via ett virtuellt nätverk måste du aktivera det betrodda microsoft-undantaget från första part för att ge din IoT-hubb åtkomst till lagringskontot. På resurssidan för lagringskontot går du till fliken Brandväggar och virtuella nätverk och aktiverar alternativet Tillåt åtkomst från valda nätverk . I listan Undantag markerar du kryssrutan Tillåt betrodda Microsoft-tjänster att komma åt det här lagringskontot. Klicka på knappen Spara. Läs mer om IoT Hub-stöd för virtuella nätverk.

    Kommentar

    Du måste slutföra stegen ovan för att tilldela den hanterade identiteten rätt åtkomst innan du sparar lagringskontot i IoT Hub för filuppladdning med hjälp av den hanterade identiteten. Vänta några minuter tills rolltilldelningen har spridits.

  9. Gå till fliken Filuppladdning på IoT-hubbens resurssida.

  10. På sidan som visas väljer du den container som du tänker använda i bloblagringen , konfigurerar inställningarna för filmeddelanden, SAS TTL, standard-TTL och Maximalt antal leveranser efter behov. Välj önskad autentiseringstyp och klicka på Spara. Om du får ett fel i det här steget ställer du tillfälligt in lagringskontot för att tillåta åtkomst från Alla nätverk och försöker sedan igen. Du kan konfigurera brandväggen på lagringskontot när filuppladdningskonfigurationen är klar.

    Screen shot that shows file upload with msi.

    Kommentar

    I scenariot för filuppladdning måste både hubben och enheten ansluta till ditt lagringskonto. Stegen ovan gäller för att ansluta din IoT-hubb till ditt lagringskonto med önskad autentiseringstyp. Du måste fortfarande ansluta enheten till lagringen med hjälp av SAS-URI:n. Idag genereras SAS-URI:n med hjälp av anslutningssträng. Vi lägger till stöd för att generera SAS-URI med hanterad identitet snart. Följ stegen i filuppladdningen.

Konfigurera massimport/export av enheter med hanterade identiteter

IoT Hub stöder funktioner för att importera/exportera enheters information i bulk från/till en lagringsblob som tillhandahålls av kunden. Den här funktionen kräver anslutning från IoT Hub till lagringskontot.

  1. Navigera till ditt lagringskonto på Azure-portalen.

  2. Välj Åtkomstkontroll (IAM) .

  3. Välj Lägg till lägg till > rolltilldelning.

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

  4. På fliken Roll väljer du Lagringsblobdatadeltagare. (Välj inteDeltagare eller lagringskontodeltagare.)

  5. På fliken Medlemmar väljer du Hanterad identitet och väljer sedan Välj medlemmar.

  6. För användartilldelade hanterade identiteter väljer du din prenumeration, väljer Användartilldelad hanterad identitet och väljer sedan din användartilldelade hanterade identitet.

  7. För systemtilldelade hanterade identiteter väljer du din prenumeration, väljer Alla systemtilldelade hanterade identiteter och väljer sedan resursnamnet för din IoT Hub.

  8. På fliken Granska + tilldela väljer du Granska + tilldela för att tilldela rollen.

    Mer information om rolltilldelningar finns i Tilldela Azure-roller med hjälp av Azure-portalen

Använda REST API eller SDK för import- och exportjobb

Nu kan du använda Azure IoT REST API:er för att skapa import- och exportjobb. Du måste ange följande egenskaper i begärandetexten:

  • storageAuthenticationType: Ange värdet till identityBased.
  • inputBlobContainerUri: Ange endast den här egenskapen i importjobbet.
  • outputBlobContainerUri: Ange den här egenskapen för både import- och exportjobben.
  • identitet: Ange värdet till den hanterade identitet som ska användas.

Azure IoT Hub SDK:er stöder även den här funktionen i tjänstklientens registerhanterare. Följande kodfragment visar hur du initierar ett importjobb eller exporterar jobb med hjälp av C# SDK.

C#-kodfragment

    // 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-kodfragment

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

Kommentar

  • Om storageAuthenticationType är inställt på egenskapen identityBased och userAssignedIdentity inte är null använder jobben den angivna användartilldelade hanterade identiteten.
  • Om IoT-hubben inte har konfigurerats med den användartilldelade hanterade identiteten som anges i userAssignedIdentity misslyckas jobbet.
  • Om storageAuthenticationType är inställt på identityBased är egenskapen userAssignedIdentity null, kommer jobben att använda systemtilldelad identitet.
  • Om IoT-hubben inte har konfigurerats med den användartilldelade hanterade identiteten, misslyckas jobbet.
  • Om storageAuthenticationType är inställt på identityBased och varken användartilldelade eller systemtilldelade hanterade identiteter har konfigurerats på hubben misslyckas jobbet.

SDK-exempel

Nästa steg

Använd länkarna nedan om du vill veta mer om IoT Hub-funktioner: