AKS Edge Essentials 的 TPM 存取
信賴平臺模組 (TPM) 晶片是一種安全的加密處理器,其設計目的是執行密碼編譯作業。 此技術的設計目的是提供硬體式的安全性相關功能。 您可以啟用或停用 TPM 傳遞功能,讓 AKS Edge Essentials 虛擬機能夠使用 Windows 主機 OS TPM。 TPM 傳遞功能提供儲存在 TPM 內之密碼編譯密鑰的唯讀取權。
本文說明如何在 C# 中開發範例程式代碼,以讀取儲存在裝置離散 TPM 內的密碼編譯密鑰。
注意
TPM 金鑰的存取限制為唯讀。 如果您想要將金鑰寫入 TPM,您必須從 Windows 主機 OS 內執行。
必要條件
- 具有 TPM 或 vTPM 的 Windows 主機 OS(如果您使用 Windows 主機 OS 虛擬機)。
- 從已啟用 TPM 傳遞的 CBL-Mariner 虛擬機啟用 TPM 存取。 在 aksedge-config 檔案的
machines
區段中,將Machine.LinuxNode.TpmPassthrough
值設定為True
。 您只能在建立新的部署時啟用或停用 TPM 存取。 設定旗標之後,除非您移除部署或節點,否則無法變更旗標。 - 請確定非揮發性(NV) 索引 (預設 index=3001) 是以 8 個字節的數據初始化。 範例所使用的預設 AuthValue 是 {1,2,3,4,5,6,7,8},這會對應至寫入 TPM 時,TSS.MSR 連結庫中的 NV (Windows) 範例。 所有索引初始化都必須在 Windows 主機上進行,才能從 CBL-Mariner VM 讀取。 如需 TPM 範例的詳細資訊,請參閱 TSS.MSR。
警告
啟用 TPM 傳遞至虛擬機可能會增加安全性風險。
建立範例 TPM 可執行檔
下列步驟示範如何建立範例可執行檔,以從 CBL-Mariner VM 存取離散 TPM (dTPM) 索引。
開啟 Visual Studio 2019 或 2022。 選取 [建立新專案]。 在範本清單中選取 [控制台應用程式 ],然後選取 [ 下一步]:
輸入 [ 項目名稱]、 [位置 ] 和 [方案名稱] 字段,然後選取 [ 下一步]。
選擇目標架構。 建議使用最新的 .NET 6.0 長期支援 (LTS) 版本。 選擇目標架構之後,請選取 [ 建立]。 Visual Studio 會建立新的主控台應用程式解決方案。
在 [方案總管] 中,以滑鼠右鍵按一下專案名稱,然後選取 [管理 NuGet 套件]。
選取 [ 瀏覽 ],然後搜尋 Microsoft.TSS。 如需此套件的詳細資訊,請參閱 Microsoft.TSS。 從清單中選擇 Microsoft.TSS 套件,然後選取 [安裝]。
編輯Program.cs檔案,並以 tpm-read-nv 範例程式代碼取代內容 - Program.cs。
選取 [建 > 置建置方案 ] 以建置專案。 確認組建成功。
在 [方案總管] 中,以滑鼠右鍵按兩下專案,然後選取 [發佈]。
在 [發佈精靈] 中,選擇 [資料夾>資料夾]。 選取 [ 瀏覽 ],然後選擇要產生可執行文件的輸出位置。 選取 [完成]。 建立發行設定檔之後,選取 [關閉]。
在 [ 發佈] 索引標籤上,選取 [ 顯示所有設定]。 變更下列設定,然後選取 [ 儲存]:
- 目標執行階段:linux-x64。
- 部署模式:獨立式。
選取 [ 發佈],然後等候建立可執行檔。
如果發佈成功,您應該會看到輸出資料夾中建立的新檔案。
複製並執行可執行檔
建立可執行檔和相依性檔案之後,請將資料夾複製到 CBL-Mariner 虛擬機。 下列步驟示範如何複製所有必要的檔案,以及如何在 CBL-Mariner 虛擬機內執行可執行檔。
開啟提升權限的 PowerShell 工作階段。
將目錄變更為包含已發行檔案的父資料夾。
例如,如果您的已發佈檔案位於目錄 C:\Users<User> 的資料夾 TPM 底下,您可以使用下列命令來變更為父資料夾:
cd "C:\Users\<User>"
修改TPMRead.runtimeconfig.json檔案,以避免Linux VM內的ICU全球化問題:
開啟 TPMRead.runtimeconfig.json。
在區段內
configProperties
新增下列這一行:"System.Globalization.Invariant": true
建立 tar 檔案,其中包含在先前步驟中建立的所有檔案。
例如,如果您在 TPM 資料夾下擁有所有檔案,您可以使用下列命令來建立TPM.tar檔案:
tar -cvzf TPM.tar ".\TPM"
成功建立TPM.tar檔案之後,請使用
Copy-AksEdgeNodeFile
Cmdlet 將 tar 檔案複製到 CBL-Mariner VM。 例如,如果您在 C:\Users<使用者>目錄中TPM.tar tar 檔名,您可以使用下列命令複製到 CBL-Mariner VM:Copy-AksEdgeNodeFile -fromFile "C:\Users\<User>\TPM.tar" -toFile "/home/aksedge-user/" -pushFile
執行下列命令,從 tar 檔案擷取所有內容:
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "tar -xvzf /home/aksedge-user/TPM.tar"
擷取之後,將可執行文件許可權新增至主要可執行檔。 例如,如果您的專案名稱是 TPMRead,則您的主要可執行檔名稱為 TPMRead。 執行下列命令,讓它成為可執行檔:
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "chmod +x /home/aksedge-user/TPM/TPMRead"
最後一個步驟是執行可執行檔。 例如,如果您的項目名稱是 TPMRead,請執行下列命令:
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "/home/aksedge-user/TPM/TPMRead"
您應該會看到如下輸出: