在 Azure 容器執行個體 (ACI) 上使用機密容器進行安全金鑰發行
以 Azure Key Vault (AKV) 搭配機密容器供應項目的安全金鑰發行 (SKR) 流程可透過幾種方式實作。 機密容器會透過 Linux 核心執行客體啟發的公開 AMD SEV-SNP 裝置;該核心會使用客體韌體搭配必要的 Hyper-V 相關修補檔,也就是我們所稱的直接 Linux 開機 (DLB)。 此平台不會使用機密 VM 與 AMD SEV-SNP 支援的 vTPM 和 HCL。 本概念文件假設您打算在選擇機密計算 SKU 的 Azure 容器支援中執行容器
- Azure 提供的側車協助程式容器
- 使用容器應用程式的自訂實作
Azure 提供的側車協助程式容器
開放原始碼 GitHub 專案「機密側車」詳細說明如何組建此容器,以及您準備和執行此側車容器所需的參數/環境變數。 目前的側車實作提供各種 HTTP REST API,可供您的主要應用程式容器用於從 AKV 擷取金鑰。 其中已內建透過 Microsoft Azure 證明 (MAA) 的整合。 如需執行側車 SKR 容器的準備步驟,請參閱此處的詳細資料。
您的主要應用程式容器應用程式,可以呼叫如下列範例所定義的側車 WEB API 端點。 側車會在相同的容器群組內執行,而且是應用程式容器的本地端點。 您可以在此處找到 API 的詳細資料
key/release
POST 方法需要下列格式的 JSON:
{
"maa_endpoint": "<maa endpoint>", //https://learn.microsoft.com/en-us/azure/attestation/quickstart-portal#attestation-provider
"akv_endpoint": "<akv endpoint>", //AKV URI
"kid": "<key identifier>" //key name,
"access_token": "optional aad token if the command will run in a resource without proper managed identity assigned"
}
成功時,key/release
POST 方法回應包含 StatusOK
標頭和下列格式的承載:
{
"key": "<key in JSON Web Key format>"
}
發生錯誤時,key/release
POST 方法回應包含 StatusForbidden
標頭和下列格式的承載:
{
"error": "<error message>"
}
使用容器應用程式的自訂實作
若要執行自訂容器應用程式以擴充 Azure Key Vault (AKV) - 安全金鑰發行和 Microsoft Azure 證明 (MAA) 功能,請使用下列內容作為高階參考流程。 簡單的方法是檢閱此側車 GitHub 專案中目前的側車實作程式碼。
- 步驟 1:使用可匯出金鑰設定 AKV 並附加發行原則。 請在此參閱更多資訊
- 步驟 2:使用 Microsoft Entra ID 設定受控識別,並將其附加至 AKV。 請在此參閱更多資訊
- 步驟 3:設定機密計算強制執行原則,以在 ACI 內使用必要參數部署容器應用程式。 請在此參閱更多資訊
- 步驟 4:在此步驟中,您的應用程式應執行 IOCTL Linux 通訊端呼叫來擷取 RAW AMD SEV-SNP 硬體報告。 您不需要任何客體證明程式庫來執行此動作。 更多關於現有側車實作的資料
- 步驟 5:擷取容器群組的 AMD SEV-SNP 憑證鏈結。 這些憑證會從 Azure 主機 IMDS 端點傳遞。 請在此參閱更多資訊
- 步驟 6:將 SNP RAW 硬體報告和憑證詳細資料傳送至 MAA 以進行驗證和傳回宣告。 請在此參閱更多資訊
- 步驟 7:將 ACI 所產生的 MAA 權杖和受控識別權杖傳送至 AKV 以取得金鑰發行。 請在此參閱更多資訊
您從 AKV 成功擷取金鑰時,可以使用金鑰來解密資料集,或加密從機密容器環境傳出的資料。