使用 Linux 上的 TPM 大規模建立及布建 IoT Edge 裝置

適用於:IoT Edge 1.5 複選標記 IoT Edge 1.5 IoT Edge 1.4 複選標記 IoT Edge 1.4

重要

支援 IoT Edge 1.5 LTS 和 IoT Edge 1.4 LTS 版本。 IoT Edge 1.4 LTS 於 2024 年 11 月 12 日結束生命週期。 如果您是舊版,請參閱更新 IoT Edge

本文提供使用信賴平台模組 (TPM) 自動布建適用於Linux的 Azure IoT Edge 裝置的指示。 您可以使用 Azure IoT 中樞 裝置布建服務自動布建 IoT Edge 裝置。 如果您不熟悉自動布建程式,請先檢閱 布建概觀 ,再繼續。

本文概述兩種方法。 根據解決方案的架構選取您的喜好設定:

  • 使用實體 TPM 硬體自動布建 Linux 裝置。
  • 使用已啟用 Hyper-V 的 Windows 開發電腦上執行的模擬 TPM 自動布建 Linux 虛擬機(VM)。 我們建議只使用此方法作為測試案例。 模擬 TPM 不提供與實體 TPM 相同的安全性。

指示會根據您的方法而有所不同,因此請確定您位於正確的索引標籤上。

工作如下所示:

  1. 擷取 TPM 的布建資訊。
  2. 在 IoT 中樞 裝置布建服務的實例中,為您的裝置建立個別註冊。
  3. 安裝IoT Edge運行時間,並將裝置連線到IoT中樞。

必要條件

雲端資源

  • 作用中的IoT中樞
  • Azure 中 IoT 中樞 裝置布建服務的實例,已連結至IoT中樞

裝置需求

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

如果您是裝置製造商,請參閱將 TPM 整合到製造程式的指引

注意

當您搭配裝置布建服務使用 TPM 證明時,需要 TPM 2.0。

當您使用 TPM 時,您只能建立個別的裝置布建服務註冊,而不是群組。

設定您的裝置

如果您使用實體 Linux 裝置搭配 TPM,則沒有額外的步驟可設定您的裝置。

您已準備好繼續。

擷取 TPM 的布建資訊

注意

本文先前使用 tpm_device_provision 來自IoT C SDK的工具來產生布建資訊。 如果您先前依賴此工具,請注意下列步驟會針對相同的公鑰產生不同的註冊標識碼。 如果您需要像之前一樣重新建立註冊標識符,請參閱 C SDK 的 tpm_device_provision工具 如何產生它。 請確定 DPS 中個別註冊的註冊標識碼符合 IoT Edge 裝置設定為使用的重新建立識別碼。

在本節中,您會使用 TPM2 軟體工具來擷取 TPM 的簽署密鑰,然後產生唯一的註冊標識符。 本節與 步驟 3:裝置已安裝韌體和軟體 ,以便 將 TPM 整合到製造程式中

安裝 TPM2 工具

登入您的裝置,並安裝 tpm2-tools 套件。

sudo apt-get install tpm2-tools

執行下列腳本來讀取簽署密鑰,如果尚未存在,請建立簽署密鑰。

#!/bin/sh
if [ "$USER" != "root" ]; then
  SUDO="sudo "
fi

$SUDO tpm2_readpublic -Q -c 0x81010001 -o ek.pub 2> /dev/null
if [ $? -gt 0 ]; then
  # Create the endorsement key (EK)
  $SUDO tpm2_createek -c 0x81010001 -G rsa -u ek.pub

  # Create the storage root key (SRK)
  $SUDO tpm2_createprimary -Q -C o -c srk.ctx > /dev/null

  # make the SRK persistent
  $SUDO tpm2_evictcontrol -c srk.ctx 0x81000001 > /dev/null

  # open transient handle space for the TPM
  $SUDO tpm2_flushcontext -t > /dev/null
fi

printf "Gathering the registration information...\n\nRegistration Id:\n%s\n\nEndorsement Key:\n%s\n" $(sha256sum -b ek.pub | cut -d' ' -f1 | sed -e 's/[^[:alnum:]]//g') $(base64 -w0 ek.pub)
$SUDO rm ek.pub srk.ctx 2> /dev/null

輸出視窗會顯示裝置的 [簽署金鑰 ] 和唯 一的 [註冊標識符]。 當您在裝置布建服務中建立裝置的個別註冊時,請複製這些值以供稍後使用。

註冊標識碼和簽署金鑰之後,您就可以繼續。

提示

如果您不想使用 TPM2 軟體工具來擷取資訊,您需要尋找另一種方式來取得布建資訊。 背書密鑰,這是每個 TPM 晶片特有的,是從與其相關聯的 TPM 晶片製造商取得。 您可以衍生 TPM 裝置的唯一註冊識別碼。 例如,如上所示,您可以建立簽署密鑰的 SHA-256 哈希。

建立裝置布建服務註冊

使用 TPM 的布建資訊,在裝置布建服務中建立個別註冊。

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

提示

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

  1. Azure 入口網站中,前往 IoT 中樞裝置佈建服務的執行個體。

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

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

    1. 針對 [ 機制],選取 [TPM]。

    2. 提供您從 VM 或實體裝置複製的簽署金鑰註冊識別碼

    3. 如有需要,請提供裝置的標識碼。 如果您沒有提供裝置識別碼,則會使用註冊標識碼。

    4. 選取 [True ] 以宣告您的 VM 或實體裝置是 IoT Edge 裝置。

    5. 選擇您要將裝置連線到的連結IoT中樞,或選取 [連結到新的 IoT 中樞]。 您可以選擇多個中樞,並根據選取的指派原則將裝置指派給其中一個中樞。

    6. 如有需要, 請將標籤值新增至初始裝置對應項狀態 。 您可以使用標籤將裝置群組設為模組部署的目標群組。 如需詳細資訊,請參閱 大規模部署IoT Edge模組。

    7. 選取 [儲存]。

現在,此裝置的註冊已存在,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 中樞的信息來設定裝置。

瞭解先前收集的裝置布建服務 標識碼範圍 和裝置 註冊標識符

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

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

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

sudo nano /etc/aziot/config.toml
  1. 尋找檔案的布建組態區段。 取消批注 TPM 布建的行,並確定已批注任何其他布建行。

    # DPS provisioning with TPM
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "DPS_ID_SCOPE_HERE"
    
    # Uncomment to send a custom payload during DPS registration
    # payload = { uri = "PATH_TO_JSON_FILE" }
    
    [provisioning.attestation]
    method = "tpm"
    registration_id = "REGISTRATION_ID_HERE"
    
    # auto_reprovisioning_mode = Dynamic
    
  2. 使用您的裝置布建服務和裝置資訊更新 和 registration_id 的值id_scope。 此值 scope_id裝置布建服務實例概觀頁面中的標識符範圍

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

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

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

  5. 儲存並關閉檔案。

為 IoT Edge 提供 TPM 的存取權

IoT Edge 執行時間依賴可代理裝置 TPM 存取權的 TPM 服務。 此服務必須存取 TPM,才能自動布建您的裝置。

您可以覆寫 systemd 設定來授與 TPM 的存取權,讓 aziottpm 服務具有根許可權。 如果您不想提高服務許可權,您也可以使用下列步驟手動提供 TPM 存取權。

  1. 建立可讓IoT Edge運行時間存取 tpm0tpmrm0的新規則。

    sudo touch /etc/udev/rules.d/tpmaccess.rules
    
  2. 開啟規則檔案。

    sudo nano /etc/udev/rules.d/tpmaccess.rules
    
  3. 將下列存取資訊複製到規則檔案中。 tpmrm0可能不存在於使用 4.12 之前核心的裝置上。 沒有 tpmrm0 的裝置會安全地忽略該規則。

    # allow aziottpm access to tpm0 and tpmrm0
    KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="aziottpm", MODE="0660"
    KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="aziottpm", MODE="0660"
    
  4. 儲存並結束檔案。

  5. udev觸發系統來評估新規則。

    /bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrm
    
  6. 確認已成功套用規則。

    ls -l /dev/tpm*
    

    成功的輸出如下所示:

    crw-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpm0
    crw-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpmrm0
    

    如果您沒有看到套用正確的許可權,請嘗試重新啟動您的電腦以重新整理 udev

  7. 套用您在裝置上所做的設定變更。

    sudo iotedge config apply
    

確認安裝成功

如果您尚未這麼做,請套用您在裝置上所做的設定變更。

sudo iotedge config apply

檢查 IoT Edge 執行時間是否正在執行。

sudo iotedge system status

檢查精靈記錄。

sudo iotedge system logs

如果您看到布建錯誤,可能是組態變更尚未生效。 請嘗試重新啟動IoT Edge精靈。

sudo systemctl daemon-reload

或者,請嘗試重新啟動您的 VM,以查看變更是否對全新啟動生效。

如果運行時間已成功啟動,您可以進入IoT中樞,並查看您的新裝置已自動布建。 現在您的裝置已準備好執行IoT Edge模組。

列出執行中的模組。

iotedge list

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

下一步

裝置布建服務註冊程式可讓您在布建新裝置的同時,設定裝置標識碼和裝置對應項標籤。 您可以使用這些值,透過自動裝置管理,以個別裝置或裝置群組為目標。

瞭解如何使用 Azure 入口網站Azure CLI 大規模部署和監視 IoT Edge 模組。