Поделиться через


Создание и подготовка устройств IoT Edge в масштабе в Linux с помощью сертификатов X.509

Область применения: Значок IoT Edge 1.1

Внимание

Дата окончания поддержки IoT Edge 1.1 была 13 декабря 2022 г. Чтобы получить сведения о поддержке определенного продукта, службы, технологии или API, перейдите на страницу Политика жизненного цикла поддержки Майкрософт. Дополнительные сведения об обновлении до последней версии IoT Edge см. в разделе "Обновление IoT Edge".

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

Для этого необходимо выполнить следующие задачи:

  1. Создание сертификатов и ключей.
  2. Создайте отдельную регистрацию для одного устройства или группы для набора устройств.
  3. Установка среды выполнения IoT Edge и регистрация устройства в Центре Интернета вещей.

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

Совет

Если устройство имеет аппаратный модуль безопасности (HSM), например TPM 2.0, рекомендуется безопасно хранить ключи X.509 в HSM. Дополнительные сведения о реализации подготовки нулевого касания в масштабе, описанной в этой схеме, см. в примере iotedge-tpm2cloud.

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

Облачные ресурсы

  • Активный Центр Интернета вещей
  • Экземпляр службы подготовки устройств Центр Интернета вещей в Azure, связанный с центром Интернета вещей

Требования к устройствам

Физическое или виртуальное устройство Linux, которое должно быть устройством IoT Edge.

Создание сертификатов удостоверений устройств

Сертификат удостоверения устройства — это подчиненный сертификат устройства, который подключается через цепочку сертификатов доверия к верхнему сертификату центра сертификации X.509 (ЦС). Сертификат удостоверения устройства должен иметь общее имя (CN) для идентификатора устройства, который должен иметь устройство в Центре Интернета вещей.

Сертификаты удостоверений устройств используются только для подготовки устройства IoT Edge и проверки подлинности устройства в Центре Интернета вещей Azure. Они не подписывают сертификаты, в отличие от сертификатов ЦС, которые устройство IoT Edge предоставляет модулям или подчиненным устройствам для проверки. Дополнительные сведения см. в разделе об использовании сертификатов Azure IoT Edge.

После создания сертификата удостоверения устройства необходимо два файла: CER или PEM, который содержит открытую часть сертификата, и CER или PEM с закрытым ключом сертификата. Если вы планируете использовать групповую регистрацию в DPS, вам также потребуется открытая часть промежуточного или корневого сертификата ЦС в той же цепочке сертификатов доверия.

Чтобы настроить автоматическую подготовку с помощью X.509, вам потребуются следующие файлы:

  • Сертификат удостоверения устройства и сертификат его закрытого ключа. Сертификат удостоверения устройства отправляется в DPS при создании отдельной регистрации. Закрытый ключ передается в среду выполнения IoT Edge.
  • Полный сертификат цепочки, который должен содержать, по крайней мере, удостоверение устройства и промежуточные сертификаты. Полный сертификат цепочки передается в среду выполнения IoT Edge.
  • Промежуточный или корневой сертификат ЦС из цепочки доверия сертификатов. Этот сертификат отправляется в службу DPS, если вы создаете групповую регистрацию.

Примечание.

В настоящее время ограничение в libiothsm запрещает использование сертификатов, срок действия которых истекает с 1 января 2038 г.

Использование тестовых сертификатов (необязательно)

Если у вас нет доступного центра сертификации для создания новых сертификатов удостоверений и вы хотите испытать этот сценарий, репозиторий Azure IoT Edge в Git содержит сценарии, которые можно использовать для создания тестовых сертификатов. Эти сертификаты предназначены только для тестирования разработки и не должны использоваться в рабочей среде.

Чтобы создать тестовые сертификаты, выполните действия, описанные в статье Создание демонстрационных сертификатов для тестирования функций устройств IoT Edge. Заполните два необходимых раздела, чтобы настроить скрипты создания сертификатов и создать корневой сертификат ЦС. Затем выполните действия по созданию сертификата удостоверения устройства. По завершении у вас должны быть следующие цепочки сертификатов и пары ключей:

  • <WRKDIR>/certs/iot-edge-device-identity-<name>-full-chain.cert.pem
  • <WRKDIR>/private/iot-edge-device-identity-<name>.key.pem

