使用 X.509 憑證大規模在 Linux 上建立及布建 IoT Edge 裝置

適用於:IoT Edge 1.4 checkmark IoT Edge 1.4

重要

支援的版本是 IoT Edge 1.4。 如果您是舊版,請參閱更新 IoT Edge

本文提供使用 X.509 憑證自動布建一或多個 Linux IoT Edge 裝置的端對端指示。 您可以使用 Azure IoT 中樞 裝置布建服務 (DPS) 自動布建 Azure IoT Edge 裝置。 如果您不熟悉自動布建程式,請先檢閱 布建概觀 ,再繼續進行。

工作如下所示:

  1. 產生憑證和金鑰。
  2. 建立單一裝置的個別註冊一組裝置的群組註冊
  3. 安裝IoT Edge運行時間,並使用 IoT 中樞 註冊裝置。

使用 X.509 憑證作為證明機制,是調整生產環境規模並簡化裝置佈建的絕佳方式。 一般而言,X.509 憑證會安排在信任的憑證鏈結中。 從自我簽署或受信任的跟證書開始,鏈結中的每個憑證都會簽署下一個較低的憑證。 此模式會透過每個中繼憑證,從跟證書到裝置上安裝的最終下游裝置憑證,建立委派的信任鏈結。

提示

如果您的裝置具有硬體安全性模組 (HSM),例如 TPM 2.0,建議您安全地將 X.509 金鑰儲存在 HSM 中。 深入瞭解如何使用 iotedge-tpm2cloud 範例,以大規模方式實作此藍圖中所述的零觸控布建。

必要條件

雲端資源

  • 作用中的IoT中樞
  • Azure 中 IoT 中樞 裝置布建服務的實例,連結到IoT中樞
    • 如果您沒有裝置佈建服務實例,您可以遵循建立新的 IoT 中樞 裝置布建服務和連結 IoT 中樞 裝置佈建服務快速入門中的IoT中樞和裝置布建服務小節中的指示。
    • 執行裝置布建服務之後,請從 [概觀] 頁面複製 [標識符範圍] 的值。 當您設定 IoT Edge 執行時間時,請使用此值。

裝置需求

要成為IoT Edge裝置的實體或虛擬Linux裝置。

產生裝置身分識別憑證

裝置身分識別憑證是下游裝置憑證,可透過信任的憑證鏈結聯機到最高 X.509 證書頒發機構單位 (CA) 憑證。 裝置身分識別憑證必須將其一般名稱 (CN) 設定為您想要裝置在IoT中樞擁有的裝置識別碼。

裝置身分識別憑證僅用於布建 IoT Edge 裝置,並使用 Azure IoT 中樞 驗證裝置。 它們不會簽署憑證,與IoT Edge裝置向模組或下游裝置呈現的CA憑證不同,以進行驗證。 如需詳細資訊,請參閱 Azure IoT Edge 憑證使用量詳細數據

建立裝置身分識別憑證之後,您應該會有兩個檔案:包含憑證公開部分的 .cer 或 .pem 檔案,以及具有憑證私鑰的 .cer 或 .pem 檔案。 如果您打算在 DPS 中使用群組註冊,則也需要相同憑證鏈結中中繼或根 CA 憑證的公用部分。

您需要下列檔案,才能使用 X.509 設定自動布建:

  • 裝置身分識別憑證及其私鑰憑證。 如果您建立個別註冊,裝置身分識別憑證會上傳至 DPS。 私鑰會傳遞至 IoT Edge 執行時間。
  • 完整鏈結憑證,其中至少應有裝置身分識別和中繼憑證。 完整鏈結憑證會傳遞至 IoT Edge 運行時間。
  • 來自信任憑證鏈結的中繼或跟證書 CA 憑證。 如果您建立群組註冊,此憑證會上傳至 DPS。

使用測試憑證 (選擇性)

如果您沒有可用來建立新身分識別憑證的證書頒發機構單位,而且想要試用此案例,Azure IoT Edge Git 存放庫會包含可用來產生測試憑證的腳本。 這些憑證僅供開發測試設計,不得用於生產環境。

