使用對稱金鑰在 Linux 上建立及佈建 IoT Edge 裝置
適用於: IoT Edge 1.1
重要
IoT Edge 1.1 終止支援日期為 2022 年 12 月 13 日。 如需此產品、服務、技術或 API 的支援資訊,請參閱 Microsoft 產品生命週期。 如需更新至最新版IoT Edge的詳細資訊,請參閱 更新IoT Edge。
本文提供註冊及佈建 Linux IoT Edge 裝置 (包括安裝 IoT Edge) 的端對端指示。
連線到 IoT 中樞的每個裝置都有裝置識別碼,可用來追蹤雲端到裝置或裝置到雲端的通訊。 您可以使用連線資訊來設定裝置,其中包括 IoT 中樞主機名稱、裝置識別碼,以及裝置用來向 IoT 中樞驗證的資訊。
本文中的步驟會帶您完成稱為手動佈建的程序,您會在此程序中將單一裝置連線到其 IoT 中樞。 針對手動佈建,您有兩個選項可用來驗證 IoT Edge 裝置:
對稱金鑰:當您在 IoT 中樞中建立新的裝置身分識別時,服務會建立兩個金鑰。 您會在裝置上放置其中一個金鑰,並在驗證時呈現 IoT 中樞的金鑰。
這個驗證方法上手較為快速,但並非是安全的方法。
X.509 自我簽署:您可以建立兩個 X.509 身分識別憑證,並將其置於裝置上。 當您在 IoT 中樞中建立新的裝置身分識別時,您會從這兩個憑證提供指紋。 當裝置向 IoT 中樞進行驗證時,其會顯示一個憑證,而 IoT 中樞會確認憑證符合其指紋。
此驗證方法較安全,建議用於實際執行案例。
本文說明如何使用對稱金鑰做為驗證方法。 如果您想要使用 X.509 憑證,請參閱使用 X.509 憑證在 Linux 上建立及佈建 IoT Edge 裝置。
注意
如果您有許多裝置可設定,且不想手動佈建每個裝置,請使用下列其中一篇文章來了解 IoT Edge 如何與 IoT 中樞裝置佈建服務搭配運作:
必要條件
本文說明如何註冊 IoT Edge 裝置及在裝置上安裝 IoT Edge。 完成這些工作有不同的必要條件和公用程式。 在繼續之前,請先確定您已準備好所有必要條件。
裝置管理工具
您可以使用 Azure 入口網站、Visual Studio Code 或 Azure CLI 來完成註冊裝置的步驟。 每個公用程式都有自己的必要條件:
Azure 訂閱的免費或標準 IoT 中樞。
裝置需求
X64、ARM32 或 ARM64 Linux 裝置。
Microsoft 發佈各種作業系統的安裝套件。
如需生產情境下,何種 Windows 作業系統可供使用的相關資訊,請參閱 Azure IoT Edge 支援系統。
登記裝置
您可以根據喜好,使用 Azure 入口網站、Visual Studio Code 或Azure CLI來註冊裝置。
在 Azure 入口網站的 IoT 中樞中,您會在未啟用 Edge 的 IOT 裝置上分別建立及管理 IoT Edge 裝置。
登入 Azure 入口網站,然後瀏覽至 IoT 中樞。
在左側窗格中,從功能表中選取 [裝置],然後選取 [新增裝置]。
在 [建立裝置] 頁面上,提供下列資訊:
- 建立描述性裝置識別碼。 記下此裝置識別碼,因為您稍後會使用它。
- 核取 [IoT Edge 裝置] 核取方塊。
- 選取 [對稱金鑰] 作為 [驗證類型]。
- 使用預設設定來自動產生驗證密鑰,並將新裝置連線到您的中樞。
選取 [儲存]。
現在您已在 IoT 中樞內註冊裝置,接著請擷取用來完成安裝及佈建 IoT Edge 執行階段的資訊。
檢視已註冊的裝置並擷取佈建資訊
使用對稱金鑰驗證的裝置需要其連接字串,才能完成 IoT Edge 執行階段的安裝和佈建。
連線至 IoT 中樞且已啟用 Edge 的裝置都列於 [裝置] 頁面。 您可以依 Iot Edge 裝置類型來篩選清單。
當您準備好開始設定裝置時,需要連接字串才能利用實體裝置在 IoT 中樞中的身分識別來連結實體裝置。
使用對稱金鑰進行驗證的裝置,可在入口網站中複製其連接字串。
- 從入口網站的 [ 裝置 ] 頁面,從清單中選取 [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 Edge 執行階段已安裝在您的裝置上,您已準備好進行下一個步驟,也就是使用裝置的雲端身分識別和驗證資訊來設定裝置。
在 IoT Edge 裝置上,開啟設定檔。
sudo nano /etc/iotedge/config.yaml
尋找檔案的佈建設定,並 使用連接字串 區段取消註解手動佈建設定 (若尚未取消註解)。
# Manual provisioning configuration using a connection string
provisioning:
source: "manual"
device_connection_string: "ADD_DEVICE_CONNECTION_STRING_HERE"
使用 IoT Edge 裝置的連接字串來更新 device_connection_string 的值。 請確定已批注化任何其他布建區段。請確定布 建: 行前面沒有空格符,且巢狀專案會縮排兩個空格。
若要將剪貼簿內容貼到 Nano Shift+Right Click
或按 Shift+Insert
。
儲存並關閉檔案。
CTRL + X
、 、 Y
Enter
在組態檔中輸入佈建資訊之後,請重新啟動精靈:
sudo systemctl restart iotedge
確認設定成功
確認您的 IoT Edge 裝置上已成功安裝並設定執行階段。
提示
您需要有較高的權限才能執行 iotedge
命令。 當您在安裝 IoT Edge 執行階段之後登出機器,並第一次重新登入時,您的權限將會自動更新。 在那之前,請在這些命令前面使用 sudo
。
確認 IoT Edge 系統服務正在執行。
sudo systemctl status iotedge
如果您需要對服務進行疑難排解,請擷取服務記錄。
journalctl -u iotedge
使用 check
工具來驗證裝置的設定和連線狀態。
sudo iotedge check
提示
一律使用 sudo
來執行檢查工具,即使您的權限更新也一樣。 此工具需要較高的權限,才能存取組態檔,以確認組態狀態。
注意
在新佈建的裝置上,您可能會看到與 IoT Edge 中樞相關的錯誤:
× 實際執行整備程度:Edge Hub 的儲存體目錄會保存在主機檔案系統上 - 錯誤
無法檢查 edgeHub 容器的目前狀態
新佈建的裝置上預期會發生此錯誤,因為 IoT Edge 中樞模組未在執行中。 若要解決錯誤,請在 IoT 中樞內設定裝置的模組並建立部署。 建立裝置的部署會啟動裝置上的模組,包括 IoT Edge 中樞模組。
檢視在 IoT Edge 裝置上執行的所有模組。 當服務啟動時,您應該只會看到 edgeAgent 模組正在執行。 edgeAgent 模組預設會執行,且有助於安裝及啟動部署至裝置的任何其他模組。
sudo iotedge list
當您建立新的 IoT Edge 裝置時,其會在 Azure 入口網站中顯示狀態碼 417 -- The device's deployment configuration is not set
。 此狀態為正常,表示裝置已就緒可接收模組部署。
離線或特定版本安裝 (選擇性)
本節中的步驟適用於標準安裝步驟未涵蓋的情況。 可能包括:
- 離線時安裝 IoT Edge
- 安裝候選版
如果您想要安裝的特定 Azure IoT Edge 執行階段版本無法透過套件管理員取得,請使用本節中的步驟。 Microsoft 套件清單只包含一組有限的最新版本及其子版本,因此這些步驟適用於想要安裝較舊版本或候選版本的任何人員。
您可以使用 curl 命令,直接從 IoT Edge GitHub 存放庫將元件檔案設為目標。
瀏覽至 Azure IoT Edge 版本,並尋找您想要設為目標的版本。
展開該版本的 [資產] 區段。
每個版本都應該有IoT Edge安全性精靈和 hsmlib 的新檔案。 如果您要在離線裝置上安裝 IoT Edge,請事先下載這些檔案。 否則,請使用下列命令來更新這些元件。
尋找符合IoT Edge裝置架構的libiothsm-std 檔案。 以滑鼠右鍵按一下檔案連結,並複製連結位址。
使用下列命令中的複製連結來安裝該版本的 hsmlib:
curl -L <libiothsm-std_link> -o libiothsm-std.deb && sudo apt-get install ./libiothsm-std.deb
尋找符合IoT Edge裝置架構的iotedge檔案。 以滑鼠右鍵按一下檔案連結,並複製連結位址。
使用下列命令中的複製連結來安裝該版本的 IoT Edge 安全性精靈。
curl -L iotedge_link_here -o iotedge.deb && sudo apt-get install ./iotedge.deb
現在,容器引擎和 IoT Edge 執行階段已安裝在您的裝置上,您已準備好進行下一個步驟,也就是使用裝置的雲端身分識別來佈建裝置。
解除安裝 IoT Edge
如果您想要從裝置移除 IoT Edge 安裝,請使用下列命令。
移除 IoT Edge 執行階段。
sudo apt-get autoremove iotedge
IoT Edge 執行階段移除後,其所建立的任何容器隨即停止,但仍會存在於您的裝置上。 檢視所有容器以查看哪些容器保留下來。
sudo docker ps -a
刪除您裝置中的容器,包括兩個執行階段容器。
sudo docker rm -f <container name>
最後,移除裝置中的容器執行階段。
sudo apt-get autoremove --purge moby-engine