Dukungan Azure IoT Hub untuk identitas terkelola

Identitas terkelola menyediakan layanan Azure dengan identitas yang dikelola secara otomatis di ID Microsoft Entra dengan cara yang aman. Ini menghilangkan kebutuhan bagi pengembang harus mengelola informasi masuk dengan memberikan identitas. Ada dua jenis identitas terkelola, yaitu identitas yang ditetapkan sistem dan identitas yang ditetapkan pengguna. IoT Hub mendukung keduanya.

Di IoT Hub, identitas terkelola dapat digunakan untuk konektivitas keluar dari IoT Hub ke layanan Azure lainnya untuk fitur seperti perutean pesan, unggahan file, dan impor/ekspor perangkat massal. Dalam artikel ini, Anda mempelajari cara menggunakan identitas terkelola yang ditetapkan sistem dan ditetapkan pengguna di hub IoT Anda untuk berbagai fungsionalitas.

Prasyarat

Identitas terkelola yang ditetapkan sistem

Mengaktifkan atau menonaktifkan identitas terkelola yang ditetapkan sistem di portal Azure

  1. Masuk ke portal Azure dan navigasikan ke IoT hub Anda.

  2. Pilih Identitas dari bagian Pengaturan keamanan pada menu navigasi.

  3. Pilih tab Sistem yang ditetapkan.

  4. Atur Status identitas terkelola yang ditetapkan sistem ke Aktif atau Nonaktif, lalu pilih Simpan.

    Catatan

    Anda tidak dapat menonaktifkan identitas terkelola yang ditetapkan sistem saat sedang digunakan. Pastikan bahwa tidak ada titik akhir kustom yang menggunakan autentikasi identitas terkelola yang ditetapkan sistem sebelum menonaktifkan fitur tersebut.

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

Aktifkan identitas terkelola yang ditetapkan sistem pada waktu pembuatan hub menggunakan template ARM

Untuk mengaktifkan identitas terkelola yang ditetapkan sistem di hub IoT Anda pada waktu provisi sumber daya, gunakan template Azure Resource Manager (ARM) di bawah.

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

Setelah memisahkan nilai untuk sumber daya name, location, SKU.name, dan SKU.tier, Anda bisa menggunakan Azure CLI untuk menyebarkan sumber daya dalam grup sumber daya yang ada menggunakan:

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>

Setelah sumber daya dibuat, Anda dapat mengambil sistem yang ditetapkan ke hub Anda menggunakan Azure CLI:

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

Identitas terkelola yang ditetapkan pengguna

Di bagian ini, Anda mempelajari cara menambahkan dan menghapus identitas terkelola yang ditetapkan pengguna dari hub IoT menggunakan portal Azure.

  1. Pertama, Anda perlu membuat identitas terkelola yang ditetapkan pengguna sebagai sumber daya mandiri. Untuk melakukannya, Anda dapat mengikuti petunjuknya di Membuat identitas terkelola yang ditetapkan pengguna.

  2. Pergi ke hub IoT Anda, navigasi ke Identitas di portal IoT Hub.

  3. Di bagian tab Ditetapkan Pengguna, klik Tambahkan identitas terkelola yang ditetapkan pengguna. Pilih identitas terkelola yang ditetapkan pengguna yang ingin Anda tambahkan ke hub Anda lalu klik Pilih.

  4. Anda dapat menghapus identitas yang ditetapkan pengguna dari hub IoT. Pilih identitas yang ditetapkan pengguna yang ingin Anda hapus, dan klik tombol Hapus. Catatan Anda hanya menghapusnya dari hub IoT, dan penghapusan ini tidak menghapus identitas yang ditetapkan pengguna sebagai sumber daya. Untuk menghapus identitas yang ditetapkan pengguna sebagai sumber daya, ikuti petunjuknya di Menghapus identitas terkelola yang ditetapkan pengguna.

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

Aktifkan identitas terkelola yang ditetapkan pengguna pada waktu pembuatan hub menggunakan template ARM

Berikut adalah contoh templat yang dapat digunakan untuk membuat hub dengan identitas terkelola yang ditetapkan pengguna. Templat ini membuat satu identitas yang ditetapkan pengguna dengan nama [iothub-name-provided]-identity dan ditetapkan ke hub IoT yang dibuat. Anda dapat mengubah templat untuk menambahkan beberapa identitas yang ditetapkan pengguna sesuai kebutuhan.

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

