الاتصال جهاز IoT Edge المتلقي للمعلومات إلى بوابة Azure IoT Edge

ينطبق على:yes icon IoT Edge 1.2

توفر هذه المقالة إرشادات لإنشاء اتصال موثوق به بين بوابة IoT Edge وجهاز IoT Edge المتلقي للمعلومات.

في سيناريو البوابة، يمكن أن يكون جهاز IoT Edge عبارة وجهاز انتقال البيانات من الخادم. يمكن وضع بوابات IoT Edge المتعددة في طبقات لإنشاء تسلسل هرمي للأجهزة. يمكن لأجهزة انتقال البيانات من الخادم (التابعة) مصادقة الرسائل وإرسالها أو تلقيها من خلال جهاز البوابة (الأصل).

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

تتطلب بعض بنيات الشبكة أن جهاز IoT Edge العلوي فقط في التسلسل الهرمي يمكنه الاتصال بالسحابة. في هذا التكوين، يمكن لجميع أجهزة IoT Edge في الطبقات السفلية من التسلسل الهرمي الاتصال فقط بجهاز البوابة (أو الأصل) وأي أجهزة انتقال البيانات من الخادم (أو تابعة).

تعتمد جميع الخطوات الواردة في هذه المقالة على تكوين جهاز IoT Edge للعمل كبوابة شفافة، والتي تقوم بإعداد جهاز IoT Edge ليكون بوابة لأجهزة IoT المتلقية للمعلومات. تنطبق نفس الخطوات الأساسية على جميع سيناريوهات البوابة:

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

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

  • مركز IoT مجاني أو قياسي.
  • جهازان على الأقل من أجهزة IoT Edge، واحد ليكون جهاز الطبقة العليا وجهازا واحدا أو أكثر من أجهزة الطبقة السفلية. إذا لم يكن لديك أجهزة IoT Edge متوفرة، يمكنك تشغيل Azure IoT Edge على أجهزة Ubuntu الظاهرية.
  • إذا كنت تستخدم Azure CLI لإنشاء الأجهزة وإدارتها، فثبت Azure CLI v2.3.1 مع ملحق Azure IoT v0.10.6 أو أعلى.

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

إنشاء تسلسل هيكلي للبوابة

يمكنك إنشاء التسلسل الهرمي لبوابة IoT Edge عن طريق تعريف العلاقات الأصل/التابعة لأجهزة IoT Edge في السيناريو. يمكنك تعيين جهاز أصل عند إنشاء هوية جهاز جديدة، أو يمكنك إدارة الأصل والتوابع لهوية جهاز موجودة.

تخول خطوة إعداد العلاقات الأصل/التابعة الأجهزة التابعة للاتصال بجهازها الأصل كما لو كانت تتصل ب IoT Hub.

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

بشكل افتراضي، يمكن أن يكون لأحد الوالدين ما يصل إلى 100 طفل. يمكنك تغيير هذا الحد عن طريق تعيين متغير البيئة MaxConnectedClients في الوحدة النمطية edgeHub للجهاز الأصل.

في مدخل Microsoft Azure، يمكنك إدارة العلاقة الأصل/التابعة عند إنشاء هويات جهاز جديدة، أو عن طريق تحرير الأجهزة الموجودة.

عند إنشاء جهاز IoT Edge جديد، يكون لديك خيار اختيار الأجهزة الأصل والأولاد من قائمة أجهزة IoT Edge الموجودة في هذا المركز.

  1. في مدخل Microsoft Azure، انتقل إلى مركز IoT الخاص بك.
  2. حدد IoT Edge من قائمة التنقل.
  3. حدد إضافة جهاز IoT Edge.
  4. إلى جانب تعيين معرف الجهاز وإعدادات المصادقة، يمكنك تعيين جهاز أصل أو اختيار أجهزة تابعة.
  5. اختر الجهاز أو الأجهزة التي تريدها كأصل أو طفل.

يمكنك أيضا إنشاء العلاقات الأصل/التابعة للأجهزة الموجودة أو إدارتها.

  1. في مدخل Microsoft Azure، انتقل إلى مركز IoT الخاص بك.
  2. حدد IoT Edge من قائمة التنقل.
  3. حدد الجهاز الذي تريد إدارته من قائمة أجهزة IoT Edge.
  4. حدد تعيين جهاز أصل أو إدارة الأجهزة التابعة.
  5. إضافة أو إزالة أي أجهزة أصلية أو تابعة.

ملاحظة

إذا كنت ترغب في إنشاء علاقات أصل-تابع برمجيا، يمكنك استخدام C#، أو Java، أو Node.js IoT Hub Service SDK.

فيما يلي مثال على تعيين الأجهزة التابعة باستخدام C# SDK. توضح المهمة RegistryManager_AddAndRemoveDeviceWithScope() كيفية إنشاء تسلسل هرمي من ثلاث طبقات برمجيا. يوجد جهاز IoT Edge في الطبقة 1، كأصل. يوجد جهاز IoT Edge آخر في الطبقة الثانية، ويعمل كل من الطفل والوالد. وأخيرا، يوجد جهاز IoT في الطبقة الثالثة، كأدنى جهاز تابع للطبقة.

إنشاء الشهادات

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

باستخدام هذا الإعداد، يمكن لكل جهاز IoT Edge المتلقي للمعلومات التحقق من هوية الأصل الخاص به عن طريق التحقق من أن edgeHub الذي يتصلون به لديه شهادة خادم موقعة بواسطة شهادة المرجع المصدق الجذر المشتركة.

Illustration of certificate chain issued by root CA on gateway and downstream device

لمزيد من المعلومات حول متطلبات شهادة IoT Edge، راجع فهم كيفية استخدام Azure IoT Edge للشهادات.

  1. إنشاء الشهادات التالية أو طلبها:

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

    يمكنك استخدام مرجع مصدق موقع ذاتيا أو شراء واحد من مرجع مصدق تجاري موثوق به مثل Baltimore أو Verisign أو Digicert أو GlobalSign.

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

    # !!! For test only - do not use in production !!!
    
    # Create the the root CA test certificate
    ./certGen.sh create_root_and_intermediate
    
    # Create the parent (gateway) device test certificate 
    # signed by the shared root CA certificate
    ./certGen.sh create_edge_device_ca_certificate "gateway"
    
    # Create the child (downstream) device test certificate
    # signed by the shared root CA certificate
    ./certGen.sh create_edge_device_ca_certificate "downstream"
    

    تحذير

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

    لمزيد من المعلومات حول إنشاء شهادات الاختبار، راجع إنشاء شهادات تجريبية لاختبار ميزات جهاز IoT Edge.

  3. ستحتاج إلى نقل الشهادات والمفاتيح إلى كل جهاز. يمكنك استخدام محرك أقراص USB أو خدمة مثل Azure Key Vault أو باستخدام دالة مثل نسخة ملف آمنة. اختر إحدى هذه الطرق التي تتطابق مع السيناريو الخاص بك على أفضل نحو.

لمزيد من المعلومات حول تثبيت الشهادات على جهاز، راجع إدارة الشهادات على جهاز IoT Edge.

تكوين الجهاز الأصل

لتكوين جهازك الأصل، افتح shell أمر محلي أو بعيد.

لتمكين الاتصالات الآمنة، يجب تكوين كل جهاز أصل IoT Edge في سيناريو البوابة مع شهادة CA لجهاز فريد ونسخة من شهادة المرجع المصدق الجذر المشتركة بين جميع الأجهزة في التسلسل الهرمي للبوابة.

  1. نقل شهادة المرجع المصدق الجذروشهادة المرجع المصدق للجهاز الأصلوالمفتاح الخاص الأصل إلى الجهاز الأصل. تستخدم الأمثلة في هذه المقالة الدليل /var/secrets لدليل الشهادات والمفاتيح.

  2. تثبيت شهادة المرجع المصدق الجذر على جهاز IoT Edge الأصل. أولا، انسخ الشهادة الجذر في دليل الشهادة وأضف .crt إلى نهاية اسم الملف. بعد ذلك، قم بتحديث مخزن الشهادات على الجهاز باستخدام الأمر الخاص بالنظام الأساسي.

    Debian أو Ubuntu:

    sudo cp /var/secrets/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
    
    sudo update-ca-certificates
    

    IoT Edge ل Linux على Windows (EFLOW):

    sudo cp /var/secrets/azure-iot-test-only.root.ca.cert.pem /etc/pki/ca-trust/source/anchors/azure-iot-test-only.root.ca.cert.pem.crt
    
    sudo update-ca-trust
    

    لمزيد من المعلومات حول استخدام update-ca-trust، راجع إدارة شهادات CBL-Mariner SSL CA.

يبلغ الأمر عن إضافة شهادة واحدة إلى /etc/ssl/certs.

Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.

تحديث ملف التكوين الأصل

