提供 Azure IoT Edge 模組存取裝置本機存放區的權限
適用於: IoT Edge 1.5 IoT Edge 1.4
重要
IoT Edge 1.5 LTS 是 支援的版本。 自 2024 年 11 月 12 日起,IoT Edge 1.4 LTS 已結束生命週期。 如果您是舊版,請參閱更新 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 儲存體來將資料儲存在邊緣。