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

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

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

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

  • Использование 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. В Cloud Shell Azure создайте группу ресурсов с помощью следующей команды 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. На вкладке Регистрация и подготовка на странице Добавление группы регистрации укажите следующие сведения, чтобы настроить сведения о группе регистрации:

    Поле Описание
    Аттестация Выберите Симметричный ключ в качестве механизма аттестации.
    Параметры симметричного ключа Установите флажок Автоматически создавать симметричные ключи .
    Имя группы Присвойте группе имя 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. В Cloud Shell Azure выполните следующую команду, чтобы создать виртуальную машину региона "Восточная часть США" после внесения в команду следующих изменений параметров:

    --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. В Cloud Shell Azure выполните команду , чтобы создать виртуальную машину региона "Западная часть США 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 IoT для 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
    

Получение производных уникальных ключей

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

В этой части учебника вы создадите ключ устройства из ключа master группы для вычисления HMAC-SHA256 уникального идентификатора регистрации устройства. Затем результат будет преобразован в формат Base64.

Важно!

Не включайте ключ master группы в код устройства.

Для устройствeastus и westus2:

  1. Создайте уникальный ключ с помощью openssl. Вы будете использовать следующий сценарий оболочки 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. Вам будет предложено подтвердить операцию удаления группы ресурсов. Снова введите имя группы ресурсов, которую необходимо удалить, и щелкните Удалить. Через некоторое время группа ресурсов и все ее ресурсы будут удалены.

Дальнейшие действия

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