利用客戶自控金鑰支援透明資料加密的受控識別

適用於:Azure SQL DatabaseAzure SQL 受控執行個體

Microsoft Entra ID (先前稱為 Azure Active Directory) 提供自動受控識別,以向任何支援 Microsoft Entra 驗證的 Azure 服務進行驗證,例如 Azure Key Vault,而不會在程式碼中公開認證。 如需詳細資訊,請參閱 Azure 中的受控識別類型

受控身分識別可以有兩種類型:

  • 系統指派
  • 使用者指派

如需詳細資訊,請參閱適用於 Azure SQL 的 Microsoft Entra ID 中的受控識別

對於要在 Azure SQL 中使用客戶自控金鑰 (CMK) 進行透明資料加密 (TDE) 的情況,會使用伺服器上的受控識別來提供金鑰保存庫上伺服器的存取權限。 例如,在伺服器上以 CMK 啟用 TDE 之前,應該先將金鑰保存庫權限提供給伺服器的系統指派受控識別。

除了系統指派的受控識別 (已支援使用 CMK 進行 TDE) 之外,也可以使用已指派給伺服器的使用者指派的受控識別 (UMI) 允許伺服器存取金鑰保存庫。 啟用金鑰保存庫存取的必要條件是確定已將金鑰保存庫的 GetwrapKeyunwrapKey 等權限提供給使用者指派的受控識別。 由於使用者指派的受控識別屬於是可建立並授與金鑰保存庫存取權的一項獨立資源,因此,現在可於伺服器或資料庫建立期間,啟用透過客戶自控金鑰的 TDE

注意

若要將「使用者指派的受控識別」指派給邏輯伺服器或受控執行個體,使用者必須具備 SQL Server 參與者SQL 受控執行個體參與者 Azure RBAC 的角色,以及任何其他含有 Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action 動作的 Azure RBAC 角色。

使用 UMI 進行客戶自控 TDE 的優點

  • 藉由建立使用者指派的受控識別,並在建立伺服器或資料庫之前就先授與金鑰保存庫的存取權,就可以具備 Azure SQL 邏輯伺服器或受控執行個體的預先授權金鑰保存庫的存取權

  • 允許建立已啟用 TDE 和 CMK 的 Azure SQL 邏輯伺服器

  • 允許將相同的「使用者指派受控識別」指派給多部伺服器,而不需為每部 Azure SQL 邏輯伺服器或受控執行個體個別開啟系統指派的受控識別,並提供金鑰保存庫的存取權

  • 提供可在伺服器建立時,以可用的內建 Azure 原則強制執行 CMK 的功能

使用 UMI 進行客戶自控 TDE 時的考慮

  • 根據預設,Azure SQL 中的 TDE 會使用已設定於伺服器上的主要使用者指派的受控識別集來存取金鑰保存庫。 如果未將使用者指派的身分識別指派給伺服器,則會使用伺服器的系統指派受控識別來存取金鑰保存庫。
  • 以使用者指派的受控識別搭配 CMK 進行 TDE 時,請將身分識別指派給伺服器,並將其設定為該伺服器的主要身分識別
  • 主要使用者指派的受控識別會需要持續的金鑰保存庫存取權 (包括 get、wrapKey、unwrapKey 權限)。 如果該身分識別對金鑰保存庫的存取權已遭撤銷,或未提供足夠的權限,則資料庫將會變為無法存取的狀態
  • 如果將主要使用者指派的受控識別更新為不同的使用者指派的受控識別,則必須先將必要的金鑰保存庫權限授與新的身分識別,然後才對主要使用者指派的受控識別進行更新
  • 若要將伺服器從使用者指派的受控識別切換至系統指派的受控識別來存取金鑰保存庫,請提供具備必要金鑰保存庫權限系統指派受控識別,然後移除伺服器中所有的使用者指派的受控識別

重要

不應刪除 Azure 中已與 CMK 搭配 TDE 使用的主要使用者指派的受控識別。 若刪除此身分識別,將會導致伺服器無法存取金鑰保存庫,而且造成資料庫變為無法存取的狀態。

限制與已知問題

  • 如果金鑰保存庫位於使用防火牆的 VNet 後方,如果您想要使用使用者指派的受控識別或系統指派的受控識別,則必須在金鑰保存庫的網路功能表中啟用 [允許受信任的 Microsoft 服務略過此防火牆] 選項。 啟用此選項之後,Azure 入口網站的 SQL Server TDE 功能表將無法列出可用的金鑰。 若要設定個別 CMK,必須使用金鑰識別碼。 未啟用 [允許信任的 Microsoft 服務略過此防火牆] 選項時,會傳回下列錯誤:
    • Failed to save Transparent Data Encryption settings for SQL resource: <ServerName>. Error message: The managed identity with ID '/subscriptions/subsriptionID/resourcegroups/resource_name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/umi_name' requires the following Azure Key Vault permissions: 'Get, WrapKey, UnwrapKey' to the key 'https://keyvault_name/keys/key_name'. Please grant the missing permissions to the identity. Additionally ensure the key is not expired and is not disabled. For expired key, please extend the key expiry time so that SQL can use it to perform wrap and unwrap operations. If your key vault is behind a virtual network or firewall, ensure you select the 'Allow trusted Microsoft services to bypass this firewall' option. (https://aka.ms/sqltdebyokcreateserver).
    • 如果您收到上述錯誤,請檢查金鑰保存庫是否位於虛擬網路或防火牆後方,並確定已啟用 [允許信任的 Microsoft 服務略過此防火牆] 選項。
  • 目前,只有已啟用來自所有網路的公用存取的金鑰保存庫才支援適用於 SQL 受控執行個體的使用者指派的受控識別。 當 AKV 防火牆篩選特定虛擬網路和 IP 位址或使用私人端點連線時,不支援此設定。
  • 將多個使用者指派的受控識別指派給伺服器或受控執行個體時,如果在 Azure 入口網站的 [身分識別] 窗格中移除了伺服器中的單一身分識別,則即使刪除作業成功,該身分識別也不會從伺服器移除。 可在 Azure 入口網站中一次順利移除所有使用者指派的受控識別。
  • 當伺服器或受控執行個體設定為使用客戶自控的 TDE,且伺服器上已同時啟用了系統指派和使用者指派的受控識別時,如果沒有先將金鑰保存庫的存取權授與系統指派的受控識別就從伺服器移除使用者指派的受控識別,將會產生發生未預期的錯誤的訊息。 在伺服器中移除主要使用者指派的受控識別 (以及任何其他使用者指派的受控識別) 之前,請先確定已提供金鑰保存庫存取權給系統指派的受控識別。

後續步驟

另請參閱