كيفية توفير إيجارات متعددة

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

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

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

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

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

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

هام

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

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

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

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

هام

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

  1. في Azure Cloud Shell، قم بإنشاء مجموعة موارد باستخدام الأمر "إنشاء مجموعة az" التالي:

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

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

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

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

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

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

إنشاء التسجيل متعدد المستأجرين

في هذا القسم، ستنشئ مجموعة تسجيل جديدة للأجهزة المستأجرة.

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

  1. في مدخل Azure، حدد خدمة تزويد الجهاز.

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

  3. حدد + إضافة مجموعة تسجيل.

  4. في الصفحة إضافة مجموعة تسجيل ، أدخل المعلومات التالية:

    اسم المجموعة: أدخل contoso-us-devices. اسم مجموعة التسجيل عبارة عن سلسلة غير حساسة لحالة الأحرف (يصل طولها إلى 128 حرفا) من الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة: '-', , , '_''.'':'. يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-').

    نوع التصديق: حدد مفتاح متماثل.

    إنشاء مفاتيح تلقائية: يجب تحديد خانة الاختيار هذه بالفعل.

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

  5. حدد ربط مركز إنترنت الأشياء جديد

    Add multitenant enrollment group for symmetric key attestation.

  6. في الصفحة إضافة ارتباط إلى مركز إنترنت الأشياء ، أدخل المعلومات التالية:

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

    محور إنترنت الأشياء: حدد محور إنترنت الأشياء الذي أنشأته لموقع Eastus.

    سياسة الوصول: حدد iothubowner.

    Link the regional IoT hubs with the provisioning service.

  7. حدد ⁧⁩حفظ⁧⁩.

  8. كرر الخطوات من 5 إلى 7 لمركز إنترنت الأشياء الثاني الذي قمت بإنشائه لموقع westgus .

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

    Select the linked IoT hubs.

  10. تحديد الحفظ

  11. حدد contoso-us-devices في قائمة مجموعات التسجيل.

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

    Copy the primary key.

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

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

لتسهيل عملية التنظيف، ستتم إضافة هذه الأجهزة الظاهرية إلى نفس مجموعة الموارد التي تحتوي على محاور إنترنت الأشياء التي تم إنشاؤها، وهي مجموعة موارد contoso-us-resource-group. ومع ذلك ، سيتم تشغيل VMs في مناطق منفصلة (غرب الولايات المتحدة 2 وشرق الولايات المتحدة).

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

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

    --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: أدخل اسما فريدا لجهاز West US 2 الإقليمي VM.

    --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. الاتصال إلى أحد الأجهزة الظاهرية الإقليمية في كل غلاف باستخدام 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 C SDK على كل من VMs. استخدم العلامة التي وجدتها في الخطوة السابقة كقيمة -bللمعلمة:

    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 و Westus 2:

  1. قم بإنشاء مفتاحك الفريد باستخدام openssl. ستستخدم البرنامج النصي Bash shell التالي (استبدله بالمفتاح الأساسي لمجموعة التسجيل الذي نسخته سابقا واستبدله {contoso-simdevice}{primary-key} بمعرف التسجيل الفريد الخاص بك لكل جهاز. معرف التسجيل عبارة عن سلسلة غير حساسة لحالة الأحرف (يصل طولها إلى 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 لكل من الأجهزة الظاهرية الإقليمية.

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

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

    Extract Device Provisioning Service endpoint information from the portal blade.

  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 على كلا الجهازين الظاهريين لمحاكاة جهاز مستأجر من كل منطقة. لاحظ أنه يتم تخصيص كل جهاز لمركز إنترنت الأشياء المستأجر الأقرب إلى مناطق الجهاز المحاكي.

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

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

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

    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:
    
    

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

    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. بعد لحظات قليلة، يتم حذف مجموعة الموارد وكافة الموارد المضمنة.

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

  • لمعرفة المزيد حول إعادة التوفير، راجع:
  • لمعرفة المزيد حول إلغاء التوفير، راجع