البرنامج التعليمي: توفير زمن الانتقال الجغرافي

يوضح هذا البرنامج التعليمي كيفية توفير أجهزة مفاتيح متماثلة متعددة محاكاة بشكل آمن لمجموعة من مراكز IoT باستخدام نهج التخصيص. تدعم خدمة توفير جهاز IoT Hub (DPS) سيناريوهات التخصيص المختلفة من خلال نهج التخصيص المضمنة ودعمها لنهج التخصيص المخصصة.

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

يستخدم هذا البرنامج التعليمي عينة جهاز محاكاة من Azure IoT C SDK لتوضيح كيفية توفير الأجهزة عبر المناطق. ستقوم بتنفيذ الخطوات التالية في هذا البرنامج التعليمي:

  • استخدم Azure CLI لإنشاء مركزي IoT إقليميين (غرب الولايات المتحدة 2 وشرق الولايات المتحدة)
  • إنشاء تسجيل يقوم بتوفير الأجهزة استنادا إلى الموقع الجغرافي (أقل زمن انتقال)
  • استخدم Azure CLI لإنشاء جهازين ظاهريين إقليميين يعملان بنظام Linux للعمل كأجهزة في نفس المناطق (غرب الولايات المتحدة 2 وشرق الولايات المتحدة)
  • إعداد بيئة التطوير ل Azure IoT C SDK على كل من أجهزة Linux الظاهرية
  • محاكاة الأجهزة والتحقق من توفيرها إلى مركز IoT في أقرب منطقة.

هام

قد تفرض بعض المناطق، من وقت لآخر، قيودا على إنشاء الأجهزة الظاهرية. في وقت كتابة هذا الدليل، سمحت منطقتا westus2 و eastus بإنشاء الأجهزة الظاهرية. إذا لم تتمكن من الإنشاء في أي من هاتين المنطقتين، يمكنك تجربة منطقة مختلفة. لمعرفة المزيد حول اختيار مناطق Azure الجغرافية عند إنشاء الأجهزة الظاهرية، راجع المناطق للأجهزة الظاهرية في Azure

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

إنشاء مركزي IoT إقليميين

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

هام

يوصى باستخدام نفس مجموعة الموارد لجميع الموارد التي تم إنشاؤها في هذا البرنامج التعليمي. سيؤدي ذلك إلى تسهيل عملية التنظيف بعد الانتهاء.

  1. في Azure Cloud Shell، أنشئ مجموعة موارد باستخدام الأمر التالي az group create :

    az group create --name contoso-us-resource-group --location eastus
    
  2. أنشئ مركز IoT في موقع eastus، وأضفه إلى مجموعة الموارد التي أنشأتها باستخدام الأمر az iot hub create التالي (استبدل {unique-hub-name} باسمك الفريد):

    az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location eastus --sku S1
    

    ربما يستغرق هذا الأمر بضع دقائق حتى يكتمل.

  3. الآن، قم بإنشاء مركز IoT في موقع westus2، وأضفه إلى مجموعة الموارد التي قمت بإنشائها باستخدام الأمر az iot hub create التالي (استبدل {unique-hub-name} باسمك الفريد):

    az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location westus2 --sku S1
    

    ربما يستغرق هذا الأمر بضع دقائق حتى يكتمل.