يجب أن يكون IoT Edge مثبتا بالفعل على جهازك. إذا لم يكن الأمر كما هو، فاتبع الخطوات لتوفير جهاز Linux IoT Edge واحد يدويا.

  1. /etc/aziot/config.toml تحقق من وجود ملف التكوين على الجهاز الأصل.

    إذا لم يكن ملف التكوين موجودا على جهازك، فاستخدم الأمر التالي لإنشائه استنادا إلى ملف القالب:

    sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
    

    يمكنك أيضا استخدام ملف القالب كمرجع لإضافة معلمات التكوين في هذا القسم.

  2. افتح ملف تكوين IoT Edge باستخدام محرر. على سبيل المثال، استخدم nano المحرر لفتح /etc/aziot/config.toml الملف.

    sudo nano /etc/aziot/config.toml
    
  3. ابحث عن معلمة اسم المضيف أو أضفها إلى بداية ملف التكوين. قم بتحديث القيمة لتكون اسم المجال المؤهل بالكامل (FQDN) أو عنوان IP للجهاز الأصل IoT Edge. على سبيل المثال:

    hostname = "10.0.0.4"
    

    لتمكين اكتشاف البوابة، يحتاج كل جهاز بوابة IoT Edge (أصل) إلى تحديد معلمة اسم المضيف التي ستستخدمها أجهزته التابعة للعثور عليها على الشبكة المحلية. يحتاج كل جهاز IoT Edge في المراحل النهائية إلى تحديد معلمة parent_hostname لتحديد الأصل الخاص به. في سيناريو هرمي حيث يكون جهاز IoT Edge واحد هو كل من الجهاز الأصل والتابع، فإنه يحتاج إلى كل من المعلمتين.

    يجب أن يكون اسم المضيفlocal_gateway_hostname ومعلمات trust_bundle_cert في بداية ملف التكوين قبل أي مقاطع. إضافة المعلمة قبل الأقسام المعرفة، يضمن تطبيقها بشكل صحيح.

    استخدم اسم مضيف أقصر من 64 حرفا، وهو حد الأحرف للاسم الشائع لشهادة الخادم.

    كن متسقا مع نمط اسم المضيف عبر التسلسل الهرمي للبوابة. استخدم إما FQDNs أو عناوين IP، ولكن ليس كليهما. FQDN أو عنوان IP مطلوب لتوصيل أجهزة انتقال البيانات من الخادم.

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

  4. ابحث عن معلمة شهادة حزمة الثقة أو أضفها إلى بداية ملف التكوين.

    تحديث المعلمة trust_bundle_cert مع URI الملف إلى شهادة المرجع المصدق الجذر على جهازك. على سبيل المثال:

    trust_bundle_cert = "file:///var/secrets/azure-iot-test-only.root.ca.cert.pem"
    
  5. ابحث عن قسم شهادة Edge CA أو أضفه في ملف التكوين. قم بتحديث معلمات الشهادة cert والمفتاح pk الخاص بمسارات URI للملف للشهادة والملفات الرئيسية على جهاز IoT Edge الأصل. يتطلب IoT Edge أن تكون الشهادة والمفتاح الخاص بتنسيق البريد المحسن للخصوصية (PEM) المستند إلى النص. على سبيل المثال:

    [edge_ca]
    cert = "file:///var/secrets/iot-edge-device-ca-gateway.cert.pem"
    pk = "file:///var/secrets/iot-edge-device-ca-gateway.key.pem"
    
  6. تحقق من أن جهاز IoT Edge يستخدم الإصدار الصحيح من عامل IoT Edge عند بدء تشغيله. ابحث عن قسم Default Edge Agent وقم بتعيين قيمة الصورة ل IoT Edge إلى الإصدار 1.2. على سبيل المثال:

    [agent.config]
    image: "mcr.microsoft.com/azureiotedge-agent:1.2"
    
  7. يجب أن تبدو بداية ملف التكوين الأصل مشابهة للمثال التالي.

    hostname = "10.0.0.4"
    trust_bundle_cert = "file:///var/secrets/azure-iot-test-only.root.ca.cert.pem"
    
    [edge_ca]
    cert = "file:///var/secrets/iot-edge-device-ca-gateway.cert.pem"
    pk = "file:///var/secrets/iot-edge-device-ca-gateway.key.pem"
    
  8. احفظ ملف التكوين وأغلقه config.toml . على سبيل المثال، إذا كنت تستخدم محرر nano، فحدد Ctrl+OWrite - Outو Enter و Ctrl+XExit - .

  9. إذا كنت قد استخدمت أي شهادات أخرى ل IoT Edge من قبل، فاحذف الملفات الموجودة في الدليلين التاليين للتأكد من تطبيق شهاداتك الجديدة:

    • /var/lib/aziot/certd/certs
    • /var/lib/aziot/keyd/keys
  10. تطبيق التغييرات.

    sudo iotedge config apply
    
  11. تحقق من وجود أي أخطاء في التكوين.

    sudo iotedge check --verbose
    

التحقق من التكوين الأصل

يجب أن يكون اسم المضيف اسم مجال مؤهل (FQDN) أو عنوان IP لجهاز IoT Edge لأن IoT Edge يستخدم هذه القيمة في شهادة الخادم عند اتصال أجهزة انتقال البيانات من الخادم. يجب أن تتطابق القيم أو ستحصل على خطأ في عدم تطابق عنوان IP .