Setelah sumber daya dibuat, Anda dapat mengambil identitas terkelola yang ditetapkan pengguna di hub Anda menggunakan Azure CLI:

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

Konektivitas keluar dari IoT Hub ke sumber daya Azure lainnya

Identitas terkelola dapat digunakan untuk konektivitas keluar dari IoT Hub ke layanan Azure lainnya untuk perutean pesan, unggahan file, dan impor/ekspor perangkat massal. Anda dapat memilih identitas terkelola yang akan digunakan untuk setiap konektivitas keluar IoT Hub ke titik akhir milik pelanggan termasuk akun penyimpanan, hub peristiwa, dan titik akhir bus layanan.

Catatan

Hanya identitas terkelola yang ditetapkan sistem yang memberi IoT Hub akses ke sumber daya privat. Jika Anda ingin menggunakan identitas terkelola yang ditetapkan pengguna, maka akses publik pada sumber daya pribadi tersebut perlu diaktifkan untuk memungkinkan konektivitas.

Mengonfigurasi perutean pesan dengan identitas terkelola

Di bagian ini, kami menggunakan perutean pesan ke titik akhir kustom Azure Event Hubs sebagai contoh. Contoh ini juga berlaku untuk titik akhir kustom perutean lainnya.

  1. Buka hub peristiwa Anda di portal Azure untuk menetapkan identitas terkelola sebagai akses yang tepat.

  2. Pilih Kontrol Akses (IAM) .

  3. Pilih Tambahkan > Tambahkan penetapan peran.

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

  4. Di tab Peran, pilih Pengirim Data Azure Event Hubs.

    Catatan

    Untuk akun penyimpanan, pilih Kontributor Data Blob Penyimpanan (bukan Kontributor atau Kontributor Akun Penyimpanan) sebagai peran. Untuk bus layanan, pilih Pengirim Data Azure Service Bus.

    Screenshot showing Add role assignment page with Role tab selected.

  5. Pada tab Anggota, pilih Identitas terkelola, kemudian pilih Pilih anggota.

  6. Untuk identitas terkelola yang ditetapkan pengguna, pilih langganan Anda, pilih Identitas terkelola yang ditetapkan pengguna, lalu pilih identitas terkelola yang ditetapkan pengguna Anda.

  7. Untuk identitas terkelola yang ditetapkan sistem, pilih langganan Anda, pilih Semua identitas terkelola yang ditetapkan sistem, lalu pilih nama sumber daya IoT Hub Anda.

  8. Di tab Tinjau + tetapkan, pilih Tinjau + tetapkan untuk menetapkan peran.

    Untuk informasi selengkapnya tentang penetapan peran, lihat Menetapkan peran Azure menggunakan portal Azure

  9. Jika Anda perlu membatasi konektivitas ke titik akhir kustom Anda melalui VNet, Anda perlu mengaktifkan pengecualian pihak pertama Microsoft tepercaya, untuk memberi hub IoT Anda akses ke titik akhir tertentu. Misalnya, jika Anda menambahkan titik akhir kustom hub peristiwa, navigasi ke tab Firewall dan jaringan virtual di hub peristiwa Anda dan aktifkan opsi Izinkan akses dari jaringan yang dipilih. Di bawah daftar Pengecualian, centang kotak untuk Izinkan layanan Microsoft tepercaya untuk mengakses hub peristiwa. Klik tombol Simpan. Ini juga berlaku untuk akun penyimpanan dan bus layanan. Pelajari selengkapnya tentang dukungan IoT Hub untuk jaringan virtual.

    Catatan

    Anda perlu menyelesaikan langkah-langkah di atas untuk menetapkan identitas terkelola akses yang tepat sebelum menambahkan hub peristiwa sebagai titik akhir kustom di IoT Hub. Harap tunggu beberapa menit agar tugas peran merambat.

  10. Selanjutnya, buka hub IoT Anda. Di hub Anda, navigasikan ke Perutean Pesan, lalu pilih Tambahkan.

  11. Pada tab Titik Akhir, buat titik akhir untuk pusat aktivitas Anda dengan memberikan informasi berikut:

    Parameter Nilai
    Jenis titik akhir Pilih Azure Event Hubs.
    Nama titik akhir Berikan nama unik untuk titik akhir baru, atau pilih Pilih yang sudah ada untuk memilih titik akhir Azure Event Hubs yang sudah ada.
    Namespace layanan Azure Event Hubs Gunakan menu drop-down untuk memilih namespace layanan Azure Event Hubs yang ada di langganan Anda.
    Instans pusat aktivitas Gunakan menu drop-down untuk memilih pusat aktivitas yang ada di namespace Anda.
    Jenis autentikasi Pilih Ditetapkan pengguna, lalu gunakan menu drop-down untuk memilih Identitas yang ditetapkan pengguna yang Anda buat di hub peristiwa Anda.

    Screenshot that shows event hub endpoint with user assigned authentication.

  12. Pilih Buat + berikutnya. Anda bisa melanjutkan melalui panduan untuk membuat rute yang menunjuk ke titik akhir ini, atau Anda bisa menutup panduan.