إنشاء تسجيل لزمن الانتقال الجغرافي

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

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

  1. سجل الدخول إلى مدخل Microsoft Azure وانتقل إلى مثيل خدمة تزويد الأجهزة.

  2. حدد إدارة التسجيلات من قسم الإعدادات في قائمة التنقل.

  3. حدد Add enrollment group.

  4. في علامة التبويب Registration + provisioning في صفحة Add enrollment group ، قم بتوفير المعلومات التالية لتكوين تفاصيل مجموعة التسجيل:

    الحقل ‏‏الوصف
    شهاده حدد مفتاح متماثل كآلية التصديق.
    إعدادات المفتاح المتماثل حدد المربع إنشاء مفاتيح متماثلة تلقائيا.
    اسم المجموعة قم بتسمية مجموعتك contoso-us-devices، أو قم بتوفير اسم مجموعتك الخاصة. اسم مجموعة التسجيل عبارة عن سلسلة غير حساسة لحالة الأحرف (يصل طولها إلى 128 حرفا) من الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة: '-'، '.'، ، '_'. ':' يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-').
  5. حدد Next: IoT hubs.

  6. استخدم الخطوات التالية لإضافة مركزي IoT إلى مجموعة التسجيل:

    1. في علامة التبويب IoT hubs في صفحة Add enrollment group ، حدد Add link to IoT hub في قسم Target IoT hubs .

    2. في صفحة Add link to IoT hub ، حدد مركز IoT الذي قمت بإنشائه في منطقة eastus وعين له الوصول iothubowner .

    3. حدد حفظ.

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

    5. في القائمة المنسدلة Target IoT hubs ، حدد كلا من مراكز IoT.

  7. بالنسبة إلى نهج التخصيص، حدد أقل زمن انتقال.

  8. حدد "Review + create".

  9. في علامة التبويب Review + create ، تحقق من جميع القيم الخاصة بك ثم حدد Create.

  10. بمجرد إنشاء مجموعة التسجيل الخاصة بك، حدد اسمها contoso-us-devices من قائمة مجموعات التسجيل.

  11. انسخ Primary key. سيتم استخدام هذا المفتاح لاحقا لإنشاء مفاتيح جهاز فريدة لكلا الجهازين المحاكيين.

إنشاء أجهزة Linux ظاهرية إقليمية

في هذا القسم، يمكنك إنشاء جهازين ظاهريين إقليميين لنظام Linux (VMs)، أحدهما في غرب الولايات المتحدة 2 والآخر في شرق الولايات المتحدة 2. تقوم هذه الأجهزة الظاهرية بتشغيل عينة محاكاة الجهاز من كل منطقة لإظهار توفير الجهاز للأجهزة من كلتا المنطقتين.

لتسهيل عملية التنظيف، أضف هذه الأجهزة الظاهرية إلى نفس مجموعة الموارد التي تحتوي على مراكز IoT التي تم إنشاؤها، contoso-us-resource-group.

  1. في Azure Cloud Shell، قم بتشغيل الأمر التالي لإنشاء جهاز ظاهري لمنطقة شرق الولايات المتحدة بعد إجراء تغييرات المعلمة التالية في الأمر:

    --name: أدخل اسما فريدا لجهازك الإقليمي في شرق الولايات المتحدة .

    --admin-username: استخدم اسم مستخدم المسؤول الخاص بك.

    --admin-password: استخدم كلمة مرور المسؤول الخاصة بك.

    az vm create \
    --resource-group contoso-us-resource-group \
    --name ContosoSimDeviceEast \
    --location eastus \
    --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \
    --admin-username contosoadmin \
    --admin-password myContosoPassword2018 \
    --authentication-type password
    --public-ip-sku Standard
    

    سيستغرق هذا الأمر بضع دقائق ليكتمل.

  2. بمجرد اكتمال الأمر، انسخ قيمة publicIpAddress للجهاز الظاهري لمنطقة شرق الولايات المتحدة.

  3. في Azure Cloud Shell، قم بتشغيل الأمر لإنشاء جهاز ظاهري لمنطقة غرب الولايات المتحدة 2 بعد إجراء تغييرات المعلمة التالية في الأمر:

    --name: أدخل اسما فريدا لجهازك الإقليمي غرب الولايات المتحدة 2 .

    --admin-username: استخدم اسم مستخدم المسؤول الخاص بك.

    --admin-password: استخدم كلمة مرور المسؤول الخاصة بك.

    az vm create \
    --resource-group contoso-us-resource-group \
    --name ContosoSimDeviceWest2 \
    --location westus2 \
    --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \
    --admin-username contosoadmin \
    --admin-password myContosoPassword2018 \
    --authentication-type password
    --public-ip-sku Standard
    

    سيستغرق هذا الأمر بضع دقائق ليكتمل.

  4. بمجرد اكتمال الأمر، انسخ قيمة publicIpAddress لجهازك الظاهري لمنطقة غرب الولايات المتحدة 2.

  5. افتح اثنين من قذائف سطر الأوامر.

  6. الاتصال بأحد الأجهزة الظاهرية الإقليمية في كل shell باستخدام SSH.

    قم بتمرير اسم مستخدم المسؤول وعنوان IP العام الذي نسخته كمعلمات إلى SSH. أدخل كلمة مرور المسؤول عند مطالبتك.

    ssh contosoadmin@1.2.3.4
    
    contosoadmin@ContosoSimDeviceEast:~$
    
    ssh contosoadmin@5.6.7.8
    
    contosoadmin@ContosoSimDeviceWest:~$
    

