Yönetilen kimlikler için IoT Hub desteği

Yönetilen kimlikler, Azure hizmetlerine Microsoft Entra Id'de güvenli bir şekilde otomatik olarak yönetilen bir kimlik sağlar. Bu, geliştiricilerin kimlik sağlayarak kimlik bilgilerini yönetme gereğini ortadan kaldırır. İki tür yönetilen kimlik vardır: sistem tarafından atanan ve kullanıcı tarafından atanan. IoT Hub ikisini de destekler.

IoT Hub'da yönetilen kimlikler, ileti yönlendirme, dosya yükleme ve toplu cihaz içeri/dışarı aktarma gibi özellikler için IoT Hub'dan diğer Azure hizmetlerine çıkış bağlantısı için kullanılabilir. Bu makalede, farklı işlevler için IoT hub'ınızda sistem tarafından atanan ve kullanıcı tarafından atanan yönetilen kimlikleri kullanmayı öğreneceksiniz.

Ön koşullar

Sistem tarafından atanan yönetilen kimlik

Azure portalında sistem tarafından atanan yönetilen kimliği etkinleştirme veya devre dışı bırakma

  1. Azure portalında oturum açın ve IoT hub'ınıza gidin.

  2. Gezinti menüsünün Güvenlik ayarları bölümünden Kimlik'i seçin.

  3. Sistem tarafından atanan sekmesini seçin.

  4. Sistem tarafından atanan yönetilen kimlik Durumu'nu Açık veya Kapalı olarak ayarlayın ve Kaydet'i seçin.

    Dekont

    Sistem tarafından atanan yönetilen kimliği kullanımdayken kapatamazsınız. Özelliği devre dışı bırakmadan önce hiçbir özel uç noktanın sistem tarafından atanan yönetilen kimlik kimlik doğrulamasını kullanmadığından emin olun.

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

ARM şablonunu kullanarak hub oluşturma zamanında sistem tarafından atanan yönetilen kimliği etkinleştirme

IoT hub'ınızda sistem tarafından atanan yönetilen kimliği kaynak sağlama zamanında etkinleştirmek için aşağıdaki Azure Resource Manager (ARM) şablonunu kullanın.

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

, locationSKU.name ve SKU.tierkaynaklarınızın namedeğerlerini değiştirdikten sonra, azure CLI kullanarak kaynağı mevcut bir kaynak grubuna dağıtabilirsiniz:

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>

Kaynak oluşturulduktan sonra Azure CLI kullanarak hub'ınıza atanan sistem tarafından atananları alabilirsiniz:

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

Kullanıcı tarafından atanan yönetilen kimlik

Bu bölümde, Azure portalını kullanarak ioT hub'ına kullanıcı tarafından atanan yönetilen kimliği eklemeyi ve kaldırmayı öğreneceksiniz.

  1. İlk olarak tek başına kaynak olarak kullanıcı tarafından atanan bir yönetilen kimlik oluşturmanız gerekir. Bunu yapmak için Kullanıcı tarafından atanan yönetilen kimlik oluşturma başlığındaki yönergeleri izleyebilirsiniz.

  2. IoT hub'ınıza gidin, IoT Hub portalında Kimlik'e gidin.

  3. Kullanıcı Tarafından Atanan sekmesinde Kullanıcı tarafından atanan yönetilen kimliği ilişkilendir'e tıklayın. Hub'ınıza eklemek istediğiniz kullanıcı tarafından atanan yönetilen kimliği seçin ve seç'e tıklayın.

  4. IoT hub'ından kullanıcı tarafından atanan bir kimliği kaldırabilirsiniz. Kaldırmak istediğiniz kullanıcı tarafından atanan kimliği seçin ve Kaldır düğmesine tıklayın. Bunu yalnızca IoT hub'ından kaldırdığınıza ve bu kaldırma işleminin kaynak olarak kullanıcı tarafından atanan kimliği silmediğini unutmayın. Kullanıcı tarafından atanan kimliği kaynak olarak silmek için Kullanıcı tarafından atanan yönetilen kimliği silme başlığındaki yönergeleri izleyin.

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

ARM şablonunu kullanarak kullanıcı tarafından atanan yönetilen kimliği hub oluşturma zamanında etkinleştirme

Aşağıdaki örnek şablon, kullanıcı tarafından atanan yönetilen kimliğe sahip bir hub oluşturmak için kullanılabilir. Bu şablon[iothub-name-provided]-identity adlı ve oluşturulan IoT hub'ına atanmış bir kullanıcı tarafından atanan kimlik oluşturur. Şablonu, gerektiğinde kullanıcı tarafından atanan birden çok kimlik eklemek için değiştirebilirsiniz.

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

