提供 Azure IoT Edge 模組存取裝置本機存放區的權限
適用於: IoT Edge 1.5 IoT Edge 1.4
重要
IoT Edge 1.5 LTS 和 IoT Edge 1.4 LTS 為支援的版本。 IoT Edge 1.4 LTS 於 2024 年 11 月 12 日結束生命週期。 如果您是舊版,請參閱更新 IoT Edge。
為提升可靠性 (特別是在離線操作時),IoT Edge 模組可以在主機 IoT Edge 裝置上使用儲存體。
設定系統模組以使用永續性儲存體
根據預設,IoT Edge 系統模組 (IoT Edge 代理程式和 IoT Edge 中樞) 會將狀態儲存在其容器執行個體的暫時檔案系統中。 當容器執行個體回收時,此狀態會遺失,例如,當模組映像版本或 createOptions 更新時。
針對生產案例,請使用主機檔案系統上的永續性儲存位置來儲存系統模組狀態。 這麼做可改善解決方案健全性和雲端訊息的傳遞保證。
若要設定系統模組以使用永續性儲存體:
針對 IoT Edge 中樞和 IoT Edge 代理程式,新增名為 StorageFolder 的環境變數,其指向模組中的目錄。
針對 IoT Edge 中樞和 IoT Edge 代理程式,新增繫結以便將主機電腦上的本機目錄連線到模組中的目錄。 例如:
以您的主機和模組儲存體路徑取代
<HostStoragePath>
和<ModuleStoragePath>
。 這兩個值都必須是絕對路徑,而且<HostStoragePath>
必須存在。
您可以直接在部署資訊清單中設定本機儲存體。 例如,如果您想要對應下列儲存體路徑:
模組 | 主機儲存體路徑 | 模組儲存體路徑 |
---|---|---|
edgeAgent | /srv/edgeAgent | /tmp/edgeAgent |
edgeHub | /srv/edgeHub | /tmp/edgeHub |
您的部署資訊清單如下所示:
"systemModules": {
"edgeAgent": {
"env": {
"StorageFolder": {
"value": "/tmp/edgeAgent"
}
},
"settings": {
"image": "mcr.microsoft.com/azureiotedge-agent:1.5",
"createOptions": "{\"HostConfig\":{\"Binds\":[\"/srv/edgeAgent:/tmp/edgeAgent\"]}}"
},
"type": "docker"
},
"edgeHub": {
"env": {
"StorageFolder": {
"value": "/tmp/edgeHub"
}
},
"restartPolicy": "always",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.5",
"createOptions": "{\"HostConfig\":{\"Binds\":[\"/srv/edgeHub:/tmp/edgeHub\"],\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
},
"status": "running",
"type": "docker"
}
}
注意
如果您使用 snap 安裝,請確定您選擇可供 snap 存取的主機儲存體路徑。 例如: $HOME/snap/azure-iot-edge/current/modules/
。
自動主機系統權限管理
在 1.4 版和更新版本上,不需要手動設定支援 StorageFolder
的主機儲存體擁有權或權限。 在啟動期間,系統模組會自動管理權限和擁有權。
注意
主機繫結儲存體的自動權限管理僅適用於系統模組、IoT Edge 代理程式和 Edge 中樞。 針對自訂模組,如果自訂模組容器未以 root
使用者身分執行,則需要手動管理繫結主機儲存體的權限和擁有權。
將模組儲存體連結至自訂模組的裝置儲存體
如果您的自訂模組需要存取主機檔案系統上的永續性儲存體,請使用模組的建立選項,將模組容器中的儲存資料夾繫結至主機機器上的資料夾。 例如:
{
"HostConfig": {
"Mounts": [
{
"Target": "<ModuleStoragePath>",
"Source": "<HostStoragePath>",
"Type": "bind",
"ReadOnly": false
}
]
}
}
使用您的主機和模組儲存體路徑取代 <HostStoragePath>
和 <ModuleStoragePath>
;這兩個值都必須是絕對路徑。 如需選項詳細資料,請參閱 Docker 引擎掛接規格。
主機系統權限
請確定模組使用的使用者設定檔具有主機系統目錄的必要讀取、寫入和執行權限。 根據預設,容器會以已經有必要權限的 root
使用者身分執行。 但模組的 Dockerfile 可能會指定使用非根使用者,在此情況下,必須手動設定主機儲存體權限。
有數種方式可以管理 Linux 系統上的目錄權限,包括使用 chown
來變更目錄擁有者,然後使用 chmod
變更權限。 例如,若要允許主機儲存體存取以非根使用者識別碼 1000 的身分執行的模組,請使用下列命令:
sudo chown 1000 <HostStoragePath>
sudo chmod 700 <HostStoragePath>
模組儲存體中的加密資料
當模組叫用 IoT Edge 精靈的工作負載 API 來加密資料時,加密金鑰會使用模組識別碼和模組世代識別碼來衍生。 如果模組已從部署中移除,而具有相同模組識別碼的另一個模組稍後會部署到相同的裝置,則會使用世代識別碼來保護祕密。 您可以使用 Azure CLI 命令 az iot hub module-identity show 來檢視模組的世代識別碼。
如果您想要跨世代在模組之間共用檔案,則這些模組不得包含任何祕密,否則將無法解密。
下一步
如需從模組存取主機儲存體的其他範例,請參閱在 IoT Edge 上使用 Azure Blob 儲存體來將資料儲存在邊緣。