Оба сертификата необходимы на устройстве IoT Edge. Если вы собираетесь использовать отдельную регистрацию в DPS, отправьте файл .cert.pem. Если вы планируете использовать групповую регистрацию в DPS, вам также потребуется отправить промежуточный или корневой сертификат ЦС в той же цепочке доверия сертификатов. Если вы используете демонстрационные сертификаты, используйте сертификат <WRKDIR>/certs/azure-iot-test-only.root.ca.cert.pem для групповой регистрации.

Создание регистрации в Службе подготовки устройств к добавлению в Центр Интернета вещей

Используйте созданные сертификаты и ключи для создания регистрации в DPS для одного или нескольких устройств IoT Edge.

Если вы хотите подготовить одно устройство IoT Edge, создайте отдельную регистрацию. Если требуется подготовка нескольких устройств, выполните действия по созданию регистрации группы DPS.

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

Дополнительные сведения о регистрации в службе подготовки устройств см. в статье "Управление регистрацией устройств".

Создание индивидуальной регистрации DPS

Отдельные регистрации принимают открытую часть сертификата удостоверения устройства и сопоставляют ее с сертификатом на устройстве.

Совет

Действия, описанные в этой статье, предназначены для портал Azure, но вы также можете создать отдельные регистрации с помощью Azure CLI. Дополнительные сведения см. в разделе az iot dps enrollment. В команде интерфейса командной строки с помощью флага edge-enabled укажите, что регистрация предназначена для устройства IoT Edge.

  1. В портал Azure перейдите к экземпляру службы подготовки устройств Центр Интернета вещей.

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

  3. Выберите Добавить отдельную регистрацию и выполните следующие действия для настройки регистрации.

    • Механизм: выберите X.509.

    • Файл первичного сертификата PEM или CER: отправьте открытый файл из сертификата удостоверения устройства. Если вы использовали сценарии для создания тестового сертификата, выберите следующий файл:

      <WRKDIR>\certs\iot-edge-device-identity-<name>.cert.pem

    • Идентификатор устройства в Центре Интернета вещей: если необходимо, укажите идентификатор устройства. Идентификаторы устройств можно использовать, чтобы указать отдельное устройство для развертывания модуля. Если не указать идентификатор устройства, используется общее имя (CN) в сертификате X.509.

    • Устройство IoT Edge: выберите значение True, чтобы указать, что это регистрация устройства IoT Edge.

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

    • Начальное состояние двойника устройства: при желании добавьте значение тега в двойник устройства. Теги можно использовать для указания групп устройств для автоматического развертывания. Например:

      {
          "tags": {
             "environment": "test"
          },
          "properties": {
             "desired": {}
          }
      }
      
  4. Выберите Сохранить.

В разделе "Управление регистрацией" можно просмотреть идентификатор регистрации для только что созданной регистрации. Запишите его, так как его можно использовать при подготовке устройства.

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

Установка Edge Интернета вещей

В этом разделе описана подготовка виртуальной машины Linux или физического устройства для IoT Edge. Затем установите IoT Edge.

Выполните следующие команды, чтобы добавить репозиторий пакетов, а затем добавить ключ подписи пакета Майкрософт в список доверенных ключей.

Внимание

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 регулируется условиями лицензии, содержащейся в самих пакетах (в usr/share/doc/{package-name} или в каталоге LICENSE). Прежде чем использовать пакет, ознакомьтесь с условиями лицензии. Установка и использование пакета означают, что вы принимаете эти условия. Если вы с ними не согласны, не используйте пакет.

Установка платформы контейнеров

Служба Azure IoT Edge использует среду выполнения контейнера, совместимую с OCI. В рабочих сценариях рекомендуется использовать подсистему Moby. Модуль Moby является единственным обработчиком контейнеров, официально поддерживаемым IoT Edge. Образы контейнеров Docker (Community Edition или Enterprise Edition) совместимы со средой выполнения Moby.

Установите модуль Moby.

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

После успешной установки подсистемы Moby настройте его для использования local драйвера ведения журнала в качестве механизма ведения журнала. Дополнительные сведения о настройке ведения журнала см . в контрольном списке развертывания рабочей среды.

  • Создайте или откройте файл /etc/docker/daemon.jsonконфигурации управляющей программы Docker.

  • Задайте драйвер ведения журнала по умолчанию драйверу local ведения журнала, как показано в приведенном ниже примере.

       {
          "log-driver": "local"
       }
    
  • Перезапустите обработчик контейнеров, чтобы изменения вступили в силу.

    sudo systemctl restart docker
    

    Совет

    Если при установке подсистемы контейнеров Moby возникают ошибки, проверьте совместимость ядра Linux для Moby. Некоторые производители встраиваемых устройств поставляют образы устройств, которые содержат нестандартные ядра Linux, без функций, необходимых для совместимости с обработчиком контейнеров. Выполните следующую команду, которая использует скрипт check-config, предоставленный Moby, для проверки конфигурации ядра:

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