Anda dapat mengubah jenis autentikasi titik akhir kustom yang ada. Gunakan langkah-langkah berikut untuk mengubah titik akhir:

  1. Di hub IoT Anda, pilih Perutean pesan di panel navigasi kiri lalu Titik akhir kustom.

  2. Pilih kotak centang untuk titik akhir kustom yang ingin Anda ubah, lalu pilih Ubah jenis autentikasi.

  3. Pilih jenis autentikasi baru untuk titik akhir ini, lalu pilih Simpan.

Mengonfigurasi pengunggahan file dengan identitas terkelola

Fitur unggah file IoT Hub memungkinkan perangkat untuk mengunggah file ke akun penyimpanan milik pelanggan. Untuk memungkinkan pengunggahan file berfungsi, IoT Hub harus memiliki konektivitas ke akun penyimpanan. Mirip dengan perutean pesan, Anda dapat memilih jenis autentikasi pilihan dan identitas terkelola untuk konektivitas keluar IoT Hub ke akun Azure Storage Anda.

  1. Di portal Microsoft Azure, navigasikan ke akun penyimpanan Anda.

  2. Pilih Kontrol Akses (IAM) .

  3. Pilih Tambahkan > Tambahkan penetapan peran.

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

  4. Pada tab Peran, pilih Kontributor Data Blob Penyimpanan. (Jangan pilih Kontributor atau Kontributor Akun Penyimpanan.)

  5. Pada tab Anggota, pilih Identitas terkelola, kemudian pilih Pilih anggota.

  6. Untuk identitas terkelola yang ditetapkan pengguna, pilih langganan Anda, pilih Identitas terkelola yang ditetapkan pengguna, lalu pilih identitas terkelola yang ditetapkan pengguna Anda.

  7. Untuk identitas terkelola yang ditetapkan sistem, pilih langganan Anda, pilih Semua identitas terkelola yang ditetapkan sistem, lalu pilih nama sumber daya IoT Hub Anda.

  8. Di tab Tinjau + tetapkan, pilih Tinjau + tetapkan untuk menetapkan peran.

    Untuk informasi selengkapnya tentang penetapan peran, lihat Menetapkan peran Azure menggunakan portal Azure

    Jika Anda perlu membatasi konektivitas ke akun penyimpanan Anda melalui VNet, Anda perlu mengaktifkan pengecualian pihak pertama Microsoft tepercaya, untuk memberi hub IoT Anda akses ke akun penyimpanan. Pada halaman sumber daya akun penyimpanan Anda, navigasi ke tab Firewall dan jaringan virtual dan aktifkan opsi Izinkan akses dari jaringan yang dipilih. Di bawah daftar Pengecualian, centang kotak untuk Izinkan layanan Microsoft tepercaya untuk mengakses akun penyimpanan ini. Klik tombol Simpan. Pelajari selengkapnya tentang dukungan IoT Hub untuk jaringan virtual.

    Catatan

    Anda perlu menyelesaikan langkah-langkah di atas untuk menetapkan identitas terkelola akses yang tepat sebelum menyimpan akun penyimpanan di IoT Hub untuk pengunggahan file menggunakan identitas terkelola. Harap tunggu beberapa menit agar tugas peran merambat.

  9. Di halaman sumber daya hub IoT Anda, navigasi ke tab Unggah file.

  10. Pada halaman yang muncul, pilih kontainer yang ingin Anda gunakan di penyimpanan blob Anda, konfigurasikan Pengaturan pemberitahuan File, SAS TTL, TTL Default, dan Jumlah pengiriman maksimum seperti yang diinginkan. Pilih jenis autentikasi pilihan, dan klik Simpan. Jika Anda mendapatkan kesalahan pada langkah ini, atur sementara akun penyimpanan Anda untuk mengizinkan akses dari Semua jaringan, lalu coba lagi. Anda dapat mengonfigurasi {i>firewall File

    Screen shot that shows file upload with msi.

    Catatan

    Dalam skenario pengunggahan file, hub dan perangkat Anda perlu terhubung dengan akun penyimpanan Anda. Langkah-langkah di atas adalah untuk menghubungkan hub IoT Anda ke akun penyimpanan Anda dengan jenis autentikasi yang diinginkan. Anda masih perlu menghubungkan perangkat Anda ke penyimpanan menggunakan SAS URI. Saat ini, SAS URI dihasilkan menggunakan string koneksi. Kami akan menambahkan dukungan untuk membuat SAS URI dengan identitas terkelola dalam waktu dekat. Ikuti langkah-langkah di pengunggahan file.

Mengonfigurasi impor/ekspor perangkat massal dengan identitas terkelola

IoT Hub mendukung fungsionalitas untuk mengimpor/mengekspor informasi perangkat secara massal dari/ke blob penyimpanan yang disediakan pelanggan. Fungsi ini memerlukan konektivitas dari IoT Hub ke akun penyimpanan.

  1. Di portal Microsoft Azure, navigasikan ke akun penyimpanan Anda.

  2. Pilih Kontrol Akses (IAM) .

  3. Pilih Tambahkan > Tambahkan penetapan peran.

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

  4. Pada tab Peran, pilih Kontributor Data Blob Penyimpanan. (Jangan pilih Kontributor atau Kontributor Akun Penyimpanan.)

  5. Pada tab Anggota, pilih Identitas terkelola, kemudian pilih Pilih anggota.

  6. Untuk identitas terkelola yang ditetapkan pengguna, pilih langganan Anda, pilih Identitas terkelola yang ditetapkan pengguna, lalu pilih identitas terkelola yang ditetapkan pengguna Anda.

  7. Untuk identitas terkelola yang ditetapkan sistem, pilih langganan Anda, pilih Semua identitas terkelola yang ditetapkan sistem, lalu pilih nama sumber daya IoT Hub Anda.

  8. Di tab Tinjau + tetapkan, pilih Tinjau + tetapkan untuk menetapkan peran.

    Untuk informasi selengkapnya tentang penetapan peran, lihat Menetapkan peran Azure menggunakan portal Azure

Menggunakan REST API atau SDK untuk pekerjaan impor dan ekspor

Sekarang, Anda dapat menggunakan API REST Azure IoT untuk membuat pekerjaan impor dan ekspor. Anda harus menyediakan properti berikut dalam isi permintaan:

  • storageAuthenticationType: Atur nilai ke identityBased.
  • inputBlobContainerUri: Tetapkan properti ini hanya dalam pekerjaan impor.
  • outputBlobContainerUri: Tetapkan properti ini untuk pekerjaan impor dan ekspor.
  • identitas: Tetapkan nilai ke identitas terkelola untuk digunakan.

Azure IoT Hub SDK juga mendukung fungsionalitas ini di pengelola registri klien layanan. Cuplikan kode berikut menunjukkan cara memulai pekerjaan impor atau pekerjaan ekspor dalam menggunakan C# SDK.

Cuplikan kode 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
        });

Cuplikan kode 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>"
    ) 
))

Catatan

  • Jika storageAuthenticationType diatur ke identityBased dan properti userAssignedIdentity tidak null, pekerjaan akan menggunakan identitas terkelola yang ditetapkan pengguna yang ditentukan.
  • Jika hub IoT tidak dikonfigurasi dengan identitas terkelola yang ditetapkan pengguna yang ditentukan dalam userAssignedIdentity, tugas akan gagal.
  • Jika storageAuthenticationType diatur ke properti identityBaseduserAssignedIdentity null, tugas akan menggunakan identitas yang ditetapkan sistem.
  • Jika hub IoT tidak dikonfigurasi dengan identitas terkelola yang ditetapkan pengguna, tugas akan gagal.
  • Jika storageAuthenticationType diatur ke identityBased dan tidak ada identitas terkelola yang ditetapkan pengguna maupun yang ditetapkan sistem yang dikonfigurasi pada hub, pekerjaan akan gagal.

Sampel SDK

Langkah berikutnya

Gunakan tautan di bawah untuk mempelajari selengkapnya tentang fitur IoT Hub: