使用客戶自控金鑰來加密應用程式組態資料
Azure 應用程式組態會加密待用的敏感性資訊。 使用客戶自控金鑰可讓您管理加密金鑰,提供先進的資料保護。 使用受控金鑰加密時,應用程式組態中的所有敏感性資訊皆會以使用者提供的 Azure Key Vault 金鑰進行加密。 這可讓您視需要輪替加密金鑰。 您也可撤銷應用程式組態執行個體的金鑰存取權,進而撤銷 Azure 應用程式組態的敏感性資訊存取權。
概觀
Azure 應用程式組態會使用 Microsoft 提供的 256 位元 AES 加密金鑰,為待用的敏感性資訊加密。 每個應用程式組態執行個體都有自己由服務管理的加密金鑰,並用來加密敏感性資訊。 敏感性資訊包括索引鍵/值組中找到的值。 啟用客戶自控金鑰功能時,應用程式組態會使用指派給應用程式組態執行個體的受控識別來進行 Microsoft Entra ID 驗證。 受控識別接著會呼叫 Azure Key Vault,並包裝應用程式組態執行個體的加密金鑰。 接著就會儲存已包裝的加密金鑰,並在應用程式組態中快取一小時內未包裝的加密金鑰。 每過一小時,應用程式組態都會重新整理應用程式組態執行個體加密金鑰的未包裝版本。 此處理序可確保正常作業狀況下的可用性。
重要
若指派給應用程式組態執行個體的身分識別已不再有權限解除包裝執行個體的加密金鑰,或該受控金鑰已永久刪除,便無法再解密應用程式組態執行個體中儲存的敏感性資訊。 使用 Azure Key Vault 的虛刪除功能可降低意外刪除加密金鑰的機率。
若在 Azure 應用程式組態執行個體上啟用客戶自控金鑰功能,使用者即可控制該服務對其敏感性資訊的存取權。 受控金鑰可作為根加密金鑰。 使用者可藉由變更其金鑰保存庫存取原則,來撤銷應用程式組態執行個體的受控金鑰存取權。 撤銷此存取權時,應用程式組態將無法在一小時內解密使用者資料。 此時,應用程式組態執行個體將會禁止所有存取嘗試。 若要復原這類情況,則可為該服務再次授與受控金鑰存取權。 在一小時內,應用程式組態便可解密使用者資料,並正常運作。
注意
所有 Azure 應用程式組態資料皆會在隔離備份中儲存最多 24 小時。 其中包含解除包裝的加密金鑰。 此資料無法立即供服務或服務小組使用。 若發生緊急還原,Azure 應用程式組態將會從受控金鑰資料自行重新撤銷。
需求
若要成功針對 Azure 應用程式組態啟用客戶自控金鑰功能,需要下列元件:
- 標準或進階層 Azure 應用程式組態執行個體。
- 已啟用虛刪除與清除保護功能的 Azure Key Vault。
- Key Vault 中的 RSA 或 RSA-HSM 金鑰。
- 金鑰不得為到期、其必須為已啟用,且必同時啟用包裝與解除包裝功能。
設定這些資源之後,請使用下列步驟,讓 Azure 應用程式組態可以使用 Key Vault 金鑰:
- 將受控識別指派給 Azure 應用程式組態執行個體。
- 授與身分識別能夠存取 Key Vault 金鑰的權限。
- 對於已啟用 Azure RBAC 的 Key Vault,請指派目標 Key Vault 的
Key Vault Crypto Service Encryption User
角色給身分識別。 - 如果 Key Vault 使用存取原則授權,請授與目標 Key Vault 存取原則中的身分識別
GET
、WRAP
和UNWRAP
權限。
- 對於已啟用 Azure RBAC 的 Key Vault,請指派目標 Key Vault 的
針對 Azure 應用程式組態存放區啟用客戶自控金鑰加密
請在標準或進階層中建立應用程式組態存放區 (如果沒有的話)。
使用 Azure CLI 建立已啟用清除保護的 Azure Key Vault。 預設會啟用虛刪除。
vault-name
與resource-group-name
兩者皆由使用者提供,且必須為唯一。 在這些範例中會使用contoso-vault
和contoso-resource-group
。az keyvault create --name contoso-vault --resource-group contoso-resource-group --enable-purge-protection
建立 Key Vault 金鑰。 提供此金鑰的唯一
key-name
,並取代步驟 2 中所建立的 Key Vault (contoso-vault
) 名稱。 指定您是否偏好RSA
或RSA-HSM
加密 (RSA-HSM
僅適用於進階層)。az keyvault key create --name key-name --kty {RSA or RSA-HSM} --vault-name contoso-vault
此命令的輸出會顯示所產生金鑰的金鑰識別碼 (
kid
)。 請記下金鑰識別碼,供本練習稍後使用。 金鑰識別碼的格式為:https://{my key vault}.vault.azure.net/keys/{key-name}/{key-version}
。 金鑰識別碼有三個重要元件:- Key Vault URI:
https://{my key vault}.vault.azure.net
- Key Vault 金鑰名稱:
{key-name}
- Key Vault 金鑰版本:
{key-version}
- Key Vault URI:
使用 Azure CLI 建立系統指派的受控識別,並取代為先前步驟中所使用之應用程式組態執行個體與資源群組的名稱。 受控識別將用於存取受控金鑰。 我們使用
contoso-app-config
來說明應用程式組態執行個體的名稱:az appconfig identity assign --name contoso-app-config --resource-group contoso-resource-group --identities [system]
此命令的輸出包含系統指派之身分識別的主體識別碼 (
"principalId"
),以及租用戶識別碼 ("tenandId"
)。 這些識別碼將用於授與受控金鑰的身分識別存取權。{ "principalId": {Principal Id}, "tenantId": {Tenant Id}, "type": "SystemAssigned", "userAssignedIdentities": null }
Azure 應用程式組態執行個體的受控識別需要金鑰存取權,才能執行金鑰驗證、加密和解密。 需要存取權的特定動作集包含:金鑰的
GET
、WRAP
和UNWRAP
。 指派已啟用 Azure RBAC 的 Key VaultKey Vault Crypto Service Encryption User
角色,即可授與這些權限。 對於使用存取原則授權的 Key Vault,請設定上述金鑰權限的原則。 授與存取權需要應用程式組態執行個體受控識別的主體識別碼。 將以下顯示為contoso-principalId
的值以上一個步驟中取得的主體識別碼取代。 使用下列命令列來授與受管理金鑰的權限:對於已啟用 Azure RBAC 的 Key Vault,請使用下列命令。
az role assignment create --assignee contoso-principalId --role "Key Vault Crypto Service Encryption User" --scope key-vault-resource-id
由於 Azure 應用程式組態執行個體可存取受管理的金鑰,我們便可使用 Azure CLI 啟用服務中的客戶自控金鑰功能。 重新叫用在建立金鑰步驟期間所記錄的下列屬性:
key name
key vault URI
。az appconfig update -g contoso-resource-group -n contoso-app-config --encryption-key-name key-name --encryption-key-version key-version --encryption-key-vault key-vault-Uri
您的 Azure 應用程式組態執行個體現在已設定使用 Azure Key Vault 所儲存的客戶自控金鑰。
後續步驟
在本文中,您已設定 Azure 應用程式組態執行個體,以使用客戶自控金鑰進行加密。 若要深入了解如何將您的應用程式服務與 Azure 受控識別整合,請繼續進行下一個步驟。