Предоставление облачного удостоверения устройству

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

Подготовьте следующие сведения:

  • Значение области идентификаторов DPS. Вы можете узнать это значение на странице обзора в экземпляре DPS на портале Azure.
  • Файл цепочки сертификатов удостоверений устройств на устройстве.
  • Файл ключа удостоверений устройств на устройстве.
  1. Откройте файл конфигурации на устройстве IoT Edge.

    sudo nano /etc/iotedge/config.yaml
    
  2. Найдите в нем раздел конфигурации подготовки. Раскомментируйте строки для подготовки DPS с сертификатом X.509 и убедитесь, что все остальные строки подготовки закомментированы.

    Строка provisioning: не должна содержать предшествующих пробелов, а вложенные элементы должны иметь отступ в два пробела.

    # DPS X.509 provisioning configuration
    provisioning:
      source: "dps"
      global_endpoint: "https://global.azure-devices-provisioning.net"
      scope_id: "SCOPE_ID_HERE"
      attestation:
        method: "x509"
    #   registration_id: "OPTIONAL_REGISTRATION_ID_LEAVE_COMMENTED_OUT_TO_REGISTER_WITH_CN_OF_IDENTITY_CERT"
        identity_cert: "REQUIRED_URI_TO_DEVICE_IDENTITY_CERTIFICATE_HERE"
        identity_pk: "REQUIRED_URI_TO_DEVICE_IDENTITY_PRIVATE_KEY_HERE"
    
    # always_reprovision_on_startup: true
    # dynamic_reprovisioning: false
    
  3. Обновите значения параметров scope_id, identity_cert и identity_pk с помощью сведений о DPS и устройстве.

    При добавлении сертификата X.509 и сведений о ключе в файл config.yaml эти пути должны быть указаны в виде URI файлов. Например:

    file:///<path>/identity_certificate_chain.pem file:///<path>/identity_key.pem

  4. При необходимости укажите registration_id для устройства, который требуется для сопоставления общего имени сертификата удостоверения. Если оставить такую строку закомментированной, будет автоматически применено общее имя.

  5. При необходимости используйте строки always_reprovision_on_startup или dynamic_reprovisioning для настройки поведения повторной подготовки устройства. Если устройство настроено для повторной подготовки при запуске, оно всегда будет пытаться выполнить подготовку сначала с помощью DPS, а затем обратится к резервному методу подготовки при сбое. Если устройство настроено для динамической повторной подготовки, IoT Edge (и все модули) перезапустится и перепроименуется, если обнаружено событие повторной подготовки, например, если устройство перемещается из одной Центр Интернета вещей в другую. В частности, IoT Edge проверяет наличие bad_credential или device_disabled ошибки из пакета SDK для обнаружения события повторной подготовки. Чтобы активировать это событие вручную, отключите устройство в Центр Интернета вещей. Дополнительные сведения см. в разделе Основные понятия повторной подготовки устройств в Центре Интернета вещей.

  6. Сохраните и закройте файл config.yaml.

  7. Перезапустите среду выполнения IoT Edge, чтобы активировать все изменения конфигурации, внесенные на устройстве.

    sudo systemctl restart iotedge
    

Проверка установки

Если среда выполнения запущена успешно, можете перейти в Центр Интернета вещей и начать развертывание модулей IoT Edge на устройстве.

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

Чтобы убедиться, что IoT Edge установлена и запущена успешно, выполните следующие команды на устройстве.

Проверьте состояние службы IoT Edge.

systemctl status iotedge

Проверьте журналы службы.

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

Просмотрите список запущенных модулей.

iotedge list

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

Процесс регистрации службы подготовки устройств позволяет задать идентификатор устройства и теги двойников устройств одновременно, когда вы подготавливаете новое устройство. Эти значения можно использовать для указания отдельных устройств или групп устройств с помощью автоматического управления устройствами. См. дополнительные сведения о развертывании и мониторинге модулей IoT Edge с поддержкой масштабирования с помощью портала Azure или Azure CLI.