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

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

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

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

  • اقرأ وثائق الهويات المدارة لموارد Azure لفهم الاختلافات بين الهوية المدارة المعينة من قبل النظام والهوية المدارة المعينة من قبل المستخدم.

  • إذا لم يكن لديك مركز إنترنت الأشياء، فقم بإنشاء مركز قبل المتابعة.

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

إضافة هوية مدارة تم تعيينها من قبل النظام وإزالتها في مدخل Azure

  1. سجل الدخول إلى مدخل Azure وانتقل إلى مركز إنترنت الأشياء المطلوب.

  2. الانتقال إلى الهوية في مدخل IoT Hub

  3. ضمن علامة التبويب المعينة من قبل النظام ، حدد تشغيل وانقر فوق حفظ.

  4. لإزالة الهوية المدارة المعينة من قبل النظام من مركز إنترنت الأشياء، حدد إيقاف وانقر فوق حفظ.

    Screenshot showing where to turn on system-assigned managed identity for an I O T 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
              }
            }
          ] 
        }
      }
    }
  ]
}

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

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>

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

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

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

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

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

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

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

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

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

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

Egress الاتصال من 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.

    ملاحظة

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

    Screenshot showing Add role assignment page with Role tab selected.

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

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

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

  8. في علامة التبويب ⁦⁩مراجعة + تعيين، حدد مراجعة + تعيين⁩ لتعيين الدور.

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

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

    ملاحظة

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

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

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

    Screenshot that shows event hub with user assigned.

  12. تم إنشاء نقطة نهاية مخصصة بنجاح.

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

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

تكوين تحميل الملفات باستخدام الهويات المدارة

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

  1. انتقل إلى تطبيق التخزين الجديد في مدخل Azure.

  2. حدد Access control (IAM).

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

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

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

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

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

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

  8. في علامة التبويب ⁦⁩مراجعة + تعيين، حدد مراجعة + تعيين⁩ لتعيين الدور.

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

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

    ملاحظة

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

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

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

    Screen shot that shows file upload with msi.

    ملاحظة

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

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

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

  1. انتقل إلى تطبيق التخزين الجديد في مدخل Azure.

  2. حدد Access control (IAM).

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

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

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

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

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

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

  8. في علامة التبويب ⁦⁩مراجعة + تعيين، حدد مراجعة + تعيين⁩ لتعيين الدور.

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

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

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

  • storageAuthenticationType: قم بتعيين القيمة إلى identityBased.
  • inputBlobContainerUri: تعيين هذه الخاصية فقط في مهمة الاستيراد.
  • outputBlobContainerUri: تعيين هذه الخاصية لكل من مهام الاستيراد والتصدير.
  • الهوية: قم بتعيين القيمة إلى الهوية المدارة لاستخدامها.

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

مقتطف شفرة 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
        });

مقتطف شفرة بايثون

# 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 إلى identityBased ولم تكن الخاصية userAssignedIdentityفارغة، فستستخدم المهام الهوية المدارة المحددة التي تم تعيينها من قبل المستخدم.
  • إذا لم يتم تكوين مركز إنترنت الأشياء مع الهوية المدارة المعينة من قبل المستخدم والمحددة في userAssignedIdentity، فستفشل المهمة.
  • إذا تم تعيين storageAuthenticationType إلى identityاستنادا إلى الخاصية userAssignIdentity فارغة، ستستخدم المهام الهوية المعينة من قبل النظام.
  • إذا لم يتم تكوين مركز إنترنت الأشياء مع الهوية المدارة المعينة من قبل المستخدم، فستفشل المهمة.
  • إذا تم تعيين storageAuthenticationType إلى identityBased ولم يتم تكوين الهويات المدارة المعينة من قبل المستخدم أو المعينة من قبل النظام على الموزع، فستفشل المهمة.

عينات SDK‎

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

استخدم الروابط أدناه لمعرفة المزيد حول ميزات IoT Hub: