使用 Azure 證明為 Always Encrypted 設定證明
適用於:Azure SQL 資料庫
Microsoft Azure 證明是證明受信任執行環境 (TEE) 的解決方案,包含 Intel Software Guard Extension (Intel SGX) 記憶體保護區。
若要使用 Azure 證明來證明在 Azure SQL 資料庫中具有安全記憶體保護區的 Always Encrypted 使用了 Intel SGX 記憶體保護區,您需要:
建立證明提供者,並以建議的證明原則來進行設定。
判斷證明 URL,並將該網址提供給應用程式管理員。
重要
在 Azure SQL 資料庫中使用 Intel SGX 記憶體保護區時,證明為必要,且需要 Microsoft Azure 證明。 Azure SQL 資料庫中的 VBS 記憶體保護區不支援證明。 本文僅適用於 Intel SGX 記憶體保護區。
注意
設定證明是證明管理員的責任。 請參閱設定 Intel SGX 記憶體保護區和證明時的角色和責任 (機器翻譯)。
建立及設定證明提供者
證明提供者是 Azure 證明中的資源,可針對證明原則評估證明要求,並核發證明權杖。
指定證明原則時,使用的是宣告規則文法。
重要
Intel SGX 記憶體保護區的證明提供者在建立時會採用預設原則,因此不會驗證在記憶體保護區內執行的程式碼。 Microsoft 強烈建議您針對具有安全記憶體保護區的 Always Encrypted,設定用於下列輸出的建議原則,而不要使用預設的原則。
Microsoft 建議在證明 Azure SQL 資料庫中的 Always Encrypted 使用了 Intel SGX 記憶體保護區時,採取下列原則:
version= 1.0;
authorizationrules
{
[ type=="x-ms-sgx-is-debuggable", value==false ]
&& [ type=="x-ms-sgx-product-id", value==4639 ]
&& [ type=="x-ms-sgx-svn", value>= 2 ]
&& [ type=="x-ms-sgx-mrsigner", value=="e31c9e505f37a58de09335075fc8591254313eb20bb1a27e5443cc450b6e33e5"]
=> permit();
[ type=="x-ms-sgx-is-debuggable", value==false ]
&& [ type=="x-ms-sgx-product-id", value==4639 ]
&& [ type=="x-ms-sgx-svn", value>= 2 ]
&& [ type=="x-ms-sgx-mrsigner", value=="a0f8e7f72092fb6a5d5752ffccd47fb3af7027ffb589b24e921e81f5703f3a9a"]
=> permit();
};
原則會驗證:
Azure SQL 資料庫內的記憶體保護區不支援偵錯。
在啟用或停用偵錯的情況下都可以載入記憶體保護區。 偵錯支援功能是為了讓開發人員能對記憶體保護區中執行的程式碼進行疑難排解。 在實際生產系統中,偵錯讓管理員能夠檢查記憶體保護區的內容,而這會降低記憶體保護區所提供的保護層級。 建議的原則會停用偵錯功能,以確保有惡意的管理員嘗試透過接管記憶體保護區機器來開啟偵錯工具支援時,證明就會失敗。
記憶體保護區的產品識別碼會比對指派給具有安全記憶體保護區之 Always Encrypted 的產品 ID。
每一個記憶體保護區都有唯一的產品 ID,可用來區別不同的記憶體保護區。 指派給 Always Encrypted 記憶體保護區的產品 ID 為 4639。
程式庫的安全性版本號碼 (SVN) 大於等於 2。
SVN 可讓 Microsoft 回應在記憶體保護區程式碼中發現的潛在安全性錯誤。 在發現並修正了安全性問題的情況下,Microsoft 會使用新的 (遞增) SVN 來部署新版的記憶體保護區。 建議原則會更新以反映新的 SVN。 您可以依據建議原則更新自己的原則,以確保有惡意的管理員嘗試載入較舊且不安全的記憶體保護區時,證明就會失敗。
記憶體保護區中的程式庫已使用 Microsoft 簽署金鑰進行簽署 (x-ms-sgx-mrsigner 宣告的值是簽署金鑰的雜湊)。
證明的主要目標之一是說服用戶端,在記憶體保護區中執行的二進位程式碼就是應該要執行的二進位程式碼。 證明原則為此一目的提供了兩種機制。 其中一個是 mrenclave 宣告,也就是應該要在記憶體保護區中執行的二進位雜湊。 Mrenclave 的問題在於,即便是對程式碼做了細微的變更,二進位雜湊也會隨之改變,讓記憶體保護區中執行的程式碼變得難以修改。 因此,建議您使用 mrsigner,這是用來簽署記憶體保護區二進位程式碼的金鑰雜湊。 當 Microsoft 修改記憶體保護區時,只要簽署金鑰沒有變更,mrsigner 就會維持不變。 如此一來,就可以在不中斷客戶應用程式的情況下,部署更新過的二進位碼。
重要
Microsoft 可能會需要輪替用於簽署 Always Encrypted 記憶體保護區二進位程式碼的金鑰,但這應該是很罕見的情況。 在使用新金鑰簽署的新版記憶體保護區二進位程式碼部署至 Azure SQL 資料庫之前,我們會更新本文章,以提供新的建議證明原則,以及您應如何在證明提供者中更新原則的指示,以確保應用程式可在不中斷的情況下持續運作。
如需如何建立證明提供者,以及使用證明原則來進行設定的指示,請參考:
- 快速入門:使用 Azure 入口網站設定 Azure 證明
重要
當您使用 Azure 入口網站來設定證明原則時,請將 [證明類型] 設為
SGX-IntelSDK
。 - 快速入門:使用 Azure PowerShell 設定 Azure 證明
重要
當您使用 Azure PowerShell 來設定證明原則時,請將
Tee
參數設為SgxEnclave
。 - 快速入門:使用 Azure CLI 設定 Azure 證明
重要
當您使用 Azure CLI 來設定證明原則時,請將
attestation-type
參數設為SGX-IntelSDK
。
判斷證明原則的證明 URL
在設定證明原則之後,您必須將證明 URL 提供給 Azure SQL 資料庫中在 Always Encrypted 使用安全記憶體保護區的應用程式管理員。 證明 URL 是包含證明原則之證明提供者的 Attest URI
,看起來會像:https://MyAttestationProvider.wus.attest.azure.net
。
使用 Azure 入口網站來判斷證明 URL
在證明提供者的 [概觀] 窗格中,將 Attest URI
屬性的值複製到剪貼簿。
使用 PowerShell 判斷證明 URL
使用 Get-AzAttestation
Cmdlet 擷取證明提供者的屬性,包括 AttestURI。
Get-AzAttestation -Name $attestationProviderName -ResourceGroupName $attestationResourceGroupName
如需詳細資訊,請參閱建立和管理證明提供者。