للتحقق من اسم المضيف، تحتاج إلى فحص متغيرات البيئة لحاوية edgeHub .

  1. سرد حاويات IoT Edge قيد التشغيل.

    iotedge list
    

    تحقق من تشغيل حاويات edgeAgentوedgeHub . يجب أن يكون إخراج الأمر مشابها للمثال التالي.

    NAME                        STATUS           DESCRIPTION      CONFIG
    SimulatedTemperatureSensor  running          Up 5 seconds     mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0
    edgeAgent                   running          Up 17 seconds    mcr.microsoft.com/azureiotedge-agent:1.2
    edgeHub                     running          Up 6 seconds     mcr.microsoft.com/azureiotedge-hub:1.2
    
  2. فحص حاوية edgeHub .

    sudo docker inspect edgeHub
    
  3. في الإخراج، ابحث عن المعلمة EdgeDeviceHostName في قسم Env .

    "EdgeDeviceHostName=10.0.0.4"
    
  4. تحقق من تطابق قيمة المعلمة EdgeDeviceHostName مع config.toml إعداد اسم المضيف. إذا لم تتطابق، كانت حاوية edgeHub قيد التشغيل عند تعديل التكوين وتطبيقه. لتحديث EdgeDeviceHostName، قم بإزالة حاوية edgeAgent .

    sudo docker rm -f edgeAgent
    

    تتم إعادة إنشاء حاويات edgeAgentوedgeHub وبدء تشغيلها في غضون بضع دقائق. بمجرد تشغيل حاوية edgeHub ، افحص الحاوية وتحقق من تطابق المعلمة EdgeDeviceHostName مع ملف التكوين.

تكوين جهاز تابع

لتكوين جهازك التابع، افتح shell أوامر محلية أو بعيدة.

لتمكين الاتصالات الآمنة، يجب تكوين كل جهاز تابع ل IoT Edge في سيناريو البوابة بشهادة CA فريدة للجهاز ونسخة من شهادة المرجع المصدق الجذر المشتركة بين جميع الأجهزة في التسلسل الهرمي للبوابة.

  1. نقل شهادة المرجع المصدق الجذروشهادة المرجع المصدق للجهاز التابعوالمفتاح الخاص التابع إلى الجهاز التابع. تستخدم الأمثلة في هذه المقالة الدليل /var/secrets لدليل الشهادات والمفاتيح.

  2. تثبيت شهادة المرجع المصدق الجذر على جهاز IoT Edge التابع. أولا، انسخ الشهادة الجذر في دليل الشهادة وأضف .crt إلى نهاية اسم الملف. بعد ذلك، قم بتحديث مخزن الشهادات على الجهاز باستخدام الأمر الخاص بالنظام الأساسي.

    Debian أو Ubuntu:

    sudo cp /var/secrets/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
    
    sudo update-ca-certificates
    

    IoT Edge ل Linux على Windows (EFLOW):

    sudo cp /var/secrets/azure-iot-test-only.root.ca.cert.pem /etc/pki/ca-trust/source/anchors/azure-iot-test-only.root.ca.cert.pem.crt
    
    sudo update-ca-trust
    

    لمزيد من المعلومات حول استخدام update-ca-trust، راجع إدارة شهادات CBL-Mariner SSL CA.

يبلغ الأمر عن إضافة شهادة واحدة إلى /etc/ssl/certs.

Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.

تحديث ملف التكوين التابع

