Бөлісу құралы:


Руководство. Подготовка к географической задержке

В этом руководстве показано, как безопасно подготовить несколько имитированных устройств симметричного ключа в группу Центр Интернета вещей с помощью политики выделения. Центр Интернета вещей служба подготовки устройств (DPS) поддерживает различные сценарии выделения с помощью встроенных политик выделения и поддержки пользовательских политик выделения.

Подготовка к задержке геолокации или географической задержки — это распространенный сценарий выделения. При перемещении устройства между расположениями задержка сети улучшается путем подготовки устройства к центру Интернета вещей, который ближе всего к каждому расположению. В этом случае для регистраций выбирается группа центров Интернета вещей, которые располагаются в разных регионах. Для этих регистраций выбрана встроенная политика распределения задержки с наименьшей задержкой . Эта политика заставляет службу подготовки устройств оценить задержку устройства и определить ближайший центр Интернета вещей из группы центров Интернета вещей.

В этом руководстве используется пример имитированного устройства из пакета SDK Для Интернета вещей Azure для демонстрации подготовки устройств в разных регионах. В этом руководстве описаны следующие действия.

  • Используйте Azure CLI для создания двух региональных центров Интернета вещей (западная часть США 2 и восточная часть США)
  • Создание регистрации, которая подготавливает устройства на основе географического расположения (наименьшая задержка)
  • Используйте Azure CLI для создания двух региональных виртуальных машин Linux для работы в качестве устройств в одном регионе (западная часть США 2 и восточная часть США)
  • Настройка среды разработки для пакета SDK для языка C Azure IoT на обеих виртуальных машинах Linux
  • Имитируйте устройства и убедитесь, что они подготовлены к Центру Интернета вещей в ближайшем регионе.

Внимание

Некоторые регионы могут время от времени применять ограничения на создание Виртуальные машины. На момент написания этого руководства регионы westus2 и eastus позволили создавать виртуальные машины. Если вы не можете создать в одном из этих регионов, попробуйте использовать другой регион. Дополнительные сведения о выборе географических регионов Azure при создании виртуальных машин см. в разделе "Регионы для виртуальных машин" в Azure

Необходимые компоненты

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

Создание двух региональных центров Интернета вещей

В этом разделе вы создадите группу ресурсов Azure и два новых региональных ресурсов Центра Интернета вещей. Один центр Интернета вещей будет находиться в регионе "Западная часть США 2 ", а другой — для региона "Восточная часть США ".

Внимание

Рекомендуется использовать одну и ту же группу ресурсов для всех ресурсов, созданных в этом руководстве. Это упрощает очистку после завершения работы.

  1. В Azure Cloud Shell создайте группу ресурсов со следующей командой az group create :

    az group create --name contoso-us-resource-group --location eastus
    
  2. Создайте центр Интернета вещей в расположении 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. Теперь создайте центр Интернета вещей в расположении 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. Войдите на портал Azure и перейдите к своему экземпляру службы подготовки устройств.

  2. Выберите " Управление регистрациями" в разделе "Параметры " в меню навигации.

  3. Выберите " Добавить группу регистрации".

  4. На вкладке "Регистрация и подготовка" на странице "Добавление группы регистрации" укажите следующие сведения, чтобы настроить сведения о группе регистрации:

    Поле Description
    Свидетельство Выберите симметричный ключ в качестве механизма аттестации.
    Параметры симметричного ключа Установите флажок "Создать симметричные ключи" автоматически.
    Имя группы Назовите группу contoso-us-devices или укажите собственное имя группы. Имя группы регистрации — это нечувствительная строка регистра (до 128 символов длиной) буквенно-цифровых символов, а также специальные символы: '-', '.', . '_'':' Последний символ должен быть буквенно-цифровым или дефисом ('-').
  5. Нажмите кнопку Далее: Центры Интернета вещей.

  6. Чтобы добавить два центра Интернета вещей в группу регистрации, выполните следующие действия.

    1. На вкладке "Центры Интернета вещей" на странице "Добавление группы регистрации" выберите "Добавить ссылку на Центр Интернета вещей" в разделе "Целевые центры Интернета вещей".

    2. На странице "Добавить ссылку на Центр Интернета вещей" выберите центр Интернета вещей, созданный в регионе eastus, и назначьте ему доступ iothubowner.

    3. Выберите Сохранить.

    4. Снова нажмите кнопку "Добавить ссылку в Центр Интернета вещей" и выполните те же действия, чтобы добавить центр Интернета вещей, созданный в регионе westus2 .

    5. В раскрывающемся меню "Целевые центры Интернета вещей" выберите оба центра Интернета вещей.

  7. Для политики выделения выберите наименьшую задержку.

  8. Выберите Review + create (Просмотреть и создать).

  9. На вкладке "Просмотр и создание " проверьте все значения и нажмите кнопку "Создать".

  10. После создания группы регистрации выберите имя contoso-us-devices из списка групп регистрации.

  11. Скопируйте значение Первичный ключ. Этот ключ будет использоваться позже для создания уникальных ключей устройств для имитированных устройств.