若要建立測試憑證,請遵循建立示範憑證中的步驟 來測試 IoT Edge 裝置功能。 完成兩個必要區段來設定憑證產生腳本,並建立根 CA 憑證。 然後,依照步驟建立裝置身分識別憑證。 當您完成時,應該會有下列憑證鏈結和金鑰組:

  • <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 中使用群組註冊,則也需要相同憑證鏈結中的中繼或根 CA 憑證才能上傳。 如果您使用示範憑證,請使用 <WRKDIR>/certs/azure-iot-test-only.root.ca.cert.pem 憑證進行群組註冊。

建立 DPS 註冊

使用產生的憑證和密鑰,為一或多個 IoT Edge 裝置在 DPS 中建立註冊。

如果您想要布建單一 IoT Edge 裝置,請建立 個別註冊。 如果您需要布建多個裝置,請遵循建立 DPS 群組註冊的步驟。

當您在 DPS 中建立註冊時,有機會宣告初始裝置對應項 狀態。 在裝置對應項中,您可以透過解決方案中所需的任何計量,將標籤設定為群組裝置,例如區域、環境、位置或裝置類型。 這些標記可用來建立 自動部署

如需裝置布建服務中註冊的詳細資訊,請參閱 如何管理裝置註冊

建立 DPS 個別註冊

個別註冊會取得裝置身分識別憑證的公用部分,並將其與裝置上的憑證相符。

提示

本文中的步驟適用於 Azure 入口網站,但您也可以使用 Azure CLI 建立個別註冊。 如需詳細資訊,請參閱 az iot dps enrollment。 在 CLI 命令中,使用 已啟用邊緣的 旗標來指定註冊適用於 IoT Edge 裝置。

  1. Azure 入口網站 中,流覽至 IoT 中樞 裝置布建服務的實例。

  2. 在 [設定] 下方,選取 [管理註冊]

  3. 選取 [ 新增個別註冊 ],然後完成下列步驟來設定註冊:

    • 機制:選取 X.509

    • 主要憑證 .pem 或.cer檔案:從裝置身分識別憑證上傳公用檔案。 如果您使用腳本來產生測試憑證,請選擇下列檔案:

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

    • IoT 中樞 裝置識別碼:如果您想要的話,請提供裝置的標識碼。 您可以使用裝置識別碼,將個別裝置設為模組部署的目標。 如果您沒有提供裝置標識碼,則會使用 X.509 憑證中的一般名稱 (CN)。

    • IoT Edge 裝置:選取 [True ] 以宣告註冊適用於IoT Edge裝置。

    • 選取可指派此裝置的IoT中樞:選擇您要將裝置連線到的連結IoT中樞。 您可以選擇多個中樞,並根據選取的配置原則將裝置指派給其中一個中樞。

    • 初始裝置對應項狀態:如果您想要,請新增要新增至裝置對應項的標籤值。 您可以使用標籤將裝置群組設為自動部署的目標群組。 例如:

      {
          "tags": {
             "environment": "test"
          },
          "properties": {
             "desired": {}
          }
      }
      
  4. 選取 [儲存]。

在 [管理註冊] 下,您可以看到您剛才建立之註冊的註冊標識符。 請記下它,因為您可以在布建裝置時使用它。

現在,此裝置的註冊已存在,IoT Edge 運行時間可以在安裝期間自動布建裝置。

安裝IoT Edge

在本節中,您會準備適用於IoT Edge的Linux虛擬機或實體裝置。 然後,您會安裝IoT Edge。

執行下列命令以新增套件存放庫,然後將 Microsoft 套件簽署金鑰新增至受信任的金鑰清單。

重要

2022 年 6 月 30 日,Raspberry Pi OS Stretch 已從第 1 層 OS 支援清單中淘汰。 若要避免潛在的安全性弱點,請將主機 OS 更新為 Bullseye。