يجب أن يكون IoT Edge مثبتا بالفعل على جهازك. إذا لم يكن الأمر كما هو، فاتبع الخطوات لتوفير جهاز Linux IoT Edge واحد يدويا.

  1. /etc/aziot/config.toml تحقق من وجود ملف التكوين على الجهاز التابع.

    إذا لم يكن ملف التكوين موجودا على جهازك، فاستخدم الأمر التالي لإنشائه استنادا إلى ملف القالب:

    sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
    

    يمكنك أيضا استخدام ملف القالب كمرجع لإضافة معلمات التكوين في هذا القسم.

  2. افتح ملف تكوين IoT Edge باستخدام محرر. على سبيل المثال، استخدم nano المحرر لفتح /etc/aziot/config.toml الملف.

    sudo nano /etc/aziot/config.toml
    
  3. ابحث عن المعلمة parent_hostname أو أضفها إلى بداية ملف التكوين يحتاج كل جهاز IoT Edge المتلقي للمعلومات إلى تحديد معلمة parent_hostname لتحديد الأصل الخاص به. قم بتحديث المعلمة parent_hostname لتكون FQDN أو عنوان IP للجهاز الأصل، مع مطابقة كل ما تم توفيره باسم المضيف في ملف تكوين الجهاز الأصل. على سبيل المثال:

    parent_hostname = "10.0.0.4"
    
  4. ابحث عن معلمة شهادة حزمة الثقة أو أضفها إلى بداية ملف التكوين.

    تحديث المعلمة trust_bundle_cert مع URI الملف إلى شهادة المرجع المصدق الجذر على جهازك. على سبيل المثال:

    trust_bundle_cert = "file:///var/secrets/azure-iot-test-only.root.ca.cert.pem"
    
  5. ابحث عن قسم شهادة Edge CA أو أضفه في ملف التكوين. قم بتحديث معلمات الشهادة cert والمفتاح pk الخاص بمسارات URI للملف للشهادة والملفات الرئيسية على جهاز IoT Edge التابع. يتطلب IoT Edge أن تكون الشهادة والمفتاح الخاص بتنسيق البريد المحسن للخصوصية (PEM) المستند إلى النص. على سبيل المثال:

    [edge_ca]
    cert = "file:///var/secrets/iot-edge-device-ca-downstream.cert.pem"
    pk = "file:///var/secrets/iot-edge-device-ca-downstream.key.pem"
    
  6. تحقق من أن جهاز IoT Edge يستخدم الإصدار الصحيح من عامل IoT Edge عند بدء تشغيله. ابحث عن قسم Default Edge Agent وقم بتعيين قيمة الصورة ل IoT Edge إلى الإصدار 1.2. على سبيل المثال:

    [agent.config]
    image: "mcr.microsoft.com/azureiotedge-agent:1.2"
    
  7. يجب أن تبدو بداية ملف التكوين التابع مشابها للمثال التالي.

    parent_hostname = "10.0.0.4"
    trust_bundle_cert = "file:///var/secrets/azure-iot-test-only.root.ca.cert.pem"
    
    [edge_ca]
    cert = "file:///var/secrets/iot-edge-device-ca-downstream.cert.pem"
    pk = "file:///var/secrets/iot-edge-device-ca-downstream.key.pem"
    
  8. احفظ ملف التكوين وأغلقه config.toml . على سبيل المثال، إذا كنت تستخدم محرر nano، فحدد Ctrl+OWrite - Outو Enter و Ctrl+XExit - .

  9. إذا كنت قد استخدمت أي شهادات أخرى ل IoT Edge من قبل، فاحذف الملفات الموجودة في الدليلين التاليين للتأكد من تطبيق شهاداتك الجديدة:

    • /var/lib/aziot/certd/certs
    • /var/lib/aziot/keyd/keys
  10. تطبيق التغييرات.

    sudo iotedge config apply
    
  11. تحقق من وجود أي أخطاء في التكوين.

    sudo iotedge check --verbose
    

    تلميح

    تستخدم أداة فحص IoT Edge حاوية لإجراء بعض عمليات التحقق من التشخيص. إذا كنت ترغب في استخدام هذه الأداة على أجهزة IoT Edge المتلقين للمعلومات، فتأكد من أنه يمكنهم الوصول إلى mcr.microsoft.com/azureiotedge-diagnostics:latestأو الحصول على صورة الحاوية في سجل الحاوية الخاص بك.