Создание региональных виртуальных машин Linux

В этом разделе описано, как создать две региональные виртуальные машины Linux ( виртуальные машины), одну в западной части США 2 и одну в восточной части США 2. Эти виртуальные машины запускают пример имитации устройств из каждого региона, чтобы продемонстрировать подготовку устройств для устройств из обоих регионов.

Чтобы упростить очистку, добавьте эти виртуальные машины в ту же группу ресурсов, которая содержит созданные центры Интернета вещей, 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. Подключитесь к одной из региональных виртуальных машин в каждой оболочке с помощью SSH.

    Передайте имя пользователя администратора и общедоступный IP-адрес, скопированный в качестве параметров, в SSH. В ответ на запрос введите пароль администратора.

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

Подготовка среды разработки для пакета SDK для языка C Azure IoT

В этом разделе описано, как клонировать пакет SDK Azure IoT C на каждой виртуальной машине. Пакет 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. Клонируйте пакет SDK для устройств Интернета вещей Azure для 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. Создайте уникальный ключ с помощью opensl. Вы будете использовать следующий скрипт оболочки Bash (замените {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. Теперь у каждого устройства есть собственный производный ключ устройства и уникальный идентификатор регистрации для выполнения аттестации симметричного ключа с группой регистрации во время процесса подготовки.

Имитация устройств из каждого региона

В этом разделе описано, как обновить пример подготовки в пакете SDK Azure IoT C для обеих региональных виртуальных машин.

Пример кода имитирует последовательность загрузки устройства, которое отправляет запрос на подготовку в экземпляр службы подготовки устройств. Последовательность загрузки приводит к тому, что устройство распознается и назначается центру Интернета вещей, который ближе всего зависит от задержки.

  1. На портале Azure выберите вкладку Обзор службы подготовки устройств и запишите значение области идентификатора.

    Извлеките сведения о конечной точке службы подготовки устройств из колонки портала.

  2. На обеих виртуальных машинах откройте ~/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
    

    Пример выходных данных из виртуальной машины, расположенной в восточной части США:

    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.

Внимание

Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали Центр Интернета вещей в группе ресурсов, содержащей ресурсы, которые нужно сохранить, удалите только ресурс Центра Интернета вещей, не удаляя всю группу ресурсов.

Удаление группы ресурсов по имени.

  1. Войдите на портал Azure.

  2. Выберите элемент Группы ресурсов.

  3. Введите в текстовое поле Фильтровать по имени... имя вашей группы ресурсов: contoso-us-resource-group.

  4. Справа от своей группы ресурсов в списке результатов щелкните ..., а затем выберите Удалить группу ресурсов.

  5. Вам будет предложено подтвердить операцию удаления группы ресурсов. Снова введите имя группы ресурсов, которую необходимо удалить, и щелкните Удалить. Через некоторое время группа ресурсов и все ее ресурсы будут удалены.

Следующие шаги

Дополнительные сведения о пользовательских политиках выделения см. в статье