إعداد بيئة تطوير Azure IoT C SDK

في هذا القسم، ستقوم باستنساخ Azure IoT C SDK على كل جهاز ظاهري. يحتوي SDK على عينة تحاكي توفير جهاز من كل منطقة.

لكل جهاز ظاهري:

  1. قم بتثبيت CMake وg++و gcc وGit باستخدام الأوامر التالية:

    sudo apt-get update
    sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-all
    
  2. ابحث عن اسم العلامة وانسخه لأحدث إصدار من SDK.

  3. استنساخ Azure IoT Device SDK ل C على كلا الجهازين الظاهريين. استخدم العلامة التي وجدتها في الخطوة السابقة كقيمة للمعلمة -b ، على سبيل المثال: lts_01_2023.

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    يجب أن تتوقع أن تستغرق هذه العملية عدة دقائق حتى تكتمل.

  4. إنشاء مجلد cmake جديد داخل المستودع والتغيير إلى هذا المجلد.

    mkdir ~/azure-iot-sdk-c/cmake
    cd ~/azure-iot-sdk-c/cmake
    
  5. قم بتشغيل الأمر التالي، الذي ينشئ إصدارا من SDK خاص بالنظام الأساسي لعميل التطوير الخاص بك:

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    
  6. بمجرد نجاح البنية، ستبدو أسطر الإخراج القليلة الأخيرة مشابهة للإخراج التالي:

    -- IoT Client SDK Version = 1.7.0
    -- Provisioning SDK Version = 1.7.0
    -- Looking for include file stdint.h
    -- Looking for include file stdint.h - found
    -- Looking for include file stdbool.h
    -- Looking for include file stdbool.h - found
    -- target architecture: x86_64
    -- Performing Test CXX_FLAG_CXX11
    -- Performing Test CXX_FLAG_CXX11 - Success
    -- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "1.1.1")
    -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so (found version "7.58.0")
    -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so
    -- target architecture: x86_64
    -- iothub architecture: x86_64
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/contosoadmin/azure-iot-sdk-c/azure-iot-sdk-c
    

اشتقاق مفاتيح جهاز فريدة

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

في هذا الجزء من البرنامج التعليمي، ستقوم بإنشاء مفتاح جهاز من المفتاح الرئيسي للمجموعة لحساب HMAC-SHA256 من معرف التسجيل الفريد للجهاز. سيتم بعد ذلك تحويل النتيجة إلى تنسيق Base64.

هام

لا تقم بتضمين المفتاح الرئيسي للمجموعة في التعليمات البرمجية لجهازك.