您可以使用幾個命令來完成安裝。 開啟終端機,然後執行下列命令:

  • 22.04

    wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    
  • 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
    

如需操作系統版本的詳細資訊,請參閱 Azure IoT Edge 支援的平臺

注意

Azure IoT Edge 軟體套件受限於每個套件(usr/share/doc/{package-name} 或目錄)中的 LICENSE 授權條款。 使用套件之前,請先閱讀授權條款。 您的安裝和使用套件構成您接受這些條款。 如果您不同意授權條款,請勿使用該套件。

安裝容器引擎

Azure IoT Edge 依賴 與 OCI 相容的容器運行時間。 針對生產案例,建議您使用Moby引擎。 Moby 引擎是IoT Edge正式支援的容器引擎。 Docker CE/EE 容器映像與 Moby 執行階段相容。

安裝 Moby 引擎。

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

根據預設,容器引擎不會設定容器記錄大小限制。 經過一段時間之後,這可能會導致裝置充滿記錄,並用盡磁碟空間。 不過,您可以將記錄設定為在本機顯示,但這是選擇性的。 若要深入了解記錄設定,請參閱 生產部署檢查清單

下列步驟示範如何將容器設定為使用 local 記錄驅動程式 作為記錄機制。

  1. 建立或編輯現有的 Docker 精靈組態檔

    sudo nano /etc/docker/daemon.json
    
  2. 將預設記錄驅動程式設定為記錄驅動程式, local 如範例所示。

       {
          "log-driver": "local"
       }
    
  3. 重新啟動容器引擎,讓變更生效。

    sudo systemctl restart docker
    

安裝 IoT Edge 執行階段

IoT Edge 服務會在IoT Edge裝置上提供和維護安全性標準。 服務會在每次開機時啟動,並啟動裝置,方法是啟動IoT Edge運行時間的其餘部分。

注意

從 1.2 版開始,IoT 身分識別服務會處理 IoT Edge 的身分識別布建和管理,以及需要與 IoT 中樞 通訊的其他裝置元件。

本節中的步驟代表在具有因特網連線的裝置上安裝最新 IoT Edge 版本的一般程式。 如果您需要安裝特定版本,例如發行前版本,或需要在離線時安裝,請遵循本文稍後的 離線或特定版本安裝 步驟。

提示

如果您已經有執行舊版且想要升級至最新版本的 IoT Edge 裝置,請使用更新 IoT Edge 安全性精靈和運行時間中的步驟。 較新版本與舊版IoT Edge完全不同,需要特定步驟才能升級。

安裝最新版的 IoT Edge 和 IoT 身分識別服務套件(如果您尚未 更新):

  • 22.04

    sudo apt-get update; \
       sudo apt-get install aziot-edge
    
  • 20.04

    sudo apt-get update; \
       sudo apt-get install aziot-edge defender-iot-micro-agent-edge
    

選用 defender-iot-micro-agent-edge 套件包含適用於IoT的 Microsoft Defender 安全性微代理程式,可提供端點對安全性狀態管理、弱點、威脅偵測、車隊管理等的可見度,以協助您保護您的 IoT Edge 裝置。 建議使用 Edge 代理程式安裝微代理程式,以啟用 Edge 裝置的安全性監視和強化。 若要深入瞭解適用於 IoT 的 Microsoft Defender,請參閱 什麼是適用於 IoT 的 Microsoft Defender for Device Builder

使用雲端身分識別來佈建裝置

在裝置上安裝運行時間之後,請使用它用來連線到裝置布建服務和 IoT 中樞的信息來設定裝置。

備妥下列資訊:

  • DPS 識別碼範圍 值。 您可以從 Azure 入口網站 中 DPS 實例的概觀頁面擷取此值。
  • 裝置上的裝置身分識別憑證鏈結檔案。
  • 裝置上的裝置身分識別金鑰檔案。

根據IoT Edge安裝中提供的範本檔案,為您的裝置建立組態檔。

sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml

開啟IoT Edge裝置上的組態檔。

sudo nano /etc/aziot/config.toml
  1. 尋找檔案的布 區段。 使用 X.509 憑證取消批注 DPS 布建的行,並確定已批注任何其他布建行。

    # DPS provisioning with X.509 certificate
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "SCOPE_ID_HERE"
    
    # Uncomment to send a custom payload during DPS registration
    # payload = { uri = "PATH_TO_JSON_FILE" }
    
    [provisioning.attestation]
    method = "x509"
    registration_id = "REGISTRATION_ID_HERE"
    
    identity_cert = "DEVICE_IDENTITY_CERTIFICATE_HERE"
    
    identity_pk = "DEVICE_IDENTITY_PRIVATE_KEY_HERE"
    
    # auto_reprovisioning_mode = Dynamic
    
  2. 使用您從 DPS 實例複製的範圍識別碼來更新 的值 id_scope

  3. registration_id為裝置提供,這是裝置在 IoT 中樞 中擁有的標識碼。 註冊標識碼必須符合身分識別憑證的一般名稱(CN)。

  4. 使用您的憑證和金鑰資訊更新 和 identity_pk 的值identity_cert

    身分識別憑證值可作為檔案 URI 提供,或者可以使用 EST 或本機證書頒發機構單位動態發行。 根據您選擇的格式,僅取消批注一行。

    身分識別私鑰值可以當做檔案 URI 或 PKCS#11 URI 來提供。 根據您選擇的格式,僅取消批注一行。

    如果您使用任何 PKCS#11 URI,請在 配置檔中找到 PKCS#11 區 段,並提供 PKCS#11 設定的相關信息。

    如需憑證的詳細資訊,請參閱 管理 IoT Edge 憑證

    如需布建組態設定的詳細資訊,請參閱 設定IoT Edge裝置設定

  5. 或者,尋找檔案的自動重新佈建模式區段。 auto_reprovisioning_mode使用 參數來設定裝置的重新布建行為。 動態 - 當裝置偵測到裝置可能已從某個 IoT 中樞 移至另一個時重新佈建。 這是預設值。 AlwaysOnStartup - 重新啟動裝置或當機時重新佈建會導致精靈重新啟動。 OnErrorOnly - 永遠不要自動觸發裝置重新佈建。 如果裝置因連線錯誤而無法在身分識別布建期間連線到 IoT 中樞,則每個模式都有隱含裝置重新佈建後援。 如需詳細資訊,請參閱 IoT 中樞 裝置重新佈建概念

  6. 選擇性地取消 payload 批注 參數,以指定本機 JSON 檔案的路徑。 當裝置註冊時,檔案的內容會 以其他數據 的形式傳送至 DPS。 這對於自定義配置很有用。 例如,如果您想要根據 IoT 隨插即用 模型標識符配置裝置,而不需人為介入。

  7. 儲存並關閉檔案。

套用您對 IoT Edge 所做的設定變更。

sudo iotedge config apply

確認安裝成功

如果運行時間已成功啟動,您可以進入您的 IoT 中樞,並開始將IoT Edge模組部署到您的裝置。

您可以確認已使用您在裝置布建服務中建立的個別註冊。 流覽至 Azure 入口網站 中的裝置布建服務實例。 開啟您所建立之個別註冊的註冊詳細數據。 請注意,已指派註冊狀態,並列出裝置標識碼。

在您的裝置上使用下列命令來確認IoT Edge是否已安裝並成功啟動。

檢查 IoT Edge 服務的狀態。

sudo iotedge system status

檢查服務記錄。

sudo iotedge system logs

列出執行中的模組。

sudo iotedge list

下一步

裝置布建服務註冊程式可讓您在布建新裝置的同時,設定裝置標識碼和裝置對應項標籤。 您可以使用這些值,以使用自動裝置管理,以個別裝置或裝置群組為目標。 瞭解如何使用 Azure 入口網站 或使用 Azure CLI 大規模部署和監視 IoT Edge 模組。