إنشاء وتوفير أجهزة IoT Edge على نطاق واسع باستخدام TPM على Linux

ينطبق على: أيقونة نعم IoT Edge 1.1

هام

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

توفر هذه المقالة إرشادات للتزويد التلقائي لجهاز Azure IoT Edge لنظام Linux باستخدام وحدة نمطية للنظام الأساسي الموثوق به (TPM). يمكنك توفير أجهزة IoT Edge تلقائيا مع خدمة توفير جهاز Azure IoT Hub. إذا لم تكن على دراية بعملية التوفير التلقائي، فراجع نظرة عامة على التوفير قبل المتابعة.

توضح هذه المقالة منهجيتين. حدد تفضيلك استنادا إلى بنية الحل الخاص بك:

  • التزويد التلقائي لجهاز Linux مع أجهزة TPM الفعلية. مثال على ذلك هو Infineon OPTIGA™ TPM SLB 9670.
  • التزويد التلقائي لجهاز Linux الظاهري (VM) مع TPM محاكاة يعمل على جهاز تطوير Windows مع تمكين Hyper-V. نوصي باستخدام هذه المنهجية فقط كسيناريو اختبار. لا يوفر TPM المحاكي نفس الأمان مثل TPM الفعلي.

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

المهام هي كما يلي:

  1. استرداد معلومات التوفير ل TPM الخاص بك.
  2. إنشاء تسجيل فردي لجهازك في مثيل خدمة توفير جهاز IoT Hub.
  3. تثبيت وقت تشغيل IoT Edge وتوصيل الجهاز بمركز IoT.

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

موارد السحابة

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

متطلبات الجهاز

جهاز Linux فعلي ليكون جهاز IoT Edge.

إذا كنت الشركة المصنعة للجهاز، فراجع إرشادات حول دمج TPM في عملية التصنيع.

إشعار

مطلوب TPM 2.0 عند استخدام إثبات TPM مع خدمة توفير الجهاز.

يمكنك فقط إنشاء عمليات تسجيل فردية، وليس جماعية، لتسجيلات خدمة توفير الجهاز عند استخدام TPM.

إعداد جهازك

إذا كنت تستخدم جهاز Linux فعلي مع TPM، فلا توجد خطوات إضافية لإعداد جهازك.

أنت مستعد للمتابعة.

استرداد معلومات التوفير ل TPM الخاص بك

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

  1. سجل الدخول إلى جهازك، ثم اتبع الخطوات الواردة في إعداد بيئة تطوير Linux لتثبيت وبناء SDK لجهاز Azure IoT ل C.

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

    cd azure-iot-sdk-c/cmake
    cmake -Duse_prov_client:BOOL=ON ..
    cd provisioning_client/tools/tpm_device_provision
    make
    sudo ./tpm_device_provision
    
  3. تعرض نافذة الإخراج معرف التسجيل للجهاز ومفتاح المصادقة. انسخ هذه القيم لاستخدامها لاحقا عند إنشاء تسجيل فردي لجهازك في خدمة توفير الجهاز.

بعد أن يكون لديك معرف التسجيل ومفتاح المصادقة، تكون مستعدا للمتابعة.

تلميح

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

إنشاء تسجيل خدمة توفير الجهاز

استخدم معلومات التوفير الخاصة ب TPM لإنشاء تسجيل فردي في خدمة توفير الجهاز.

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

تلميح

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

  1. في مدخل Microsoft Azure، انتقل إلى مثيل خدمة توفير جهاز IoT Hub.

  2. ضمن Settings، حدد Manage enrollments.

  3. حدد Add individual enrollment، ثم أكمل الخطوات التالية لتكوين التسجيل:

    1. بالنسبة إلى آلية، حدد TPM.

    2. قم بتوفير مفتاح المصادقة ومعرف التسجيل الذي نسخته من الجهاز الظاهري أو الجهاز الفعلي.

    3. قم بتوفير معرف لجهازك إذا أردت ذلك. إذا لم توفر معرف جهاز، يتم استخدام معرف التسجيل.

    4. حدد True للإعلان عن أن الجهاز الظاهري أو الجهاز الفعلي هو جهاز IoT Edge.

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

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

    7. حدد حفظ.

الآن بعد وجود تسجيل لهذا الجهاز، يمكن لوقت تشغيل IoT Edge توفير الجهاز تلقائيا أثناء التثبيت.

تثبيت IoT Edge

في هذا القسم، يمكنك إعداد جهاز Linux الظاهري أو الجهاز الفعلي ل IoT Edge. بعد ذلك، يمكنك تثبيت IoT Edge.

قم بتشغيل الأوامر التالية لإضافة مستودع الحزمة ثم إضافة مفتاح توقيع حزمة Microsoft إلى قائمة المفاتيح الموثوق بها.

هام

في 30 يونيو 2022 تم إيقاف Raspberry Pi OS Stretch من قائمة دعم نظام التشغيل من المستوى 1. لتجنب الثغرات الأمنية المحتملة، قم بتحديث نظام التشغيل المضيف إلى Bullseye.

يمكن إجراء التثبيت باستخدام بعض الأوامر. افتح محطة طرفية ثم قم بتشغيل الأوامر التالية:

  • 20.04:

    wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    
  • 18.04:

    wget https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    

إشعار

تخضع حزم برامج Azure IoT Edge لشروط الترخيص الموجودة في كل حزمة LICENSE (usr/share/doc/{package-name}أو الدليل). اقرأ شروط الترخيص قبل استخدام الحزمة. تركيب واستخدامك للحزمة يشكل قبولك لهذه الشروط. في حال عدم موافقتك على شروط الترخيص، فلا تستخدم هذه الحزمة.

ثبِّت محرك حاوية

تعتمد Azure IoT Edge على وقت تشغيل حاوية متوافق مع OCI. بالنسبة لسيناريوهات الإنتاج، نوصي باستخدام محرك Moby. محرك Moby هو محرك الحاوية الوحيد المدعوم رسميا مع IoT Edge. تتوافق صور حاوية Docker CE/EE مع وقت تشغيل Moby.

ثبِّت محرك Moby.

sudo apt-get update; \
  sudo apt-get install moby-engine

بمجرد تثبيت محرك Moby بنجاح، قم بتكوينه لاستخدام local برنامج تشغيل التسجيل كآلية تسجيل. لمعرفة المزيد حول تكوين التسجيل، راجع قائمة التحقق من نشر الإنتاج.

  • قم بإنشاء أو فتح ملف تكوين Docker daemon في /etc/docker/daemon.json.

  • قم بتعيين برنامج تشغيل التسجيل الافتراضي إلى local برنامج تشغيل التسجيل كما هو موضح في المثال أدناه.

       {
          "log-driver": "local"
       }
    
  • أعد تشغيل محرك الحاوية حتى تسري التغييرات.

    sudo systemctl restart docker
    

    تلميح

    إذا تلقيت أخطاء عند تثبيت محرك حاوية Moby، فتحقق من توافق Linux kernel ل Moby. تشحن بعض الشركات المُصنّعة للأجهزة المضمنة صور الأجهزة التي تحتوي على أنوية Linux مخصصة دون الميزات المطلوبة لتوافق محرك الحاوية. شغَّل الأمر التالي، والذي يستخدم البرنامج النصي check-config الذي يزوده Moby، للتحقق من تكوين kernel خاصتك:

    curl -ssl https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh -o check-config.sh
    chmod +x check-config.sh
    ./check-config.sh
    

    في إخراج البرنامج النصي، تحقق من أن جميع العناصر الموجودة تحت Generally Necessary و Network Drivers ممكنة. إذا كنت تفتقد إلى الميزات، فقم بتمكينها عن طريق إعادة إنشاء نواة من المصدر وتحديد الوحدات النمطية المقترنة لتضمينها في kernel .config المناسب. وبالمثل، إذا كنت تستخدم منشئ تكوين kernel مثل defconfig أو menuconfig، فابحث عن الميزات المعنية وقم بتمكينها وأعد بناء النواة وفقا لذلك. بعد نشر نواة المعدلة حديثا، قم بتشغيل البرنامج النصي check-config مرة أخرى للتحقق من تمكين جميع الميزات المطلوبة بنجاح.

قم بتثبيت وقت تشغيل IoT Edge

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

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

تثبيت إصدار IoT Edge 1.1.* مع حزمة libiothsm-std :

sudo apt-get update; \
  sudo apt-get install iotedge

إشعار

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

تزويد الجهاز بهويته السحابية

بعد تثبيت وقت التشغيل على جهازك، قم بتكوين الجهاز بالمعلومات التي يستخدمها للاتصال بخدمة توفير الجهاز وIoT Hub.

  1. تعرف على نطاق معرف خدمة توفير الجهاز ومعرف تسجيل الجهاز اللذين تم جمعهما مسبقا.

  2. افتح ملف التكوين على جهاز IoT Edge.

    sudo nano /etc/iotedge/config.yaml
    
  3. ابحث عن قسم تكوين التزويد في الملف. قم بإلغاء التعليق على خطوط توفير TPM، وتأكد من التعليق على أي أسطر تزويد أخرى.

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

    # DPS TPM provisioning configuration
    provisioning:
      source: "dps"
      global_endpoint: "https://global.azure-devices-provisioning.net"
      scope_id: "SCOPE_ID_HERE"
      attestation:
        method: "tpm"
        registration_id: "REGISTRATION_ID_HERE"
    
    # always_reprovision_on_startup: true
    # dynamic_reprovisioning: false
    
  4. قم بتحديث قيم scope_id و registration_id مع خدمة توفير الجهاز ومعلومات الجهاز. scope_id القيمة هي نطاق المعرف من صفحة نظرة عامة على مثيل خدمة توفير الجهاز.

  5. اختياريا، استخدم الأسطر always_reprovision_on_startup أو dynamic_reprovisioning لتكوين سلوك إعادة توفير جهازك. إذا تم تعيين جهاز لإعادة التزويد عند بدء التشغيل، فسيحاول دائما تزويده ب DPS أولا ثم الرجوع إلى النسخ الاحتياطي للتوفير إذا فشل ذلك. إذا تم تعيين جهاز على إعادة توفير نفسه ديناميكيا، فسيعاد تشغيل IoT Edge (وجميع الوحدات النمطية) وإعادة التوفير إذا تم الكشف عن حدث إعادة توفير، مثل ما إذا تم نقل الجهاز من مركز IoT إلى آخر. على وجه التحديد، يتحقق IoT Edge من bad_credential SDK أو device_disabled أخطاء منه للكشف عن حدث إعادة التزويد. لتشغيل هذا الحدث يدويا، قم بتعطيل الجهاز في IoT Hub. لمزيد من المعلومات، راجع مفاهيم إعادة توفير جهاز IoT Hub.

  6. احفظ الملف وأغلقه.

منح IoT Edge حق الوصول إلى TPM

يحتاج وقت تشغيل IoT Edge إلى الوصول إلى TPM لتوفير جهازك تلقائيا.

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

  1. أنشئ قاعدة جديدة ستمنح وقت تشغيل IoT Edge حق الوصول إلى tpm0 و tpmrm0.

    sudo touch /etc/udev/rules.d/tpmaccess.rules
    
  2. افتح ملف القواعد.

    sudo nano /etc/udev/rules.d/tpmaccess.rules
    
  3. انسخ معلومات الوصول التالية إلى ملف القواعد. tpmrm0 قد لا يكون موجودا على الأجهزة التي تستخدم نواة أقدم من 4.12. ستتجاهل الأجهزة التي لا تحتوي tpmrm0 على هذه القاعدة بأمان.

    # allow iotedge access to tpm0
    KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="iotedge", MODE="0600"
    KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="iotedge", MODE="0600"
    
  4. حفظ الملف والخروج منه.

  5. udev تشغيل النظام لتقييم القاعدة الجديدة.

    /bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrm
    
  6. تحقق من تطبيق القاعدة بنجاح.

    ls -l /dev/tpm*
    

    يظهر الإخراج الناجح كما يلي:

    crw------- 1 iotedge root 10, 224 Jul 20 16:27 /dev/tpm0
    crw------- 1 iotedge root 10, 224 Jul 20 16:27 /dev/tpmrm0
    

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

  7. أعد تشغيل وقت تشغيل IoT Edge بحيث يلتقط جميع تغييرات التكوين التي أجريتها على الجهاز.

    sudo systemctl restart iotedge
    

التحقق من التثبيت الناجح

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

sudo systemctl restart iotedge

تحقق لمعرفة أن وقت تشغيل IoT Edge قيد التشغيل.

sudo systemctl status iotedge

فحص سجلات البرنامج الخفي.

journalctl -u iotedge --no-pager --no-full

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

sudo systemctl daemon-reload

أو حاول إعادة تشغيل الجهاز الظاهري لمعرفة ما إذا كانت التغييرات سارية المفعول على بداية جديدة.

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

سرد الوحدات النمطية قيد التشغيل.

iotedge list

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

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

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

تعرف على كيفية نشر ومراقبة وحدات IoT Edge على نطاق واسع باستخدام مدخل Azure أو Azure CLI.