Share via


使用客戶自控金鑰來加密應用程式組態資料

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 金鑰:

  1. 將受控識別指派給 Azure 應用程式組態執行個體。
  2. 授與目標 Key Vault 存取原則中的身分識別 GETWRAPUNWRAP 權限。

為您的 應用程式組態 存放區啟用客戶管理的金鑰加密

  1. 如果您沒有 應用程式組態 存放區,請在標準層中建立一個存放區

  2. 使用 Azure CLI 建立已啟用清除保護的 Azure 金鑰保存庫。 默認會啟用虛刪除。 vault-nameresource-group-name 兩者皆由使用者提供,且必須為唯一。 在這些範例中會使用 contoso-vaultcontoso-resource-group

    az keyvault create --name contoso-vault --resource-group contoso-resource-group --enable-purge-protection
    
  3. 建立 Key Vault 金鑰。 提供此索引鍵的唯key-name一名稱,並取代步驟 2 中建立的 金鑰保存庫 名稱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}。 金鑰識別碼有三個重要元件:

    1. 金鑰保存庫 URI:https://{my key vault}.vault.azure.net
    2. 金鑰保存庫 金鑰名稱:{key-name}
    3. 金鑰保存庫 金鑰版本:{key-version}
  4. 使用 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
    }
    
  5. Azure 應用程式組態執行個體的受控識別需要金鑰存取權,才能執行金鑰驗證、加密和解密。 需要存取權的特定動作集包含:金鑰的 GETWRAPUNWRAP。 授與存取權需要應用程式組態執行個體受控識別的主體識別碼。 將如下所示的值取代為 contoso-principalId 上一個步驟中取得的主體標識碼。 使用下列命令列來授與受管理金鑰的權限:

    az keyvault set-policy -n contoso-vault --object-id contoso-principalId --key-permissions get wrapKey unwrapKey
    
  6. 既然 Azure 應用程式組態 實例可以存取受控密鑰,我們可以使用 Azure CLI 在服務中啟用客戶管理的密鑰功能。 重新叫用在建立金鑰步驟期間所記錄的下列屬性:key namekey 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 受控識別整合,請繼續進行下一個步驟。