安全金鑰發行 (SKR) 是 Azure Key Vault (AKV) 受控 HSM 和進階供應項目的功能。 安全金鑰發行可讓您將受 HSM 保護的金鑰從 AKV 發行至經過證明的受信任執行環境 (TEE),例如安全記憶體保護區、VM 型 TEE 等。SKR 會將另一層存取保護新增至您的資料解密/加密密鑰,您可以在其中以具有已知設定的應用程式 + TEE 執行階段環境為目標,以存取金鑰資料。 在建立可匯出金鑰時定義的 SKR 原則會控管這些密鑰的存取權。
AKV 供應項目的 SKR 支援
搭配 TEE 的整體安全金鑰發行流程
SKR 只能根據 Microsoft Azure 證明 (MAA) 所產生的宣告來釋出金鑰。 MAA 宣告與 SKR 原則定義之間有緊密整合。
下列步驟適用於 AKV 進階。
步驟 1:建立由 HSM 支援的進階版金鑰保存庫
請務必將 [--sku] 的值設為 "premium"。
步驟 2:建立安全金鑰發行原則
安全金鑰發行原則是 JSON 格式發行原則,如這裡所定義,除了發行金鑰的授權之外,還會指定一組必要的宣告。 此處的聲明是以 MAA 為基礎的聲明,相關內容可參見 SGX 的此處說明 以及 AMD SEV-SNP CVM 的此處說明。
如需詳細資訊,請瀏覽 TEE 專屬的範例頁面。 如需 SKR 原則文法的詳細資訊,請參閱 Azure Key Vault 安全金鑰發行原則文法。
設定 SKR 原則之前,請務必透過遠端證明流程執行 TEE 應用程式。 本教學課程未涵蓋遠端證明。
範例
{
"version": "1.0.0",
"anyOf": [ // Always starts with "anyOf", meaning you can multiple, even varying rules, per authority.
{
"authority": "https://sharedweu.weu.attest.azure.net",
"allOf": [ // can be replaced by "anyOf", though you cannot nest or combine "anyOf" and "allOf" yet.
{
"claim": "x-ms-isolation-tee.x-ms-attestation-type", // These are the MAA claims.
"equals": "sevsnpvm"
},
{
"claim": "x-ms-isolation-tee.x-ms-compliance-status",
"equals": "azure-compliant-cvm"
}
]
}
]
}
步驟 3:在具有附加 SKR 原則的 AKV 中建立可匯出金鑰
您可以在這裡找到索引鍵類型和其他相關屬性的確切詳細資料。
az keyvault key create --exportable true --vault-name "vault name from step 1" --kty RSA-HSM --name "keyname" --policy "jsonpolicyfromstep3 -can be a path to JSON"
步驟 4:在 TEE(可信賴執行環境)內執行的應用程式執行遠端證明
此步驟可能會因您執行應用程式時所使用的 TEE 類型而異,例如 Intel SGX Enclaves、以 AMD SEV-SNP 為基礎的機密虛擬機器 (CVM),或在使用 AMD SEV-SNP 的 CVM Enclaves 中執行的機密容器等。
請參考下列 Azure 提供的各種 TEE 類型參考範例:
- AMD EV-SNP 型 CVM 中的應用程式執行安全金鑰發行
- 具有 Azure 容器執行個體 (ACI) 與 SKR 側車容器的機密容器
- 執行安全金鑰發行的 Intel SGX 型應用程式 - 開放原始碼解決方案 Mystikos 實作
常見問題集 (FAQ)
我可以使用非機密運算服務來執行 SKR 嗎?
是。 安全金鑰釋放是 Azure Key Vault Premium 與 Managed HSM 的一項功能。 發布操作會驗證已簽署的 Microsoft Azure 證明(MAA)令牌,與金鑰的釋放政策無關,且不受計算類型影響。 機密運算產品(機密虛擬機、機密容器)是這些憑證最常見的來源,因為它們帶有硬體基礎的 TEE 聲明,但並非必須。 可信啟動 VM 也會產生 MAA 證明權杖,例如secureboot宣告,以及由 vTPM 測量的x-ms-azurevm-attested-pcr-values PCR 宣告;且有個可根據這些宣告來控管金鑰發行的發行原則。 如需了解權杖需求和宣告結構,請參閱 Azure Key Vault 安全金鑰釋放原則語法。 機密運算還會保護記憶體中釋放的金鑰資料,避免主機取得;當需要這種保護時,則使用機密運算產品。
我可以自備證明提供者或服務,並將那些宣告用於 AKV 以進行確認和發行嗎?
Microsoft Azure 證明 是原生整合的認證服務。 發布政策也能驗證來自其他認證機構的憑證,前提是該憑證符合預期結構、支援 OpenID Connect、攜帶預期的權利要求,且由憑證簽署,該憑證可連結至 金鑰保存庫 信任的公開憑證(目前為 DigiCert)。 欲了解更多資訊,請參閱 Azure Key Vault 安全金鑰釋放政策文法。
我可以使用 AKV SDK 來執行金鑰發行嗎?
是。 最新 SDK 已整合 7.3 AKV API 對 key RELEASE 的支援。
您可以分享金鑰發行原則的一些範例嗎?
是,TEE 類型的詳細範例都在這裡。
我可以將 SKR 類型的原則套用於憑證和機密嗎?
否。 目前不能。
參考資料
在 Azure 容器執行個體上使用機密容器進行安全金鑰發行與容器邊車
具有安全金鑰發行範例的 AMD SEV-SNP 應用程式上的 CVM