لكل من أجهزة eastus و westus2 :

  1. إنشاء مفتاحك الفريد باستخدام openssl. ستستخدم البرنامج النصي Bash shell التالي (استبدل {primary-key} بالمفتاح الأساسي لمجموعة التسجيل الذي نسخته سابقا واستبدله {contoso-simdevice}بمعرف التسجيل الفريد الخاص بك لكل جهاز. معرف التسجيل عبارة عن سلسلة غير حساسة لحالة الأحرف (يصل طولها إلى 128 حرفا) من الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة: '-'، ، '.'، '_'. ':' يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-').

    KEY={primary-key}
    REG_ID={contoso-simdevice}
    
    keybytes=$(echo $KEY | base64 --decode | xxd -p -u -c 1000)
    echo -n $REG_ID | openssl sha256 -mac HMAC -macopt hexkey:$keybytes -binary | base64
    
  2. سيخرج البرنامج النصي شيئا مثل المفتاح التالي:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    
  3. الآن كل جهاز لديه مفتاح الجهاز المشتق الخاص به ومعرف التسجيل الفريد لإجراء إثبات المفتاح المتماثل مع مجموعة التسجيل أثناء عملية التزويد.

محاكاة الأجهزة من كل منطقة

في هذا القسم، ستقوم بتحديث عينة توفير في Azure IoT C SDK لكلا الجهازين الظاهريين الإقليميين.

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

  1. في مدخل Microsoft Azure، حدد علامة التبويب Overview لخدمة إدارة الأجهزة الخاصة بك وقم بتدوين قيمة ID Scope.

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

  2. على كل من VMS، افتح ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c للتحرير.

    vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c
    
  3. على كلا الجهازين الظاهريين، ابحث عن id_scope الثابت، واستبدل القيمة بقيمة نطاق المعرف التي نسختها سابقا.

    static const char* id_scope = "0ne00002193";
    
  4. في كلا الجهازين الظاهريين، ابحث عن تعريف الدالة main() في نفس الملف. تأكد من hsm_type تعيين المتغير إلى SECURE_DEVICE_TYPE_SYMMETRIC_KEY كما هو موضح أدناه لمطابقة أسلوب إثبات مجموعة التسجيل.

    احفظ التغييرات التي أجريتها على الملفات على كلا الجهازين الظاهريين.

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    //hsm_type = SECURE_DEVICE_TYPE_X509;
    hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  5. على كلا الجهازين الظاهريين، ابحث عن الاستدعاء إلى prov_dev_set_symmetric_key_info() في prov_dev_client_sample.c الذي تم التعليق عليه.

    // Set the symmetric key if using they auth type
    //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
    

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

    شرق الولايات المتحدة:

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("contoso-simdevice-east", "p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=");
    

    غرب الولايات المتحدة:

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");
    
  6. على كلا الجهازين الظاهريين، احفظ الملف.

  7. على كلا الجهازين الظاهريين، انتقل إلى المجلد النموذجي الموضح أدناه، وقم بإنشاء النموذج.

    cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/
    cmake --build . --target prov_dev_client_sample --config Debug
    
  8. بمجرد نجاح البنية، قم بتشغيل prov_dev_client_sample.exe على كلا الجهازين الظاهريين لمحاكاة جهاز من كل منطقة. لاحظ أنه يتم تخصيص كل جهاز لمركز IoT الأقرب إلى منطقة الجهاز المحاكي.

    تشغيل المحاكاة:

    ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample
    

    مثال على الإخراج من الجهاز الظاهري لشرق الولايات المتحدة:

    contosoadmin@ContosoSimDeviceEast:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample
    Provisioning API Version: 1.2.9
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-east-hub.azure-devices.net, deviceId: contoso-simdevice-east
    Press enter key to exit:
    
    

    مثال على الإخراج من الجهاز الظاهري لغرب الولايات المتحدة:

    contosoadmin@ContosoSimDeviceWest:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample
    Provisioning API Version: 1.2.9
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-west-hub.azure-devices.net, deviceId: contoso-simdevice-west
    Press enter key to exit:
    

تنظيف الموارد

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

تفترض الخطوات هنا أنك قمت بإنشاء جميع الموارد في هذا البرنامج التعليمي كما هو موضح في نفس مجموعة الموارد المسماة contoso-us-resource-group.

هام

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

لحذف مجموعة الموارد حسب الاسم:

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. حدد Resource groups.

  3. في مربع النص Filter by name...، اكتب اسم مجموعة الموارد التي تحتوي على الموارد الخاصة بك، contoso-us-resource-group.

  4. على يمين مجموعة الموارد في قائمة النتائج، انقر فوق ... ثم حذف مجموعة الموارد.

  5. سيطلب منك تأكيد حذف مجموعة الموارد. اكتب اسم مجموعة الموارد مرة أخرى لتأكيده، واختر Delete. بعد لحظات قليلة، يتم حذف مجموعة الموارد وكافة الموارد المضمنة.

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

لمعرفة المزيد حول نهج التخصيص المخصصة، راجع