Kaynak oluşturulduktan sonra Azure CLI kullanarak hub'ınızda kullanıcı tarafından atanan yönetilen kimliği alabilirsiniz:

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

IoT Hub'dan diğer Azure kaynaklarına çıkış bağlantısı

Yönetilen kimlikler, ioT Hub'dan ileti yönlendirme, dosya yükleme ve toplu cihaz içeri/dışarı aktarma için diğer Azure hizmetlerine çıkış bağlantısı için kullanılabilir. Depolama hesapları, olay hub'ları ve hizmet veri yolu uç noktaları dahil olmak üzere müşteriye ait uç noktalara her IoT Hub çıkış bağlantısı için hangi yönetilen kimliğin kullanılacağını seçebilirsiniz.

Dekont

Yalnızca sistem tarafından atanan yönetilen kimlik IoT Hub'ın özel kaynaklara erişmesine izin verir. Kullanıcı tarafından atanan yönetilen kimliği kullanmak istiyorsanız, bağlantıya izin vermek için bu özel kaynaklardaki genel erişimin etkinleştirilmesi gerekir.

Yönetilen kimliklerle ileti yönlendirmeyi yapılandırma

Bu bölümde, örnek olarak bir Event Hubs özel uç noktasına ileti yönlendirmeyi kullanacağız. Örnek, diğer yönlendirme özel uç noktaları için de geçerlidir.

  1. Yönetilen kimliğe doğru erişimi atamak için Azure portalında olay hub'ınıza gidin.

  2. Erişim denetimi (IAM) öğesini seçin.

  3. Rol ataması ekle'yi > seçin.

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

  4. Rol sekmesinde Azure Event Hubs Veri Göndereni'ni seçin.

    Dekont

    Depolama hesabı için rol olarak blob veri katkıda bulunanını (Katkıda Bulunan veya Depolama Hesap Katkıda Bulunanı değil) Depolama seçin. Bir hizmet veri yolu için Azure Service Bus Veri Göndereni'ne tıklayın.

    Screenshot showing Add role assignment page with Role tab selected.

  5. Üyeler sekmesinde Yönetilen kimlik'i ve ardından Üye seç'i seçin.

  6. Kullanıcı tarafından atanan yönetilen kimlikler için aboneliğinizi seçin, Kullanıcı tarafından atanan yönetilen kimlik'i ve ardından kullanıcı tarafından atanan yönetilen kimliğinizi seçin.

  7. Sistem tarafından atanan yönetilen kimlikler için aboneliğinizi seçin, Tüm sistem tarafından atanan yönetilen kimlikler'i ve ardından IoT Hub'ınızın kaynak adını seçin.

  8. Gözden geçirme + atama sekmesinde Gözden geçir + ata’yı seçerek rolü atayın.

    Rol atamaları hakkında daha fazla bilgi için bkz . Azure portalını kullanarak Azure rolleri atama

  9. Sanal ağ üzerinden özel uç noktanıza bağlantıyı kısıtlamanız gerekiyorsa, IoT hub'ınıza belirli bir uç noktaya erişim vermek için güvenilen Microsoft birinci taraf özel durumunu açmanız gerekir. Örneğin, bir olay hub'ı özel uç noktası ekliyorsanız olay hub'ınızdaki Güvenlik duvarları ve sanal ağlar sekmesine gidin ve Seçili ağlardan erişime izin ver seçeneğini etkinleştirin. Özel Durumlar listesinin altında Güvenilen Microsoft hizmetleri olay hub'larına erişmesine izin ver kutusunu işaretleyin. Kaydet düğmesine tıklayın. Bu, depolama hesabı ve hizmet veri yolu için de geçerlidir. Sanal ağlar için IoT Hub desteği hakkında daha fazla bilgi edinin.

    Dekont

    Olay hub'ını IoT Hub'a özel uç nokta olarak eklemeden önce yönetilen kimliğe doğru erişimi atamak için yukarıdaki adımları tamamlamanız gerekir. Rol atamasının yayılması için lütfen birkaç dakika bekleyin.

  10. Ardından IoT hub'ınıza gidin. Hub'ınızda İleti Yönlendirme'ye gidin ve Ekle'yi seçin.

  11. Uç Nokta sekmesinde, aşağıdaki bilgileri sağlayarak olay hub'ınız için bir uç nokta oluşturun:

    Parametre Değer
    Uç nokta türü Event Hubs'ı seçin.
    Uç nokta adı Yeni uç nokta için benzersiz bir ad sağlayın veya mevcut bir Event Hubs uç noktasını seçmek için Var olanı seç'i seçin.
    Event Hubs ad alanı Aboneliğinizde mevcut bir Event Hubs ad alanını seçmek için açılan menüyü kullanın.
    Olay hub'ı örneği Ad alanınızda var olan bir olay hub'ını seçmek için açılan menüyü kullanın.
    Kimlik doğrulaması türü Kullanıcı tarafından atanan'ı seçin, ardından açılan menüyü kullanarak olay hub'ınızda oluşturduğunuz Kullanıcı tarafından atanan kimliği seçin.

    Screenshot that shows event hub endpoint with user assigned authentication.

  12. Oluştur + İleri'yi seçin. Bu uç noktaya işaret eden bir yol oluşturmak için sihirbaz aracılığıyla devam edebilir veya sihirbazı kapatabilirsiniz.

