在 Linux 上使用 TPM 來大規模建立和佈建 IoT Edge 裝置
適用於: IoT Edge 1.1
重要
IoT Edge 1.1 終止支援日期為 2022 年 12 月 13 日。 如需此產品、服務、技術或 API 的支援資訊,請參閱 Microsoft 產品生命週期。 如需更新至最新版IoT Edge的詳細資訊,請參閱 更新IoT Edge。
本文使用信任平台模組 (TPM) 來提供自動佈建 Azure IoT Edge for Linux 裝置的指示。 您可以使用 Azure IoT 中樞裝置佈建服務自動佈建 IoT Edge 裝置。 如果您不熟悉自動佈建程序,請先檢閱佈建概觀再繼續。
本文概述兩種方法。 請根據您的解決方案架構選取您的喜好設定:
- 使用實體 TPM 硬體自動佈建 Linux 裝置。 例如,Infineon OPTIGA™ TPM SLB 9670。
- 使用已啟用 Hyper-V 的 Windows 開發電腦上執行的模擬 TPM,自動佈建 Linux 虛擬機器 (VM)。 我們僅建議使用此方法作為測試案例。 模擬 TPM 並不提供與實體 TPM 相同的安全性。
指示會根據您的方法而有所不同,因此請確定您位於正確的索引標籤上。
必要條件
雲端資源
- 使用中的 IoT 中樞
- Azure 中的 IoT 中樞裝置佈建服務執行個體,其與您的 IoT 中樞連結
- 如果您沒有裝置佈建服務執行個體,則可以遵循 IoT 中樞裝置佈建服務快速入門建立新的 IoT 中樞裝置佈建服務和連結 IoT 中樞與裝置佈建服務章節的指示。
- 裝置佈建服務開始執行之後,請從 [概觀] 頁面中複製 [識別碼範圍] 的值。 當您設定 IoT Edge 執行階段時會用到此值。
裝置需求
要作為 IoT Edge 裝置的實體 Linux 裝置。
如果您是裝置製造商,請參閱將 TPM 整合至製造程序中的指引。
注意
當您搭配裝置佈建服務並使用 TPM 證明時,需要 TPM 2.0。
當您使用 TPM 時,僅可建立個別裝置佈建服務註冊,無法建立群組裝置佈建服務註冊。
設定您的裝置
擷取 TPM 的佈建資訊
在本節中,您會建置可用來擷取 TPM 註冊標識碼和簽署密鑰的工具。
登入您的裝置,然後遵循設定 Linux 開發環境中的步驟來安裝和建置適用於 C 的 Azure IoT 裝置 SDK。
執行下列命令來建置 SDK 工具,以擷取 TPM 的裝置布建資訊。
cd azure-iot-sdk-c/cmake cmake -Duse_prov_client:BOOL=ON .. cd provisioning_client/tools/tpm_device_provision make sudo ./tpm_device_provision
輸出視窗會顯示裝置的 註冊標識碼 和 簽署金鑰。 當您在裝置佈建服務中建立裝置的個別註冊時,請複製這些值以供稍後使用。
在您擁有註冊識別碼和簽署金鑰之後,即可繼續。
提示
如果您不想使用 TPM2 軟體工具來擷取資訊,則需要尋找其他方法來取得佈建資訊。 簽署金鑰是每個 TPM 晶片或從與其相關聯 TPM 晶片製造商所取得的唯一簽署金鑰。 您可以為 TPM 裝置衍生唯一的註冊識別碼。 例如,如上所示,您可以建立簽署金鑰的 SHA-256 雜湊。
建立裝置佈建服務註冊
使用 TPM 的佈建資訊,在裝置佈建服務中建立個別註冊。
在裝置佈建服務中建立註冊時,您就有機會宣告初始裝置對應項狀態。 在裝置對應項中,您可以根據解決方案中使用的任何計量 (例如區域、環境、位置或裝置類型) 來設定標記,來將裝置分組。 這些標記會用來建立自動部署。
提示
本文中的步驟適用於 Azure 入口網站,但您也可以使用 Azure CLI 建立個別註冊。 如需詳細資訊,請參閱 az iot dps enrollment。 CLI 命令中會使用啟用 Edge 旗標來指定 IoT Edge 裝置的註冊。
在 Azure 入口網站中,前往 IoT 中樞裝置佈建服務的執行個體。
在 [設定] 下方,選取 [管理註冊]。
選取 [新增個別註冊],然後完成下列步驟以設定註冊:
針對 [機制],選取 [TPM]。
提供您從 VM 或實體裝置複製的簽署金鑰和註冊識別碼。
視需要提供裝置的識別碼。 如果您未提供裝置識別碼,則會使用註冊識別碼。
選取 [True] 以宣告您的 VM 或實體裝置為 IoT Edge 裝置。
選擇您要將裝置連線到的連結 IoT 中樞,或選取 [連結到新的 IoT 中樞]。 您可以選擇多個中樞,然後系統會根據所選取的指派原則,將裝置指派給其中一個中樞。
視需要將標記值新增至 [初始裝置對應項狀態]。 您可以使用標記將裝置群組設定為模組部署的目標。 如需詳細資訊,請參閱大規模部署 IoT Edge 模組。
選取 [儲存]。
現在此裝置已有註冊,因此 IoT Edge 執行階段可以在安裝期間自動佈建此裝置。
安裝 IoT Edge
在本節中,您會準備適用於 IoT Edge 的 Linux VM 或實體裝置。 然後,您會安裝 IoT Edge。
執行下列命令以新增套件存放庫,然後將 Microsoft 套件簽署金鑰新增至信任金鑰的清單。
重要
在 2022 年 6 月 30 日,已從第 1 層作業系統支援清單中淘汰 Raspberry Pi OS Stretch。 若要避免潛在的安全性弱點,請將主機作業系統更新為 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 CE/EE 容器映像與 Moby 執行階段相容。
安裝 Moby 引擎。
sudo apt-get update; \
sudo apt-get install moby-engine
成功安裝Moby引擎之後,請將它設定為使用 local
記錄驅動程式 作為記錄機制。 若要深入了解記錄設定,請參閱生產部署檢查清單。
在建立或開啟 Docker 精靈的組態檔
/etc/docker/daemon.json
。將預設記錄驅動程式設定為
local
記錄驅動程式,如下列範例所示。{ "log-driver": "local" }
重新啟動容器引擎,讓變更生效。
sudo systemctl restart docker
提示
如果您在安裝 Moby 容器引擎時發生錯誤,請確認您的 Linux 核心與 Moby 相容。 某些嵌入式裝置製造商會提供包含自訂 Linux 核心的裝置影像,而不需要容器引擎相容性所需的功能。 執行下列命令,此命令會使用 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
下的項目是否已啟用。 如果您缺少功能,請從原始碼重建核心,然後選取相關聯的模組以納入適當的核心 .config 來加以啟用。同樣地,如果您使用defconfig
或menuconfig
等核心設定產生器,請尋找並啟用個別的功能,並據此重建您的核心。 一旦您部署新修改過的核心之後,請再次執行檢查設定指令碼,以確認所有必要的功能都已成功啟用。
安裝 IoT Edge 執行階段
IoT Edge 安全性精靈提供及維護 IoT Edge 裝置的安全性標準。 精靈 (daemon) 會在每次開機時啟動,並透過啟動 IoT Edge 執行階段的其餘部分來引導啟動裝置。
本節中的步驟代表在具有因特網連線的裝置上安裝最新版本的一般程式。 如果您需要安裝特定版本,例如發行前版本,或需要在離線時安裝,請遵循本文稍後的離線或特定版本安裝步驟。
安裝 IoT Edge 1.1.* 版以及 libiothsm-std 套件:
sudo apt-get update; \
sudo apt-get install iotedge
注意
IoT Edge 1.1 版是 IoT Edge 的長期支援分支。 如果您執行舊版,建議您安裝或更新至最新的修補程式,因為不再支援舊版。
使用雲端身分識別來佈建裝置
在裝置上安裝執行階段之後,請使用裝置用來連線到裝置佈建服務和 IoT 中樞的資訊,來設定裝置。
了解先前收集的裝置佈建服務識別碼範圍和裝置註冊識別碼。
開啟IoT Edge裝置上的組態檔。
sudo nano /etc/iotedge/config.yaml
尋找檔案的布建組態區段。 取消註解 TPM 佈建的行,並確定已為任何其他佈建行加上註解。
這
provisioning:
一行應該沒有前面的空格符,而巢狀項目應該縮排兩個空格。# DPS TPM provisioning configuration provisioning: source: "dps" global_endpoint: "https://global.azure-devices-provisioning.net" scope_id: "SCOPE_ID_HERE" attestation: method: "tpm" registration_id: "REGISTRATION_ID_HERE" # always_reprovision_on_startup: true # dynamic_reprovisioning: false
使用您的裝置佈建服務和裝置資訊更新
scope_id
和registration_id
的值。 此scope_id
值是裝置佈建服務執行個體概觀頁面中的 [識別碼範圍]。或者,使用
always_reprovision_on_startup
或dynamic_reprovisioning
行來設定裝置的重新佈建行為。 如果裝置設定為在啟動時重新佈建,它一律會先嘗試使用 DPS 進行布建,然後在失敗時回復到布建備份。 如果裝置設定為動態重新布建本身,如果偵測到重新布建事件,IoT Edge(和所有模組)將會重新啟動並重新佈建,就像裝置從一個 IoT 中樞 移到另一個。 具體而言,IoT Edge 會檢查 SDK 中是否有bad_credential
或device_disabled
錯誤,以偵測重新佈建事件。 若要手動觸發此事件,請在 IoT 中樞 中停用裝置。 如需詳細資訊,請參閱 IoT 中樞裝置重新佈建概念。儲存並關閉檔案。
為 IoT Edge 指定對 TPM 的存取權
IoT Edge 運行時間必須存取 TPM,才能自動布建您的裝置。
您可以覆寫 systemd 設定,讓 iotedge
服務具有根許可權,以授與 IoT Edge 運行時間的 TPM 存取權。 如果不想提高服務權限,也可以使用下列步驟,手動提供 TPM 存取權。
建立讓 IoT Edge 執行階段能夠存取
tpm0
和tpmrm0
的新規則。sudo touch /etc/udev/rules.d/tpmaccess.rules
開啟規則檔案。
sudo nano /etc/udev/rules.d/tpmaccess.rules
將下列存取資訊複製到規則檔案中。
tpmrm0
可能不存在於使用 4.12 之前核心的裝置上。 沒有tpmrm0
的裝置將會安全地忽略該規則。# allow iotedge access to tpm0 KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="iotedge", MODE="0600" KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="iotedge", MODE="0600"
儲存並結束檔案。
觸發
udev
系統以評估新規則。/bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrm
確認規則已成功套用。
ls -l /dev/tpm*
成功的輸出看起來會像下面這樣:
crw------- 1 iotedge root 10, 224 Jul 20 16:27 /dev/tpm0 crw------- 1 iotedge root 10, 224 Jul 20 16:27 /dev/tpmrm0
如果未發現正確權限套用完成,請嘗試重新啟動電腦,以重新整理
udev
。重新啟動IoT Edge運行時間,以便挑選您在裝置上所做的所有組態變更。
sudo systemctl restart iotedge
確認安裝成功
如果您尚未重新啟動IoT Edge運行時間,讓它挑選您在裝置上所做的所有組態變更。
sudo systemctl restart iotedge
確認 IoT Edge 執行階段正在執行。
sudo systemctl status iotedge
檢查精靈記錄。
journalctl -u iotedge --no-pager --no-full
如果您看到佈建錯誤,可能是因為組態變更尚未生效。 再次嘗試重新啟動IoT Edge精靈。
sudo systemctl daemon-reload
或者,請嘗試重新啟動 VM,以確認變更是否會在重新啟動後生效。
如果執行階段順利啟動,您可以移至您的 IoT 中樞,並看到新裝置已自動佈建。 現在您的裝置已準備好執行 IoT Edge 模組。
列出執行中的模組。
iotedge list
您可以驗證系統是否已使用您在裝置佈建服務中所建立的個別註冊。 移至 Azure 入口網站中您的裝置佈建服務執行個體。 開啟所建立個別註冊的註冊詳細資料。 請注意,註冊狀態是已指派,並且會列出裝置識別碼。
下一步
佈建新裝置時,裝置佈建服務註冊程序可讓您同時設定裝置識別碼和裝置對應項標記。 您可以使用自動裝置管理來使用這些值鎖定個別裝置或裝置群組。
了解如何使用 Azure 入口網站大規模部署和監視 IoT Edge 模組,或使用 Azure CLI 執行相同作業。