使用 X.509 憑證在 Windows 裝置上建立及布建適用於 Linux 的 IoT Edge

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

重要

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

本文提供在 Windows 裝置上註冊和布建適用於 Linux 的 IoT Edge 的端對端指示。

線上到 IoT 中樞的每個裝置都有用來追蹤雲端到裝置或裝置到雲端通訊的裝置識別碼。 您可以使用其連線資訊來設定裝置,其中包括IoT中樞主機名、裝置識別碼,以及裝置用來驗證 IoT 中樞的資訊。

本文中的步驟會逐步解說一個稱為手動布建的程式,您可以在其中將單一裝置連線到其 IoT 中樞。 針對手動布建,您有兩個選項可用來驗證 IoT Edge 裝置:

  • 對稱金鑰:當您在 IoT 中樞 中建立新的裝置身分識別時,服務會建立兩個密鑰。 您會將其中一個金鑰放在裝置上,並在驗證時呈現要 IoT 中樞 的密鑰。

    這個驗證方法的啟動速度較快,但不是那麼安全。

  • X.509 自我簽署:您建立兩個 X.509 身分識別憑證,並將其放在裝置上。 當您在 IoT 中樞 中建立新的裝置身分識別時,您會從這兩個憑證提供指紋。 當裝置向 IoT 中樞 進行驗證時,它會顯示一個憑證,IoT 中樞 驗證憑證是否符合其指紋。

    此驗證方法更安全,而且建議用於生產案例。

本文涵蓋使用 X.509 憑證作為驗證方法。 如果您想要使用對稱密鑰,請參閱 使用對稱密鑰在 Windows 裝置上建立和布建適用於 Linux 的 IoT Edge。

注意

如果您有許多裝置要設定且不想手動布建每個裝置,請使用下列其中一篇文章來瞭解 IoT Edge 如何與 IoT 中樞 裝置佈建服務搭配運作:

必要條件

本文涵蓋在 Windows 上註冊 IoT Edge 裝置及安裝適用於 Linux 的 IoT Edge。 這些工作有不同的必要條件和公用程式,可用來完成這些工作。 在繼續之前,請確定您已涵蓋所有必要條件。

裝置管理工具

您可以使用 Azure 入口網站Visual Studio CodeAzure CLI 來註冊裝置的步驟。 每個公用程式都有自己的必要條件,或可能需要安裝:

Azure 訂用帳戶中的免費或標準 IoT 中樞

裝置需求

具有下列最低需求的 Windows 裝置:

  • 系統需求

    • Windows 101/11 (專業版、企業版、IoT 企業版)
    • Windows Server 20191/2022
      1 已安裝所有目前累積更新的 Windows 10 和 Windows Server 2019 最低組建 17763。
  • 硬體需求

    • 最小可用記憶體:1 GB
    • 最小可用磁碟空間:10 GB
  • 虛擬化支援

    • 在 Windows 10 上,啟用 Hyper-V。 如需詳細資訊,請參閱 在 Windows 10 上安裝 Hyper-V。
    • 在 Windows Server 上安裝 Hyper-V 角色,並建立預設網路交換器。 如需詳細資訊,請參閱 Windows 上適用於 Linux 的 Azure IoT Edge 巢狀虛擬化。
    • 在虛擬機上,設定巢狀虛擬化。 如需詳細資訊,請參閱 巢狀虛擬化
  • 網路支援

    • Windows Server 未隨附預設參數。 您必須先建立虛擬交換器,才能將 EFLOW 部署至 Windows Server 裝置。 如需詳細資訊,請參閱 在 Windows 上建立 Linux 的虛擬交換器。
    • Windows 桌面版本隨附可用於 EFLOW 安裝的預設參數。 如有需要,您可以建立自己的自定義虛擬交換器。

提示

如果您想要在 Windows 部署上的適用於 Linux 的 Azure IoT Edge 中使用 GPU 加速的 Linux 模組 ,有幾個組態選項需要考慮。

您必須根據您的 GPU 架構安裝正確的驅動程式,而且您可能需要存取 Windows 測試人員計劃組建。 若要判斷您的設定需求並滿足這些必要條件,請參閱 Windows 上適用於 Linux 的 Azure IoT Edge GPU 加速。

請確定您花點時間滿足 GPU 加速的必要條件。 如果您決定要在安裝期間加速 GPU,則必須重新啟動安裝程式。

開發人員工具

