Azure 應用程式組態會加密待用的敏感性資訊。 使用客戶管理的金鑰可讓您更好地控制加密金鑰,從而提供增強的資料保護。 當您使用受控金鑰加密時,App Configuration 中的所有敏感性資訊都會使用您提供的 Azure 金鑰保存庫金鑰進行加密。 因此,您可以視需要輪換加密金鑰。 您也可以透過撤銷存放區對金鑰的存取權,以撤銷應用程式組態存放區對敏感性資訊的存取權。
概觀
App Configuration 會使用 Microsoft 提供的 256 位進階加密標準(AES)加密金鑰來對靜態敏感資訊進行加密。 每個 App Configuration 存放區都有自己的加密金鑰,由服務管理,並用來加密敏感性資訊。 敏感性資訊包含機碼值組所找到的值。
當您在 App Configuration 中使用客戶管理的金鑰時,會發生下列事件:
- 應用程式組態使用指派給應用程式組態存放區的受控識別,向 Microsoft Entra ID 進行驗證。
- 受控識別會呼叫 Key Vault,並包裝應用程式組態存放區的加密金鑰。
- 包裝的加密金鑰會保存。
- 未包裝的加密金鑰會在應用程式組態內快取一小時。
- 每過一小時,應用程式組態都會重新整理應用程式組態存放區加密金鑰的未包裝版本。
此處理序可確保正常作業狀況下的可用性。
重要事項
符合下列任何條件時,無法解密儲存在 App Configuration 存放區中的敏感性資訊:
- 指派給應用程式組態存放區的身分識別不再擁有將存放區加密金鑰解除包裝的授權。
- 受控金鑰會永久刪除。
- 使用中的受控金鑰版本會過期。
您可以使用 Key Vault 中的 虛刪除 功能來降低意外刪除加密金鑰的機會。 若要降低基礎受控金鑰到期的可能性,您可以在設定受控金鑰加密並在 Key Vault 中設定自動金鑰輪替時省略金鑰版本。 如需詳細資訊,請參閱本文稍後的 按鍵輪替。
需求
需要下列元件才能成功啟用 App Configuration 的客戶管理金鑰功能。 本文說明如何設定這些元件。
- 標準層級或進階層級的應用程式設定儲存庫。
- 啟用了軟刪除和清除保護功能的 Key Vault 實例。
- 金鑰保存庫中符合下列需求的金鑰:
- 它使用 Rivest-Shamir-Adleman (RSA) 加密或使用硬體安全模組 (RSA-HSM) 的 RSA 加密。
- 它沒有過期。
- 它已啟用。
- 它已啟用封裝和解封功能。
本文示範如何設定這些資源之後,會逐步引導您完成下列步驟,讓您的 App Configuration 存放區可以使用金鑰保存庫金鑰:
- 將受控識別指派給應用程式組態存放區。
- 為身分識別授與權限,使其能存取 Key Vault 金鑰:
- 針對使用 Azure 角色型存取控制 (Azure RBAC) 的金鑰保存庫,請在目標金鑰保存庫上指派身分識別 Key Vault 加密服務加密使用者 角色。
- 針對使用存取原則授權的金鑰保存庫,請為身分識別授與目標金鑰保存庫存取原則中的
GET、WRAP和UNWRAP權限。
啟用客戶管理的金鑰加密
若要使用客戶管理的金鑰加密,請執行下列各節中的步驟。
建立資源
如果您沒有[標準] 或 [進階層級] 的 [應用程式設定存放區],請建立一個。 如需指示,請參閱 快速入門:建立 Azure App Configuration 存放區。
執行下列 Azure CLI 命令,以建立已啟用清除保護的 Key Vault 實例。 預設會啟用虛刪除。 將
<vault-name>和<resource-group-name>替換為您自己的獨特值。az keyvault create --name <vault-name> --resource-group <resource-group-name> --enable-purge-protection此命令的輸出會列出金鑰保存庫的資源識別碼
id。 請注意其值,其格式如下:/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<vault-name>使用 Azure CLI 為您自己指派您金鑰保存庫的存取權,以便您可以在其中建立金鑰。 您使用的命令取決於金鑰保存庫所使用的授權系統。 有兩種型號可供選擇:
- Azure RBAC 模型
- 存取原則模型
對於這兩個模型,您需要使用者物件識別碼才能執行命令。 您可以使用下列其中一種方法來尋找使用者物件 ID:
使用
az ad user show --id <user-principal-name>Azure CLI 中的命令,其中<user-principal-name>是您的使用者主體名稱 (UPN)。使用 Azure 入口網站:
- 選取 [Microsoft Entra ID],然後選取 [管理>使用者]。
- 在搜尋方塊中輸入您的姓名,然後在結果中選取您的使用者名稱。
- 複製 [物件 ID] 值。
執行適用於金鑰保存庫授權系統的命令,為自己指派存取權:
用以下值取代占位符:
- 針對
<user-object-ID>,使用您剛才找到的物件 ID。 - 針對
<role>,請使用 Key Vault Crypto Officer 等角色,讓您擁有建立金鑰所需的存取權。 將角色括在引號中。 - 針對
<vault-resource-ID>,使用上一個步驟中的金鑰保存庫資源識別碼。
az role assignment create --assignee <user-object-ID> --role <role> --scope <vault-resource-ID>執行下列命令來建立金鑰保存庫金鑰。 用以下值取代占位符:
- 對於
<key-name>,使用您自己的唯一值。 - 對於
<key-type>:- 用於
RSARSA 加密。 - 使用
RSA-HSM進行 RSA-HSM 加密。 RSA-HSM 加密僅適用於進階層。
- 用於
- 針對
<vault-name>,使用步驟 2 中的金鑰保存庫名稱。
az keyvault key create --name <key-name> --kty <key-type> --vault-name <vault-name>此指令的輸出會列出所產生金鑰的金鑰 ID 。
kid請注意其值,其格式如下:https://<vault-name>.vault.azure.net/keys/<key-name>/<key-version>金鑰 ID 包含下列元件:
- 金鑰保存庫 URI:
https://<vault-name>.vault.azure.net - 金鑰保存庫金鑰名稱:
<key-name> - 金鑰保存庫金鑰版本:
<key-version>
- 對於
使用下列其中一個選項,為您的 App Configuration 存放區建立受控識別:
若要建立使用者指派的受控識別,請遵循 新增使用者指派的身分識別中的步驟。 請注意身分識別的
clientId和principalId屬性的值。若要建立系統指派的受控識別,請使用下列 Azure CLI 命令。 用以下值取代占位符:
- 針對
<App-Configuration-store-name>,使用第 1 步中的 App Configuration 存放區名稱。 - 針對
<resource-group-name>,請使用包含您的應用程式組態存放區的資源群組名稱。
- 針對
az appconfig identity assign --name <App-Configuration-store-name> --resource-group <resource-group-name> --identities [system]此命令的輸出包括系統指派的身分識別之主體識別碼 (
principalId),以及租用戶識別碼 (tenantId)。 請注意屬性的principalID值。{ "principalId": <principal-ID>, "tenantId": <tenant-ID>, "type": "SystemAssigned", "userAssignedIdentities": null }
授與存取權並啟用金鑰
App Configuration 存放區的受控識別需要存取金鑰,才能執行金鑰驗證、加密和解密。 具體而言,受控識別需要金鑰 GET、WRAP 和 UNWRAP 動作的存取權。
- 針對使用 Azure RBAC 的金鑰保存庫,您可以將 金鑰保存庫加密服務加密使用者 角色指派給受控識別,以授與這些許可權。
- 針對使用存取原則授權的金鑰保存庫,您可以為這些金鑰許可權設定原則。
使用適用於您金鑰保存庫授權系統的命令,為受控識別授與受控金鑰的存取權。 對於這兩個系統,將
<managed-identity-principal-ID>替換為上一個步驟中的主體 ID。取代
<key-vault-resource-id>為 建立資源步驟 2 中金鑰保存庫的資源識別碼。az role assignment create --assignee <managed-identity-principal-ID> --role "Key Vault Crypto Service Encryption User" --scope <key-vault-resource-id>執行下列其中一個 Azure CLI 命令,在服務中啟用客戶管理的金鑰功能。 用以下值取代占位符:
- 針對
<resource-group-name>,請使用包含您的應用程式組態存放區的資源群組名稱。 - 針對
<App-Configuration-store-name>,請使用您的應用程式組態存放區名稱。 - 對於
<key-name>和<key-vault-URI>,請使用 建立資源步驟 4 中的值。
根據預設,命令會使用系統指派的受控識別,向金鑰保存庫進行驗證。
如果您使用系統指派的受控識別來存取客戶自控金鑰,請執行下列命令:
az appconfig update -g <resource-group-name> -n <App-Configuration-store-name> --encryption-key-name <key-name> --encryption-key-vault <key-vault-URI>如果您使用使用者指派的受控識別來存取客戶自控金鑰,請執行下列命令,以明確指定用戶端識別碼。 將
<user-assigned-managed-identity-client-ID>替換為clientId步驟 5 中的值。az appconfig update -g <resource-group-name> -n <App-Configuration-store-name> --encryption-key-name <key-name> --encryption-key-vault <key-vault-URI> --identity-client-id <user-assigned-managed-identity-client-ID>
- 針對
您的 App Configuration 存放區現在已設定為使用儲存在 Key Vault 中的客戶管理金鑰。
停用客戶管理的金鑰加密
當您停用客戶管理的金鑰加密時,您的 App Configuration 存放區會還原為使用 Microsoft 管理的金鑰。 但在還原為 Microsoft 管理的金鑰之前,App Configuration 會使用目前的金鑰來解密所有現有的資料。 如果現行金鑰已過期或撤銷對它的存取權,您必須先還原該金鑰的存取權。
附註
在將 App Configuration 存放區設定為使用 Microsoft 受控金鑰,而不是客戶自控金鑰進行加密之前,請確定此變更符合組織的安全性原則和合規性需求。
請確定目前的客戶管理金鑰有效且可運作。
使用下列 Azure CLI 命令,藉由移除客戶自控金鑰設定來更新 App Configuration 存放區。 將
<resource-group-name>和<App-Configuration-store-name>替換成您環境中的值。az appconfig update -g <resource-group-name> -n <App-Configuration-store-name> --encryption-key-name ""若要確認客戶管理的金鑰設定已停用,請檢查 App Configuration 存放區的屬性。
az appconfig show -g <resource-group-name> -n <App-Configuration-store-name> --query "encryption"在此命令的輸出中,屬性的
encryption.keyVaultProperties值null應該為 。
您的 App Configuration 存放區現在已設定為使用 Microsoft 受控金鑰進行加密。
存取權撤銷
當您在 App Configuration 存放區上啟用客戶管理的金鑰功能時,您可以控制服務存取敏感性資訊的能力。 受控金鑰可作為根加密金鑰。
您可以透過變更金鑰保存庫的存取原則,撤銷 App Configuration Store 對您的受控金鑰的存取權限。 當您撤銷此存取權時,App Configuration 將失去在一小時內解密使用者資料的能力。 此時,App Configuration 存放區會禁止所有存取嘗試。
此狀況可藉由再次授與 App Configuration 服務存取受控金鑰來復原。 在一小時內,App Configuration 能夠解密用戶數據並在正常情況下運行。
附註
所有應用程式設定資料都會在隔離備份中儲存長達 24 小時。 此資料包括未包裝的加密金鑰。 此資料無法立即供服務或服務小組使用。 在緊急還原期間,App Configuration 會再次撤銷與管理金鑰相關的設定。
金鑰輪替
當您在 App Configuration 存放區上設定客戶自控金鑰時,您必須定期輪替受控金鑰,使其不會過期。 若要成功輪換金鑰,目前金鑰必須有效且可運作。 如果目前的金鑰已過期,或 App Configuration 對它的存取權遭到撤銷,則 App Configuration 存放區無法解密資料,而且輪替會失敗。
自動旋轉
最佳做法是在 Key Vault 中為您的客戶自控金鑰設定 自動輪替 。 經常旋轉按鍵可以提高安全性。 當您使用自動輪換時,您可以避免因缺乏輪換而失去存取權限。 您也可以省去手動輪替加密金鑰的需求。
無版本金鑰
客戶自控金鑰加密中自動輪替的另一個最佳做法是省略金鑰保存庫金鑰的版本。 當您未設定特定金鑰版本時,應用程式設定可以在自動輪替金鑰時移至金鑰的最新版本。 因此,您的 App Configuration 存放區可避免在目前使用的受控金鑰版本到期時失去存取權。
當您設定客戶管理的金鑰加密時,您會在金鑰保存庫中提供金鑰的識別碼。 金鑰保存庫金鑰識別碼可以有下列格式:
- 無版本金鑰識別碼:
https://<vault-name>.vault.azure.net/keys/<key-name> - 版本化金鑰識別碼 (不建議):
https://<vault-name>.vault.azure.net/keys/<key-name>/<key-version>
若要設定無版本金鑰,請使用省略版本的識別碼格式。
後續步驟
在本文中,您已將 App Configuration 存放區設定為使用客戶管理的金鑰進行加密。 若要深入瞭解如何整合應用程式服務與 Azure 受控識別,請繼續進行下一個步驟。