Mevcut bir özel uç noktanın kimlik doğrulama türünü değiştirebilirsiniz. Bir uç noktayı değiştirmek için aşağıdaki adımları kullanın:

  1. IoT hub'ınızda sol gezinti bölmesinde İleti yönlendirme'yi ve ardından Özel uç noktalar'ı seçin.

  2. Değiştirmek istediğiniz özel uç noktanın onay kutusunu seçin ve ardından Kimlik doğrulama türünü değiştir'i seçin.

  3. Bu uç nokta için yeni kimlik doğrulama türünü ve ardından Kaydet'i seçin.

Yönetilen kimliklerle dosya yüklemeyi yapılandırma

IoT Hub'ın dosya yükleme özelliği, cihazların dosyaları müşteriye ait bir depolama hesabına yüklemesine olanak tanır. Dosya yüklemesinin çalışmasına izin vermek için IoT Hub'ın depolama hesabıyla bağlantısı olmalıdır. İleti yönlendirmeye benzer şekilde, Azure Depolama hesabınıza IoT Hub çıkış bağlantısı için tercih edilen kimlik doğrulama türünü ve yönetilen kimliği seçebilirsiniz.

  1. Azure portalda depolama hesabınıza gidin.

  2. Erişim denetimi (IAM) öğesini seçin.

  3. Rol ataması ekle'yi > seçin.

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

  4. Rol sekmesinde Blob Veri Katkıda Bulunanı'nı Depolama seçin. (Seçme Katkıda Bulunan veya Depolama Hesap Katkıda Bulunanı.)

  5. Üyeler sekmesinde Yönetilen kimlik'i ve ardından Üye seç'i seçin.

  6. Kullanıcı tarafından atanan yönetilen kimlikler için aboneliğinizi seçin, Kullanıcı tarafından atanan yönetilen kimlik'i ve ardından kullanıcı tarafından atanan yönetilen kimliğinizi seçin.

  7. Sistem tarafından atanan yönetilen kimlikler için aboneliğinizi seçin, Tüm sistem tarafından atanan yönetilen kimlikler'i ve ardından IoT Hub'ınızın kaynak adını seçin.

  8. Gözden geçirme + atama sekmesinde Gözden geçir + ata’yı seçerek rolü atayın.

    Rol atamaları hakkında daha fazla bilgi için bkz . Azure portalını kullanarak Azure rolleri atama

    Depolama hesabınızla bağlantıyı bir sanal ağ üzerinden kısıtlamanız gerekiyorsa, IoT hub'ınıza depolama hesabına erişim vermek için güvenilir Microsoft birinci taraf özel durumunu açmanız gerekir. Depolama hesabı kaynak sayfanızda Güvenlik duvarları ve sanal ağlar sekmesine gidin ve Seçili ağlardan erişime izin ver seçeneğini etkinleştirin. Özel Durumlar listesinin altında Güvenilen Microsoft hizmetleri bu depolama hesabına erişmesine izin ver kutusunu işaretleyin. Kaydet düğmesine tıklayın. Sanal ağlar için IoT Hub desteği hakkında daha fazla bilgi edinin.

    Dekont

    Yönetilen kimliği kullanarak dosya yükleme için IoT Hub'a depolama hesabını kaydetmeden önce yönetilen kimliğe doğru erişimi atamak için yukarıdaki adımları tamamlamanız gerekir. Rol atamasının yayılması için lütfen birkaç dakika bekleyin.

  9. IoT hub'ınızın kaynak sayfasında Dosya yükleme sekmesine gidin.

  10. Görüntülenen sayfada blob depolama alanınızda kullanmayı planladığınız kapsayıcıyı seçin, Dosya bildirim ayarlarını, SAS TTL' yi, Varsayılan TTL'yi ve Maksimum teslim sayısını istediğiniz şekilde yapılandırın. Tercih edilen kimlik doğrulama türünü seçin ve Kaydet'e tıklayın. Bu adımda hata alırsanız depolama hesabınızı geçici olarak Tüm ağlardan erişime izin verecek şekilde ayarlayın ve yeniden deneyin. Dosya yükleme yapılandırması tamamlandıktan sonra depolama hesabında güvenlik duvarını yapılandırabilirsiniz.

    Screen shot that shows file upload with msi.

    Dekont

    Dosya yükleme senaryosunda hem hub'ın hem de cihazınızın depolama hesabınıza bağlanması gerekir. Yukarıdaki adımlar, IoT hub'ınızı istenen kimlik doğrulama türüyle depolama hesabınıza bağlamak içindir. Yine de SAS URI'sini kullanarak cihazınızı depolamaya bağlamanız gerekir. Bugün SAS URI'sı bağlantı dizesi kullanılarak oluşturulur. Yakında yönetilen kimlikle SAS URI'sini oluşturmak için destek ekleyeceğiz. Lütfen dosya yükleme adımlarını izleyin.