التحقق من الاتصال من تابع إلى أصل

  1. تحقق من اتصال TLS/SSL من التابع إلى الأصل عن طريق تشغيل الأمر التالي openssl على الجهاز التابع. استبدل <parent hostname> بعنوان FQDN أو IP الأصل.

    echo | openssl s_client -connect <parent hostname>:8883 2>/dev/null | openssl x509 -text
    

    يجب أن يرجع الأمر سلسلة الشهادات مشابهة للمثال التالي.

    azureUser@child-vm:~$ echo | openssl s_client -connect 10.0.0.4:8883 2>/dev/null | openssl x509 -text
    
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 0 (0x0)
            Signature Algorithm: sha256WithRSAEncryption
            Issuer: CN = gateway.ca
            Validity
                Not Before: Apr 27 16:25:44 2022 GMT
                Not After : May 26 14:43:24 2022 GMT
            Subject: CN = 10.0.0.4
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    RSA Public-Key: (2048 bit)
                    Modulus:
                        00:b2:a6:df:d9:91:43:4e:77:d8:2c:2a:f7:01:b1:
                        ...
                        33:bd:c8:f0:de:07:36:2c:0d:06:9e:89:22:95:5e:
                        3b:43
                    Exponent: 65537 (0x10001)
            X509v3 extensions:
                X509v3 Extended Key Usage:
                    TLS Web Server Authentication
                X509v3 Subject Alternative Name:
                    DNS:edgehub, IP Address:10.0.0.4
        Signature Algorithm: sha256WithRSAEncryption
             76:d4:5b:4a:d5:c4:80:7d:32:bc:c0:a8:ce:4f:69:5d:4d:ee:
             ...
        ```
    
        The `Subject: CN = ` value should match the **hostname** parameter specified in the parent's `config.toml` configuration file.
    
        If the command times out, there may be blocked ports between the child and parent devices. Review the network configuration and settings for the devices.
    
    

عزل الشبكة لأجهزة انتقال البيانات من الخادم

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

تسعى بعض بنيات الشبكة، مثل تلك التي تتبع معيار ISA-95، إلى تقليل عدد اتصالات الإنترنت. في هذه السيناريوهات، يمكنك تكوين أجهزة IoT Edge المتلقية للمعلومات دون اتصال مباشر بالإنترنت. بالإضافة إلى توجيه اتصالات IoT Hub من خلال جهاز البوابة الخاص بها، يمكن لأجهزة IoT Edge المتلقية للمعلومات الاعتماد على جهاز البوابة لجميع الاتصالات السحابية.

يتطلب تكوين الشبكة هذا أن يكون لجهاز IoT Edge فقط في الطبقة العليا من التسلسل الهرمي للبوابة اتصالات مباشرة بالسحابة. يمكن لأجهزة IoT Edge في الطبقات السفلية الاتصال فقط بجهازها الأصل أو أي أجهزة تابعة. تمكن الوحدات الخاصة على أجهزة البوابة هذا السيناريو، بما في ذلك:

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

  • يمكن نشر وحدة سجل Docker على بوابة IoT Edge في الطبقة العلوية من التسلسل الهرمي للبوابة. هذه الوحدة النمطية مسؤولة عن استرداد صور الحاوية وتخزينها مؤقتا نيابة عن جميع أجهزة IoT Edge في الطبقات السفلية. البديل لنشر هذه الوحدة النمطية في الطبقة العليا هو استخدام سجل محلي، أو لتحميل صور الحاوية يدويا على الأجهزة وتعيين نهج سحب الوحدة النمطية إلى أبدا.

  • يمكن نشر Azure Blob Storage على IoT Edge على بوابة IoT Edge في الطبقة العلوية من التسلسل الهرمي للبوابة. هذه الوحدة النمطية مسؤولة عن تحميل الكائنات الثنائية كبيرة الحجم نيابة عن جميع أجهزة IoT Edge في الطبقات السفلية. تتيح القدرة على تحميل الكائنات الثنائية كبيرة الحجم أيضا وظائف مفيدة لاستكشاف الأخطاء وإصلاحها لأجهزة IoT Edge في الطبقات السفلية، مثل تحميل سجل الوحدة النمطية ودعم تحميل الحزمة.

تكوين شبكة الاتصال

لكل جهاز بوابة في الطبقة العليا، يحتاج مشغلو الشبكة إلى:

  • توفير عنوان IP ثابت أو اسم مجال مؤهل بالكامل (FQDN).

  • تخويل الاتصالات الصادرة من عنوان IP هذا إلى اسم مضيف Azure IoT Hub عبر المنفذين 443 (HTTPS) و5671 (AMQP).

  • تخويل الاتصالات الصادرة من عنوان IP هذا إلى اسم مضيف Azure Container Registry عبر المنفذ 443 (HTTPS).

    يمكن لوحدة وكيل واجهة برمجة التطبيقات معالجة الاتصالات بسجل حاوية واحد فقط في كل مرة. نوصي بتخزين جميع صور الحاوية، بما في ذلك الصور العامة التي يوفرها Microsoft Container Registry (mcr.microsoft.com)، في سجل الحاوية الخاص بك.

لكل جهاز بوابة في طبقة أقل، يحتاج مشغلو الشبكة إلى:

  • توفير عنوان IP ثابت.
  • تخويل الاتصالات الصادرة من عنوان IP هذا إلى عنوان IP الخاص بالبوابة الأصل عبر المنفذين 443 (HTTPS) و5671 (AMQP).

نشر الوحدات النمطية إلى أجهزة الطبقة العليا

يحتوي جهاز IoT Edge في الطبقة العليا من التسلسل الهرمي للبوابة على مجموعة من الوحدات النمطية المطلوبة التي يجب نشرها عليه، بالإضافة إلى أي وحدات حمل عمل يمكنك تشغيلها على الجهاز.

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

  1. في مدخل Microsoft Azure، انتقل إلى مركز IoT الخاص بك.

  2. حدد IoT Edge من قائمة التنقل.

  3. حدد جهاز الطبقة العليا الذي تقوم بتكوينه من قائمة أجهزة IoT Edge.

  4. حدد Set modules.

  5. في قسم وحدات IoT Edge، حدد Add ثم اختر Marketplace module.

  6. ابحث عن وحدة وكيل واجهة برمجة تطبيقات IoT Edge وحددها.

  7. حدد اسم وحدة وكيل واجهة برمجة التطبيقات من قائمة الوحدات النمطية المنشورة وقم بتحديث إعدادات الوحدة النمطية التالية:

    1. في علامة التبويب Environment variables ، قم بتحديث قيمة NGINX_DEFAULT_PORT إلى 443.

    2. في علامة التبويب Container create options ، قم بتحديث روابط المنفذ إلى المنفذ المرجعي 443.

      {
        "HostConfig": {
          "PortBindings": {
            "443/tcp": [
              {
                "HostPort": "443"
              }
            ]
          }
        }
      }
      

    تقوم هذه التغييرات بتكوين وحدة وكيل واجهة برمجة التطبيقات للاستماع إلى المنفذ 443. لمنع تضارب ربط المنفذ، تحتاج إلى تكوين وحدة edgeHub النمطية لعدم الاستماع إلى المنفذ 443. بدلا من ذلك، ستقوم وحدة وكيل واجهة برمجة التطبيقات بتوجيه أي حركة مرور edgeHub على المنفذ 443.

  8. حدد وقت التشغيل الإعدادات وابحث عن خيارات إنشاء الوحدة النمطية edgeHub. احذف ربط المنفذ للمنفذ 443، مع ترك روابط المنفذين 5671 و8883.

    {
      "HostConfig": {
        "PortBindings": {
          "5671/tcp": [
            {
              "HostPort": "5671"
            }
          ],
          "8883/tcp": [
            {
              "HostPort": "8883"
            }
          ]
        }
      }
    }
    
  9. حدد حفظ لحفظ التغييرات التي أجريتها على إعدادات وقت التشغيل.

  10. حدد إضافة مرة أخرى، ثم اختر وحدة IoT Edge.

  11. قم بتوفير القيم التالية لإضافة وحدة تسجيل Docker إلى النشر الخاص بك:

    1. اسم وحدة IoT Edge:registry

    2. في علامة التبويب Module settings ، Image URI: registry:latest

    3. في علامة التبويب Environment variables ، أضف متغيرات البيئة التالية:

      • الاسم: REGISTRY_PROXY_REMOTEURLالقيمة: عنوان URL لسجل الحاوية الذي تريد تعيين وحدة التسجيل هذه إليه. على سبيل المثال، ⁧https://myregistry.azurecr⁩.

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

      • الاسم: REGISTRY_PROXY_USERNAMEالقيمة: اسم المستخدم للمصادقة على سجل الحاوية.

      • الاسم: REGISTRY_PROXY_PASSWORDالقيمة: كلمة المرور للمصادقة على سجل الحاوية.

    4. في علامة التبويب Container create options ، الصق:

      {
          "HostConfig": {
              "PortBindings": {
                  "5000/tcp": [
                      {
                          "HostPort": "5000"
                      }
                  ]
              }
          }
      }
      
  12. حدد إضافة لإضافة الوحدة النمطية إلى النشر.

  13. حدد Next: Routes للانتقال إلى الخطوة التالية.

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

    1. الاسم: Route
    2. القيمة: FROM /messages/* INTO $upstream
  15. حدد Review + create للانتقال إلى الخطوة الأخيرة.

  16. حدد إنشاء للنشر على جهازك.

نشر الوحدات النمطية على أجهزة الطبقة السفلية

تحتوي أجهزة IoT Edge في الطبقات السفلية من التسلسل الهرمي للبوابة على وحدة نمطية واحدة مطلوبة يجب نشرها عليها، بالإضافة إلى أي وحدات حمل عمل يمكنك تشغيلها على الجهاز.

سحب صورة حاوية التوجيه

قبل مناقشة وحدة الوكيل المطلوبة لأجهزة IoT Edge في التسلسلات الهرمية للبوابة، من المهم فهم كيفية حصول أجهزة IoT Edge في الطبقات السفلية على صور الوحدة النمطية الخاصة بها.

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

على سبيل المثال، بدلا من استدعاء mcr.microsoft.com/azureiotedge-api-proxy:1.1، يجب أن تستدعي أجهزة الطبقة السفلية $upstream:443/azureiotedge-api-proxy:1.1.

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

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

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

تمهيد تشغيل عامل IoT Edge

عامل IoT Edge هو مكون وقت التشغيل الأول الذي يبدأ على أي جهاز IoT Edge. تحتاج إلى التأكد من أن أي أجهزة IoT Edge المتلقين للمعلومات يمكنها الوصول إلى صورة الوحدة النمطية edgeAgent عند بدء تشغيلها، ومن ثم يمكنهم الوصول إلى عمليات النشر وبدء بقية صور الوحدة النمطية.

عند الانتقال إلى ملف التكوين على جهاز IoT Edge لتوفير معلومات المصادقة والشهادات واسم المضيف الأصل، قم أيضا بتحديث صورة حاوية edgeAgent.

إذا تم تكوين جهاز بوابة المستوى الأعلى لمعالجة طلبات صورة الحاوية، فاستبدل mcr.microsoft.com باسم المضيف الأصل ومنفذ الاستماع لوكيل واجهة برمجة التطبيقات. في بيان النشر، يمكنك استخدام $upstream كاختصار، ولكن يتطلب ذلك وحدة edgeHub لمعالجة التوجيه ولم تبدأ هذه الوحدة في هذه المرحلة. على سبيل المثال:

[agent]
name = "edgeAgent"
type = "docker"

[agent.config]
image: "{Parent FQDN or IP}:443/azureiotedge-agent:1.2"

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

تكوين وقت التشغيل ونشر وحدة الوكيل

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

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

  1. في مدخل Microsoft Azure، انتقل إلى مركز IoT الخاص بك.

  2. حدد IoT Edge من قائمة التنقل.

  3. حدد جهاز الطبقة السفلية الذي تقوم بتكوينه من قائمة أجهزة IoT Edge.

  4. حدد Set modules.

  5. في قسم وحدات IoT Edge، حدد Add ثم اختر Marketplace module.

  6. ابحث عن وحدة وكيل واجهة برمجة تطبيقات IoT Edge وحددها.

  7. حدد اسم وحدة وكيل واجهة برمجة التطبيقات من قائمة الوحدات النمطية المنشورة وقم بتحديث إعدادات الوحدة النمطية التالية:

    1. في علامة التبويب Module settings ، قم بتحديث قيمة Image URI. ( قم ب‏‏استبدال mcr.microsoft.com بـ $upstream:443)

    2. في علامة التبويب Environment variables ، قم بتحديث قيمة NGINX_DEFAULT_PORT إلى 443.

    3. في علامة التبويب Container create options ، قم بتحديث روابط المنفذ إلى المنفذ المرجعي 443.

      {
        "HostConfig": {
          "PortBindings": {
            "443/tcp": [
              {
                "HostPort": "443"
              }
            ]
          }
        }
      }
      

    تقوم هذه التغييرات بتكوين وحدة وكيل واجهة برمجة التطبيقات للاستماع إلى المنفذ 443. لمنع تضارب ربط المنفذ، تحتاج إلى تكوين وحدة edgeHub النمطية لعدم الاستماع إلى المنفذ 443. بدلا من ذلك، ستقوم وحدة وكيل واجهة برمجة التطبيقات بتوجيه أي حركة مرور edgeHub على المنفذ 443.

  8. حدد وقت التشغيل الإعدادات.

  9. تحديث إعدادات الوحدة النمطية edgeHub:

    1. في حقل الصورة ، استبدل mcr.microsoft.com ب $upstream:443.
    2. في الحقل Create options ، احذف ربط المنفذ للمنفذ 443، مع ترك روابط المنفذين 5671 و8883.
    {
      "HostConfig": {
        "PortBindings": {
          "5671/tcp": [
            {
              "HostPort": "5671"
            }
          ],
          "8883/tcp": [
            {
              "HostPort": "8883"
            }
          ]
        }
      }
    }
    
  10. تحديث إعدادات الوحدة النمطية edgeAgent:

    1. في حقل الصورة ، استبدل mcr.microsoft.com ب $upstream:443.
  11. حدد حفظ لحفظ التغييرات التي أجريتها على إعدادات وقت التشغيل.

  12. حدد Next: Routes للانتقال إلى الخطوة التالية.

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

    1. الاسم: Route
    2. القيمة: FROM /messages/* INTO $upstream
  14. حدد Review + create للانتقال إلى الخطوة الأخيرة.

  15. حدد إنشاء للنشر على جهازك.

دمج Microsoft Defender ل IoT مع بوابة IoT Edge

يمكن استخدام الأجهزة الطرفية لدمج عامل Microsoft Defender for IoT الصغير مع بوابة IoT Edge باستخدام وكيل الجهاز الطرفي.

تعرف على المزيد حول Defender for IoT micro agent.

لدمج Microsoft Defender for IoT مع IoT Edge باستخدام وكيل الجهاز الطرفي:

  1. سجّل الدخول إلى مدخل Azure.

  2. انتقل إلى IoTHubDevice>Your Hub>managementDevices>

  3. حدد الجهاز الخاص بك.

    Screenshot showing where your device is located for selection.

  4. حدد الوحدة النمطية المزدوجة DefenderIotMicroAgent التي قمت بإنشائها من هذه الإرشادات.

    Screenshot showing the location of the DefenderIotMicroAgent.

  5. حدد الزر لنسخ سلسلة الاتصال (المفتاح الأساسي).

  6. الصق سلسلة الاتصال في تطبيق تحرير نص، وأضف GatewayHostName إلى السلسلة. على سبيل المثال، ⁧HostName=nested11.azure-devices.net;DeviceId=leaf1;ModuleId=module1;SharedAccessKey=xxx;GatewayHostName=10.16.7.4⁩.

  7. افتح محطة طرفية على الجهاز الطرفي.

  8. استخدم الأمر التالي لوضع سلسلة الاتصال المشفرة في utf-8 في دليل وكيل Defender for Cloud في الملف connection_string.txt في المسار التالي: /etc/defender_iot_micro_agent/connection_string.txt

    sudo bash -c 'echo "<connection string>" > /etc/defender_iot_micro_agent/connection_string.txt'
    

    connection_string.txt يجب أن يكون موجودا الآن في موقع /etc/defender_iot_micro_agent/connection_string.txtالمسار التالي .

  9. إعادة تشغيل الخدمة باستخدام هذا الأمر:

    sudo systemctl restart defender-iot-micro-agent.service 
    
  10. انتقل مرة أخرى إلى الجهاز.

    Screenshot showing how to navigate back to your device.

  11. قم بتمكين الاتصال بمركز IoT، وحدد أيقونة الترس.

    Screenshot showing what to select to set a parent device.

  12. حدد الجهاز الأصل من القائمة المعروضة.

  13. تأكد من فتح المنفذ 8883 (MQTT) بين الجهاز الطرفي وجهاز IoT Edge.

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

كيف يمكن استخدام جهاز IoT Edge كبوابة

تكوين وحدة وكيل واجهة برمجة التطبيقات لسيناريو التسلسل الهرمي للبوابة