準備您的目標裝置,以在 Windows 上安裝適用於 Linux 的 Azure IoT Edge,以及部署 Linux 虛擬機:

  1. 將目標裝置上的執行原則設定為 AllSigned。 您可以使用下列命令,在提升權限的 PowerShell 提示字元中檢查目前的執行原則:

    Get-ExecutionPolicy -List
    

    如果 的執行原則 local machine 不是 AllSigned,您可以使用下列項目來設定執行原則:

    Set-ExecutionPolicy -ExecutionPolicy AllSigned -Force
    

如需 Windows PowerShell 模組上適用於 Linux 的 Azure IoT Edge 模組的詳細資訊,請參閱 PowerShell 函式參考

產生裝置身分識別憑證

使用 X.509 憑證手動布建需要 IoT Edge 1.0.10 版或更新版本。

當您使用 X.509 憑證布建 IoT Edge 裝置時,您可以使用所謂的 裝置身分識別憑證。 此憑證僅用於布建IoT Edge裝置,並使用 Azure IoT 中樞驗證裝置。 它是未簽署其他憑證的分葉憑證。 裝置身分識別憑證與IoT Edge裝置向模組或下游裝置呈現以進行驗證的證書頒發機構單位 (CA) 憑證不同。

針對 X.509 憑證驗證,會以取自裝置身分識別憑證的指紋形式提供每個裝置的驗證資訊。 這些指紋會在裝置註冊時 IoT 中樞,讓服務可以在裝置連線時辨識裝置。

如需如何在IoT Edge裝置中使用CA憑證的詳細資訊,請參閱 瞭解 Azure IoT Edge 如何使用憑證

您需要下列檔案,才能使用 X.509 手動布建:

  • 兩個裝置身分識別憑證及其相符的私鑰憑證,格式為 .cer 或 .pem 格式。 您需要兩個裝置身分識別憑證來進行憑證輪替。 最佳做法是準備兩個不同的裝置身分識別憑證,其到期日不同。 如果一個憑證過期,另一個憑證仍然有效,並讓您有時間輪替過期的憑證。

    一組憑證和金鑰檔案會提供給 IoT Edge 執行時間。 當您建立裝置身分識別憑證時,請使用您希望裝置在IoT中樞擁有的裝置識別碼來設定憑證通用名稱 (CN)。

  • 從這兩個裝置身分識別憑證擷取的指紋。 IoT 中樞 註冊 IoT Edge 裝置時需要兩個指紋。 您只能使用一個憑證進行註冊。 若要使用單一憑證,請在註冊裝置時,為主要和次要指紋設定相同的憑證指紋。

    指紋值是 SHA-1 哈希的 40-hex 字元,SHA-256 哈希為 64-hex 字元。 這兩個指紋都會在裝置註冊時提供給 IoT 中樞。

    從憑證擷取指紋的其中一種方式是使用下列 openssl 命令:

    openssl x509 -in <certificate filename>.pem -text -fingerprint
    

    指紋包含在此命令的輸出中。 例如:

    SHA1 Fingerprint=D2:68:D9:04:9F:1A:4D:6A:FD:84:77:68:7B:C6:33:C0:32:37:51:12
    

如果您沒有可用的憑證,您可以 建立示範憑證來測試 IoT Edge 裝置功能。 依照該文章中的指示來設定憑證建立腳本、建立根 CA 憑證,以及建立 IoT Edge 裝置身分識別憑證。 若要進行測試,您可以在 IoT 中樞 中註冊裝置時,為主要和次要指紋值建立單一裝置身分識別憑證,並使用相同的指紋。

註冊您的裝置

您可以根據喜好設定,使用 Azure 入口網站Visual Studio CodeAzure CLI 來註冊您的裝置。

在 Azure 入口網站的IoT中樞中,IoT Edge裝置會與未啟用邊緣的IoT裝置分開建立和管理。

  1. 登入 Azure 入口網站 並流覽至IoT中樞。

  2. 在左窗格中,從功能表中選取 [裝置 ],然後選取 [ 新增裝置]。

  3. 在 [ 建立裝置 ] 頁面上,提供下列資訊:

    • 建立描述性裝置標識碼。 記下此裝置識別碼,以供稍後使用。
    • 核取 [ IoT Edge 裝置 ] 複選框。
    • 選取 [X.509 自我簽署 ] 作為驗證類型。
    • 提供主要和次要身分識別憑證指紋。 指紋值是 SHA-1 哈希的 40-hex 字元,SHA-256 哈希為 64-hex 字元。 Azure 入口網站 僅支援十六進位值。 在入口網站中輸入數據行分隔符和空格之前,請先從指紋值中移除數據行分隔符和空格。 例如, D2:68:D9:04:9F:1A:4D:6A:FD:84:77:68:7B:C6:33:C0:32:37:51:12 輸入為 D268D9049F1A4D6AFD8477687BC633C032375112

    提示

    如果您要測試並使用一個憑證,則可以針對主要和次要指紋使用相同的憑證。

  4. 選取 [儲存]。

現在您已在 IoT 中樞 中註冊裝置,請擷取您用來完成IoT Edge運行時間安裝和布建的資訊。

檢視已註冊的裝置並擷取布建資訊

使用 X.509 憑證驗證的裝置需要其 IoT 中樞名稱、裝置名稱和其憑證檔案,才能完成 IoT Edge 運行時間的安裝和布建。

線上到 IoT 中樞的邊緣裝置會列在 [裝置 ] 頁面上。 您可以依裝置類型 IoT Edge 裝置來篩選清單。

安裝IoT Edge

在目標裝置上的 Windows 上部署適用於 Linux 的 Azure IoT Edge。

注意

下列 PowerShell 程式概述如何在 Windows 上將適用於 Linux 的 IoT Edge 部署至本機裝置。 若要使用 PowerShell 部署至遠端目標裝置,您可以使用 遠端 PowerShell 來建立遠端裝置的連線,並在該裝置上遠端執行這些命令。

  1. 在提升許可權的 PowerShell 工作階段中,根據您的目標裝置架構執行下列其中一個命令,以在 Windows 上下載適用於 Linux 的 IoT Edge。

    • X64/AMD64

      $msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))
      $ProgressPreference = 'SilentlyContinue'
      Invoke-WebRequest "https://aka.ms/AzEFLOWMSI_1_4_LTS_X64" -OutFile $msiPath
      
    • ARM64

      $msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))
      $ProgressPreference = 'SilentlyContinue'
      Invoke-WebRequest "https://aka.ms/AzEFLOWMSI_1_4_LTS_ARM64" -OutFile $msiPath
      
  2. 在裝置上的 Windows 上安裝適用於 Linux 的 IoT Edge。

    Start-Process -Wait msiexec -ArgumentList "/i","$([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))","/qn"
    

    您可以在 Windows 安裝和 VHDX 目錄上指定適用於 Linux 的自定義 IoT Edge,方法是將 和 VHDXDIR="<FULLY_QUALIFIED_PATH>" 參數新增INSTALLDIR="<FULLY_QUALIFIED_PATH>"至 install 命令。 例如,如果您想要使用 D:\EFLOW 資料夾進行安裝和 VHDX 的 D:\EFLOW-VHDX ,您可以使用下列 PowerShell Cmdlet。

    Start-Process -Wait msiexec -ArgumentList "/i","$([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))","/qn","INSTALLDIR=D:\EFLOW", "VHDXDIR=D:\EFLOW-VHDX"
    
  3. 如果目標裝置尚未執行,請將目標裝置上的執行原則設定為 AllSigned 。 請參閱命令的 PowerShell 必要條件,以檢查目前的執行原則,並將執行原則設定為 AllSigned

  4. 在 Windows 部署上建立適用於 Linux 的 IoT Edge。 部署會建立Linux虛擬機,並為您安裝IoT Edge運行時間。

    Deploy-Eflow
    

    提示

    根據預設, Deploy-Eflow 命令會使用 1 GB 的 RAM、1 個 vCPU 核心和 16 GB 的磁碟空間來建立 Linux 虛擬機。 不過,VM 所需的資源高度相依於您部署的工作負載。 如果您的 VM 沒有足夠的記憶體來支援您的工作負載,它將無法啟動。

    您可以使用命令的選擇性參數來自定義虛擬機的可用資源 Deploy-Eflow 。 這是在具有最低硬體需求之裝置上部署 EFLOW 的必要專案。

    例如,下列命令會建立具有1個 vCPU 核心的虛擬機、1 GB 的 RAM(以 MB 表示),以及 2 GB 的磁碟空間:

    Deploy-Eflow -cpuCount 1 -memoryInMB 1024 -vmDataSize 2
    

    如需所有可用選用參數的資訊,請參閱 Windows 上適用於 Linux 的 IoT Edge PowerShell 函式。

    警告

    根據預設,EFLOW Linux 虛擬機沒有 DNS 設定。 使用 DHCP 的部署會嘗試取得 DHCP 伺服器所傳播的 DNS 組態。 請檢查您的 DNS 設定,以確保因特網連線。 如需詳細資訊,請參閱 AzEFLOW-DNS

    您可以將 GPU 指派給部署,以啟用 GPU 加速的 Linux 模組。 若要取得這些功能的存取權,您必須在 Windows 上安裝適用於 Linux 的 Azure IoT Edge GPU 加速中詳述的必要條件。

    若要使用 GPU 傳遞,請將 gpuNamegpuPassthroughTypegpuCount 參數新增至命令Deploy-Eflow 如需所有可用選用參數的資訊,請參閱 Windows 上適用於 Linux 的 IoT Edge PowerShell 函式。

    警告

    啟用硬體裝置傳遞可能會增加安全性風險。 如果適用,Microsoft 建議來自 GPU 廠商的裝置風險降低驅動程式。 如需詳細資訊,請參閱 使用離散裝置指派部署圖形裝置。

  5. 輸入 『Y』 以接受授權條款。

  6. 根據您的喜好設定,輸入 『O』 或 『R』 來切換 選擇性診斷數據

  7. 部署完成後,PowerShell 視窗會報告 [部署成功]。

    成功的部署會在訊息 PNG 結束時表示「部署成功」。

    部署成功之後,您就可以布建裝置。

使用雲端身分識別來佈建裝置

您已準備好使用裝置的雲端身分識別和驗證資訊來設定裝置。

若要使用 X.509 憑證布建裝置,您需要 IoT 中樞名稱裝置識別碼,以及 Windows 主電腦上身分識別憑證私鑰的絕對路徑

在您的目標裝置上備妥裝置身分識別憑證及其相符的私鑰。 知道這兩個檔案的絕對路徑。

在目標裝置上提升許可權的 PowerShell 工作階段中執行下列命令。 將佔位元文字取代為您自己的值。

Provision-EflowVm -provisioningType ManualX509 -iotHubHostname "HUB_HOSTNAME_HERE" -deviceId "DEVICE_ID_HERE" -identityCertPath "ABSOLUTE_PATH_TO_IDENTITY_CERT_HERE" -identityPrivKeyPath "ABSOLUTE_PATH_TO_PRIVATE_KEY_HERE"

如需命令的詳細資訊 Provision-EflowVM ,請參閱 Windows 上適用於適用於 Linux 的 IoT Edge PowerShell 函式。

確認設定成功

確認 Windows 上的適用於 Linux 的 IoT Edge 已成功在 IoT Edge 裝置上安裝和設定。

  1. 在 PowerShell 會話中使用下列命令登入 Windows 虛擬機上的適用於 Linux 的 IoT Edge:

    Connect-EflowVm
    

    注意

    唯一允許透過 SSH 連線到虛擬機的帳戶是建立虛擬機的使用者。

  2. 登入之後,您可以使用下列 Linux 命令來檢查執行 IoT Edge 模組的清單:

    sudo iotedge list
    
  3. 如果您需要針對IoT Edge服務進行疑難解答,請使用下列Linux命令。

    1. 擷取服務記錄。

      sudo iotedge system logs
      
    2. 使用 工具來 check 驗證裝置的組態和連線狀態。

      sudo iotedge check
      

    注意

    在新布建的裝置上,您可能會看到與 IoT Edge 中樞相關的錯誤:

    ×生產整備:Edge Hub 的記憶體目錄會保存在主機文件系統上 - 錯誤

    無法檢查edgeHub容器的目前狀態

    新布建的裝置上預期會發生此錯誤,因為IoT Edge中樞模組未執行。 若要解決錯誤,請在 IoT 中樞 中設定裝置的模組並建立部署。 為裝置建立部署會啟動裝置上的模組,包括IoT Edge中樞模組。

當您建立新的 IoT Edge 裝置時,它會在 Azure 入口網站 中顯示狀態代碼417 -- The device's deployment configuration is not set。 此狀態正常,表示裝置已準備好接收模組部署。

在 Windows 上卸載適用於 Linux 的 IoT Edge

如果您想要從裝置移除適用於 Linux 的 Azure IoT Edge,請使用下列命令。

  1. 在 Windows 上開啟 設定
  2. 選取[新增或移除程式]
  3. 選取 Azure IoT Edge 應用程式
  4. 選取 [卸載]

下一步