Yönetilen kimliklerle toplu cihaz içeri/dışarı aktarmayı yapılandırma

IoT Hub, cihazların bilgilerini müşteri tarafından sağlanan bir depolama blobundan/bloba toplu olarak içeri/dışarı aktarma işlevini destekler. Bu işlev, IoT Hub'dan depolama hesabına bağlantı gerektirir.

  1. Azure portalda depolama hesabınıza gidin.

  2. Erişim denetimi (IAM) öğesini seçin.

  3. Rol ataması ekle'yi > seçin.

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

  4. Rol sekmesinde Blob Veri Katkıda Bulunanı'nı Depolama seçin. (Seçme Katkıda Bulunan veya Depolama Hesap Katkıda Bulunanı.)

  5. Üyeler sekmesinde Yönetilen kimlik'i ve ardından Üye seç'i seçin.

  6. Kullanıcı tarafından atanan yönetilen kimlikler için aboneliğinizi seçin, Kullanıcı tarafından atanan yönetilen kimlik'i ve ardından kullanıcı tarafından atanan yönetilen kimliğinizi seçin.

  7. Sistem tarafından atanan yönetilen kimlikler için aboneliğinizi seçin, Tüm sistem tarafından atanan yönetilen kimlikler'i ve ardından IoT Hub'ınızın kaynak adını seçin.

  8. Gözden geçirme + atama sekmesinde Gözden geçir + ata’yı seçerek rolü atayın.

    Rol atamaları hakkında daha fazla bilgi için bkz . Azure portalını kullanarak Azure rolleri atama

İçeri ve dışarı aktarma işleri için REST API veya SDK kullanma

Artık içeri ve dışarı aktarma işleri oluşturmak için Azure IoT REST API'lerini kullanabilirsiniz. İstek gövdesinde aşağıdaki özellikleri sağlamanız gerekir:

  • storageAuthenticationType: değerini identityBased olarak ayarlayın.
  • inputBlobContainerUri: Bu özelliği yalnızca içeri aktarma işinde ayarlayın.
  • outputBlobContainerUri: Bu özelliği hem içeri hem de dışarı aktarma işleri için ayarlayın.
  • identity: Değeri kullanılacak yönetilen kimliğe ayarlayın.

Azure IoT Hub SDK'ları, hizmet istemcisinin kayıt defteri yöneticisinde de bu işlevselliği destekler. Aşağıdaki kod parçacığında, C# SDK'sını kullanarak içinde içeri veya dışarı aktarma işinin nasıl başlatıldığı gösterilmektedir.

C# kod parçacığı

    // 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 kod parçacığı

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

Dekont

  • storageAuthenticationType identityBased olarak ayarlandıysa ve userAssignedIdentity özelliği null değilse, işler belirtilen kullanıcı tarafından atanan yönetilen kimliği kullanır.
  • IoT hub'ı userAssignedIdentity içinde belirtilen kullanıcı tarafından atanan yönetilen kimlikle yapılandırılmamışsa, iş başarısız olur.
  • storageAuthenticationType identityBaseduserAssignedIdentity özelliği null olarak ayarlandıysa, işler sistem tarafından atanan kimliği kullanır.
  • IoT hub'ı kullanıcı tarafından atanan yönetilen kimlikle yapılandırılmadıysa, iş başarısız olur.
  • storageAuthenticationType identityBased olarak ayarlanırsa ve hub'da kullanıcı tarafından atanan veya sistem tarafından atanan yönetilen kimlikler yapılandırılmazsa, iş başarısız olur.

SDK örnekleri

Sonraki adımlar

IoT Hub özellikleri hakkında daha fazla bilgi edinmek için aşağıdaki bağlantıları kullanın: