دعم IoT Hub للهويات المدارة

توفر الهويات المدارة خدمات Azure بهوية مدارة تلقائيا في معرف Microsoft Entra بطريقة آمنة. هذا يلغي احتياجات المطورين الذين يتعين عليهم إدارة بيانات الاعتماد من خلال توفير هوية. هناك نوعان من الهويات المدارة: مخصص من قِبَل النظام ومخصص من قِبَل المستخدم. يدعم IoT Hub كليهما.

في IoT Hub، يمكن استخدام الهويات المدارة لاتصال الخروج من IoT Hub إلى خدمات Azure الأخرى لميزات مثل توجيه الرسائل وتحميل الملف واستيراد/تصدير الجهاز المجمع. في هذه المقالة، ستتعلم كيفية استخدام الهويات المُدارة المخصصة من قبل النظام والمُدارة من قبل المستخدم في مركز إنترنت الأشياء الخاص بك لوظائف مختلفة.

المتطلبات الأساسية

الهوية المُدارة التي يُعيّنها النظام

تمكين الهوية المدارة المعينة من قبل النظام أو تعطيلها في مدخل Microsoft Azure

  1. سجل الدخول إلى مدخل Microsoft Azure والانتقال إلى IoT hub الخاص بك.

  2. حدد Identity من قسم Security settings في قائمة التنقل.

  3. حدد علامة التبويب System-assigned.

  4. قم بتعيين حالة الهوية المدارة المعينة من قبل النظام إلى تشغيل أو إيقاف تشغيل، ثم حدد حفظ.

    إشعار

    لا يمكنك إيقاف تشغيل الهوية المدارة المعينة من قبل النظام أثناء استخدامها. تأكد من عدم وجود نقاط نهاية مخصصة تستخدم مصادقة الهوية المدارة المعينة من قبل النظام قبل تعطيل الميزة.

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

قم بتمكين الهوية المُدارة المعينة من قبل النظام في وقت إنشاء المحور باستخدام قالب ARM

لتمكين الهوية المُدارة المعينة من قبل النظام في مركز إنترنت الأشياء الخاص بك في وقت توفير الموارد، استخدم قالب Azure Resource Manager (ARM) أدناه.

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

بعد استبدال قيم المورد الخاص بك name وlocation وSKU.name وSKU.tier، يمكنك استخدام Azure CLI لتوزيع المورد في مجموعة موارد موجودة باستخدام:

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>

بعد إنشاء المورد، يمكنك استرداد النظام المعين إلى الموزع الخاص بك باستخدام Azure CLI:

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

الهوية المُدارة التي يعيّنها المُستخدم

في هذا القسم، ستتعلم كيفية إضافة وإزالة هوية مُدارة معينة من قبل المستخدم من مركز IoT باستخدام مدخل Azure.

  1. تحتاج أولاً إلى إنشاء هوية مُدارة يعينها المستخدم كمورد مستقل. للقيام بذلك، يمكنك اتباع الإرشادات الواردة في إنشاء هوية مُدارة يعينها المستخدم.

  2. انتقل إلى مركز إنترنت الأشياء الخاص بك، وانتقل إلى الهوية في مدخل IoT Hub.

  3. ضمن علامة تبويب معين من قبل المستخدم، انقر فوق إقران هوية مُدارة يعينها المستخدم. اختر الهوية التي يديرها المستخدم والتي تريد إضافتها إلى المحور الخاص بك، ثم انقر فوق تحديد.

  4. يمكنك إزالة هوية معينة من قبل المستخدم من مركز إنترنت الأشياء. اختر الهوية المعينة من قبل المستخدم التي تريد إزالتها، وانقر فوق زر إزالة. لاحظ أنك تقوم بإزالته فقط من مركز إنترنت الأشياء، ولا تؤدي هذه الإزالة إلى حذف الهوية المعينة من قبل المستخدم كمورد. لحذف الهوية المعينة من قبل المستخدم كمورد، اتبع الإرشادات الموجودة في حذف هوية مُدارة معينة من قبل المستخدم.

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

تمكين الهوية المُدارة التي يحددها المستخدم في وقت إنشاء المحور باستخدام قالب ARM

يمكن استخدام نموذج المثال التالي لإنشاء لوحة وصل بهوية مُدارة من قبل المستخدم. يُنشئ هذا القالب هوية مستخدم واحدة معيّنة بالاسم [iothub-name-provided]-identity ويتم تعيينها إلى مركز IoT الذي تم إنشاؤه. يمكنك تغيير القالب لإضافة هويات متعددة مخصصة للمستخدم حسب الحاجة.

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

بعد إنشاء المورد، يمكنك استرداد الهوية المُدارة المعينة من قِبل المستخدم في الموزع باستخدام Azure CLI:

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

اتصال الخروج من IoT Hub إلى موارد Azure الأخرى

يمكن استخدام الهويات المدارة لاتصال الخروج من IoT Hub إلى خدمات Azure الأخرى من أجل توجيه الرسائل وتحميل الملف واستيراد/تصدير الجهاز المجمع. يمكنك اختيار هوية مُدارة لاستخدامها لكل اتصال خروج IoT Hub بنقاط النهاية المملوكة للعميل بما في ذلك حسابات التخزين ومراكز الأحداث ونقاط نهاية ناقل الخدمة.

إشعار

تمنح الهوية المُدارة المخصصة من قبل النظام فقط وصول IoT Hub إلى الموارد الخاصة. إذا كنت ترغب في استخدام الهوية المُدارة المعينة من قِبل المستخدم، فيجب تمكين الوصول العام إلى هذه الموارد الخاصة للسماح بالاتصال.

تكوين توجيه الرسائل باستخدام الهويات المدارة

في هذا القسم، نستخدم توجيه الرسائل إلى نقطة نهاية مخصصة لمراكز الأحداث كمثال. ينطبق المثال على نقاط النهاية المخصصة الأخرى للتوجيه، أيضا.

  1. انتقل إلى مركز الأحداث في مدخل Azure لتعيين الوصول الصحيح للهوية المُدارة.

  2. حدد Access control (IAM).

  3. حدد إضافة > إضافة تعيين الدور.

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

  4. في علامة تبويب الدور، حدد مرسل بيانات محاور أحداث Azure.

    إشعار

    بالنسبة إلى حساب التخزين، حدد مساهم بيانات Storage Blob (وليس مساهمًا أو مساهمًا في حساب التخزين) كدور. بالنسبة لناقل الخدمة، حدد مرسل بيانات ناقل خدمة Azure.

    Screenshot showing Add role assignment page with Role tab selected.

  5. في علامة التبويب الأعضاء، حدد الهوية المُدارة، ثم حدد تحديد الأعضاء.

  6. بالنسبة للهويات التي يديرها المستخدم، حدد اشتراكك، وحدد هوية مُدارة يعينها المستخدم، ثم حدد الهوية المُدارة التي عيّنها المستخدم.

  7. بالنسبة للهويات المُدارة التي يخصصها النظام، حدد اشتراكك، وحدد جميع الهويات المُدارة المخصصة من قبل النظام، ثم حدد اسم مورد IoT Hub الخاص بك.

  8. في علامة التبويب Review + assign ، حدد Review + assign لتعيين الدور.

    لمزيد من المعلومات بشأن تعيينات الأدوار، راجع تعيين أدوار Azure باستخدام مدخل Microsoft Azure

  9. إذا كنت بحاجة إلى تقييد الاتصال بنقطة النهاية المخصصة الخاصة بك من خلال VNet، فأنت بحاجة إلى تشغيل استثناء موثوق للطرف الأول من Microsoft، لمنح مركز IoT الخاص بك الوصول إلى نقطة النهاية المحددة. على سبيل المثال، إذا كنت تضيف نقطة نهاية مخصصة لمركز حدث، فانتقل إلى علامة التبويب جدران الحماية والشبكات الظاهرية في مركز الأحداث وقم بتمكين خيار السماح بالوصول من الشبكات المحددة. ضمن قائمة الاستثناءات، حدد مربع السماح لخدمات Microsoft الموثوقة بالوصول إلى مراكز الأحداث. انقر فوق الزر Save. ينطبق هذا أيضًا على حساب التخزين وناقل الخدمة. تعرف على المزيد عن دعم IoT Hub للشبكات الظاهرية.

    إشعار

    تحتاج إلى إكمال الخطوات المذكورة أعلاه لتعيين الوصول الصحيح للهوية المدارة قبل إضافة مركز الأحداث كنقطة نهاية مخصصة في IoT Hub. يُرجى الانتظار بضع دقائق حتى يتم نشر تعيين الدور.

  10. بعد ذلك، انتقل إلى مركز إنترنت الأشياء الخاص بك. في المركز، انتقل إلى توجيه الرسائل، ثم حدد إضافة.

  11. في علامة التبويب Endpoint ، أنشئ نقطة نهاية لمركز الأحداث الخاص بك عن طريق توفير المعلومات التالية:

    المعلمة القيمة
    نوع نقطة النهاية حدد Event Hubs.
    اسم نقطة النهاية أدخل اسما فريدا لنقطة نهاية جديدة، أو حدد Select existing لاختيار نقطة نهاية Event Hubs موجودة.
    مساحة اسم مراكز الأحداث استخدم القائمة المنسدلة لتحديد مساحة اسم Event Hubs موجودة في اشتراكك.
    مثيل مركز الأحداث استخدم القائمة المنسدلة لتحديد مركز أحداث موجود في مساحة الاسم الخاصة بك.
    نوع المصادقة حدد تعيين المستخدم، ثم استخدم القائمة المنسدلة لتحديد الهوية المعينة من قبل المستخدم التي قمت بإنشائها في مركز الأحداث.

    Screenshot that shows event hub endpoint with user assigned authentication.

  12. حدد Create + next. يمكنك المتابعة من خلال المعالج لإنشاء مسار يشير إلى نقطة النهاية هذه، أو يمكنك إغلاق المعالج.

يمكنك تغيير نوع المصادقة لنقطة نهاية مخصصة موجودة. استخدم الخطوات التالية لتعديل نقطة نهاية:

  1. في مركز IoT، حدد توجيه الرسائل في جزء التنقل الأيمن ثم نقاط النهاية المخصصة.

  2. حدد خانة الاختيار لنقطة النهاية المخصصة التي تريد تعديلها، ثم حدد تغيير نوع المصادقة.

  3. اختر نوع المصادقة الجديد لنقطة النهاية هذه، ثم حدد حفظ.

تكوين تحميل الملف مع الهويات المدارة

تتيح ميزة تحميل الملفات في IoT Hub للأجهزة تحميل الملفات إلى حساب تخزين مملوك للعميل. للسماح بتحميل الملف للعمل، يحتاج IoT Hub إلى الاتصال بحساب التخزين. على غرار توجيه الرسائل، يمكنك اختيار نوع المصادقة المفضل والهوية المُدارة لاتصال خروج IoT Hub بحساب Azure Storage الخاص بك.

  1. في Azure portal، انتقل إلى حساب التخزين الخاص بك.

  2. حدد Access control (IAM).

  3. حدد إضافة > إضافة تعيين الدور.

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

  4. في علامة تبويب الدور، حدد مساهم بيانات Storage Blob. (لا تحدد مساهم أو مساهم في حساب التخزين).

  5. في علامة التبويب الأعضاء، حدد الهوية المُدارة، ثم حدد تحديد الأعضاء.

  6. بالنسبة للهويات التي يديرها المستخدم، حدد اشتراكك، وحدد هوية مُدارة يعينها المستخدم، ثم حدد الهوية المُدارة التي عيّنها المستخدم.

  7. بالنسبة للهويات المُدارة التي يخصصها النظام، حدد اشتراكك، وحدد جميع الهويات المُدارة المخصصة من قبل النظام، ثم حدد اسم مورد IoT Hub الخاص بك.

  8. في علامة التبويب Review + assign ، حدد Review + assign لتعيين الدور.

    لمزيد من المعلومات بشأن تعيينات الأدوار، راجع تعيين أدوار Azure باستخدام مدخل Microsoft Azure

    إذا كنت بحاجة إلى تقييد الاتصال بحساب التخزين الخاص بك من خلال VNet، فأنت بحاجة إلى تشغيل استثناء موثوق للطرف الأول من Microsoft، لمنح مركز IoT الخاص بك الوصول إلى حساب التخزين. في صفحة موارد حساب التخزين، انتقل إلى علامة التبويب الجدران النارية والشبكات الظاهرية وقم بتمكين خيار السماح بالوصول من الشبكات المحددة. ضمن قائمة الاستثناءات، حدد مربع السماح لخدمات Microsoft الموثوقة بالوصول إلى حساب التخزين هذا. انقر فوق الزر Save. تعرف على المزيد عن دعم IoT Hub للشبكات الظاهرية.

    إشعار

    تحتاج إلى إكمال الخطوات المذكورة أعلاه لتعيين الوصول الصحيح للهوية المدارة قبل حفظ حساب التخزين في IoT Hub لتحميل الملف باستخدام الهوية المُدارة. يُرجى الانتظار بضع دقائق حتى يتم نشر تعيين الدور.

  9. في صفحة موارد مركز IoT، انتقل إلى علامة تبويب تحميل ملف.

  10. في الصفحة التي تظهر، حدد الحاوية التي تنوي استخدامها في تخزين blob الخاص بك، وقم بتهيئة إعدادات إشعار الملف وSAS TTL وTTL الافتراضي والحد الأقصى لعدد التسليم كما تريد. اختر نوع المصادقة المفضل، وانقر فوق حفظ. إذا تلقيت خطأ في هذه الخطوة، فقم بتعيين حساب التخزين مؤقتًا للسماح بالوصول من جميع الشبكات، ثم حاول مرة أخرى. يمكنك تكوين جدار الحماية على حساب التخزين بمجرد اكتمال تكوين تحميل الملف.

    Screen shot that shows file upload with msi.

    إشعار

    في سيناريو تحميل الملف، يحتاج كل من الموزع والجهاز الخاص بك إلى الاتصال بحساب التخزين الخاص بك. الخطوات المذكورة أعلاه مخصصة لتوصيل مركز IoT بحساب التخزين الخاص بك بنوع المصادقة المطلوب. ما زلت بحاجة إلى توصيل جهازك بالتخزين باستخدام SAS URI. اليوم يتم إنشاء SAS URI باستخدام سلسلة الاتصال. سنضيف دعمًا لإنشاء SAS URI بهوية مُدارة قريبًا. يُرجى اتباع الخطوات الواردة في تحميل ملف.

قم بتكوين استيراد/تصدير الأجهزة المجمعة باستخدام الهويات المُدارة

يدعم IoT Hub وظيفة استيراد/تصدير معلومات الأجهزة بشكل مجمّع من/إلى كائن تخزين كبير الحجم يوفره العميل. تتطلب هذه الوظيفة اتصالاً من IoT Hub بحساب التخزين.

  1. في Azure portal، انتقل إلى حساب التخزين الخاص بك.

  2. حدد Access control (IAM).

  3. حدد إضافة > إضافة تعيين الدور.

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

  4. في علامة تبويب الدور، حدد مساهم بيانات Storage Blob. (لا تحدد مساهم أو مساهم في حساب التخزين).

  5. في علامة التبويب الأعضاء، حدد الهوية المُدارة، ثم حدد تحديد الأعضاء.

  6. بالنسبة للهويات التي يديرها المستخدم، حدد اشتراكك، وحدد هوية مُدارة يعينها المستخدم، ثم حدد الهوية المُدارة التي عيّنها المستخدم.

  7. بالنسبة للهويات المُدارة التي يخصصها النظام، حدد اشتراكك، وحدد جميع الهويات المُدارة المخصصة من قبل النظام، ثم حدد اسم مورد IoT Hub الخاص بك.

  8. في علامة التبويب Review + assign ، حدد Review + assign لتعيين الدور.

    لمزيد من المعلومات بشأن تعيينات الأدوار، راجع تعيين أدوار Azure باستخدام مدخل Microsoft Azure

استخدام واجهة برمجة تطبيقات REST أو SDK لمهام الاستيراد والتصدير

يمكنك الآن استخدام واجهات برمجة تطبيقات Azure IoT REST لإنشاء مهام الاستيراد والتصدير. ستحتاج إلى تقديم الخصائص التالية في نص الطلب:

  • storageAuthenticationType: قم بتعيين القيمة إلى IdentBased.
  • inputBlobContainerUri: قم بتعيين هذه الخاصية فقط في مهمة الاستيراد.
  • outputBlobContainerUri: قم بتعيين هذه الخاصية لمهام الاستيراد والتصدير على حدٍ سواء.
  • الهوية: عيِّن القيمة على الهوية المُدارة لاستخدامها.

تدعم مجموعات Azure IoT Hub SDK أيضًا هذه الوظيفة في مدير تسجيل عميل الخدمة. يوضح مقتطف الشفرة التالي كيفية بدء مهمة استيراد أو تصدير مهمة باستخدام C# SDK.

قصاصة برمجية 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
        });

قصاصة برمجية 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>"
    ) 
))

إشعار

  • إذا تم تعيين storageAuthenticationType على IdentBased ولم تكن الخاصية userAssignedIdentityفارغة، فستستخدم المهام الهوية المُدارة المحددة من قبل المستخدم.
  • إذا لم يتم تكوين مركز IoT باستخدام الهوية المُدارة التي حددها المستخدم والمحددة في userAssignedIdentity، فستفشل المهمة.
  • إذا تم تعيين storageAuthenticationType على IdentBased أصبحت الخاصية userAssignedIdentity خالية، فستستخدم المهام المعرف المعين من قبل النظام.
  • إذا لم يتم تكوين مركز إنترنت الأشياء باستخدام الهوية المُدارة التي عيّنها المستخدم، فستفشل المهمة.
  • إذا تم تعيين storageAuthenticationType على IdentBased ولم يتم تكوين الهويات المُدارة المعينة من قبل المستخدم ولا الهويات المُدارة المعينة من قبل النظام على الموزع، ستفشل المهمة.

عينات SDK‎

الخطوات التالية

يُرجى استخدم الروابط الموضحة أدناه لمعرفة المزيد عن ميزات مركز إنترنت الأشياء: