PowerShell 和 Azure CLI:使用 Azure Key Vault 中的客戶自控金鑰來啟用透明資料加密

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

本文會逐步解說如何將 Azure Key Vault 中的金鑰用於 Azure SQL Database 或 Azure Synapse Analytics 上的透明資料加密 (TDE)。 若要深入了解以 Azure Key Vault 整合進行 TDE - 攜帶您自己的金鑰 (BYOK) 的支援,請參閱 Azure SQL 透明資料加密:「攜帶您自己的金鑰」支援。 如果您在找如何使用 Azure Key Vault 的客戶自控金鑰啟用 TDE 的 Azure 入口網站指示,請參閱建立伺服器並設定使用者指派的受控識別和客戶自控 TDE

本文適用於 Azure SQL Database、Azure SQL 受控執行個體和 Azure Synapse Analytics (原為 SQL DW 的專用 SQL 集區)。 如需 Synapse 工作區中專用 SQL 集區的透明資料加密文件,請參閱 Azure Synapse Analytics 加密

注意

Azure SQL 現在支援使用受控 HSM 中所儲存的 RSA 金鑰作為 TDE 保護裝置。 Azure Key Vault 受控 HSM 是一種完全受控、高可用性、單一租用戶且符合標準的雲端服務,可讓您使用 FIPS 140-2 層級 3 驗證過的 HSM 來保護雲端應用程式的密碼編譯金鑰。 深入了解受控 HSM

注意

Microsoft Entra 標識符 先前稱為 Azure Active Directory (Azure AD)。

PowerShell 的必要條件

  • 您必須具有 Azure 訂用帳戶,並且是該訂用帳戶的系統管理員。
  • [建議執行的選擇性作業] 備妥硬體安全性模組 (HSM) 或本機金鑰存放區,用來建立 TDE 保護裝置金鑰內容的本機複本。
  • 您必須安裝並執行 Azure PowerShell。
  • 建立要用於 TDE 的 Azure Key Vault 和金鑰。
  • 索引鍵必須具有下列屬性,才能用於 TDE:
    • 啟用日期 (如果設定) 必須是過去的日期和時間
    • 到期日 (如果設定) 必須是未來的日期和時間
    • 金鑰必須處於 [已啟用] 狀態
    • 能夠執行取得包裝金鑰解除包裝金鑰作業
  • 若要使用受控 HSM 金鑰,請遵循指示以使用 Azure CLI 來建立和啟用受控 HSM

如需 Az 模組安裝指示,請參閱安裝 Azure PowerShell。 針對特定的 Cmdlet,請參閱 AzureRM.Sql

如需 Key Vault 的詳細資訊,請參閱從 Key Vault 使用 PowerShell 的指示以及如何使用 Key Vault 虛刪除與 PowerShell

重要

PowerShell Azure Resource Manager (RM) 模組仍受支援,但所有未來的開發都是針對 Az.Sql 模組進行的。 AzureRM 模組在至少 2020 年 12 月之前都還會持續收到 Bug 修正。 Az 模組和 AzureRm 模組中命令的引數本質上完全相同。 如需其相容性的詳細資訊,請參閱新的 Azure PowerShell Az 模組簡介

將 Microsoft Entra 身分識別指派給您的伺服器

如果您有現有的 伺服器,請使用下列命令將 Microsoft Entra 身分識別新增至您的伺服器:

$server = Set-AzSqlServer -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> -AssignIdentity

如果您要建立伺服器,請使用 New-AzSqlServer Cmdlet 搭配標記 -Identity 在伺服器建立期間新增 Microsoft Entra 身分識別:

$server = New-AzSqlServer -ResourceGroupName <SQLDatabaseResourceGroupName> -Location <RegionName> `
    -ServerName <LogicalServerName> -ServerVersion "12.0" -SqlAdministratorCredentials <PSCredential> -AssignIdentity

為您的伺服器授與 Key Vault 權限

請先使用 Set-AzKeyVaultAccessPolicy Cmdlet 將金鑰保存庫的存取權授與您的伺服器,再使用金鑰保存庫中的金鑰進行 TDE。

Set-AzKeyVaultAccessPolicy -VaultName <KeyVaultName> `
    -ObjectId $server.Identity.PrincipalId -PermissionsToKeys get, wrapKey, unwrapKey

若要在受控 HSM 上將權限新增至您的伺服器,請將「受控 HSM 密碼編譯服務加密使用者」本機 RBAC 角色新增至伺服器。 這可讓伺服器針對受控 HSM 中的金鑰執行取得、包裝金鑰、解除包裝金鑰作業。 在受控 HSM 上佈建伺服器存取的指示

將 Key Vault 金鑰新增至伺服器,並設定 TDE 保護裝置

注意

針對受控 HSM 金鑰,使用 Az.Sql 2.11.1 版的 PowerShell。

注意

金鑰保存庫名稱和金鑰名稱的合併長度不可超過 94 個字元。

提示

Key Vault 中的範例 KeyId: https://contosokeyvault.vault.azure.net/keys/Key1/1a1a2b2b3c3c4d4d5e5e6f6f7g7g8h8h

受控 HSM 的範例 KeyId:
https://contosoMHSM.managedhsm.azure.net/keys/myrsakey

# add the key from Key Vault to the server
Add-AzSqlServerKeyVaultKey -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> -KeyId <KeyVaultKeyId>

# set the key as the TDE protector for all resources under the server
Set-AzSqlServerTransparentDataEncryptionProtector -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName> `
   -Type AzureKeyVault -KeyId <KeyVaultKeyId>

# confirm the TDE protector was configured as intended
Get-AzSqlServerTransparentDataEncryptionProtector -ResourceGroupName <SQLDatabaseResourceGroupName> -ServerName <LogicalServerName>

開啟 TDE

使用 Set-AzSqlDatabaseTransparentDataEncryption Cmdlet 以開啟 TDE。

Set-AzSqlDatabaseTransparentDataEncryption -ResourceGroupName <SQLDatabaseResourceGroupName> `
   -ServerName <LogicalServerName> -DatabaseName <DatabaseName> -State "Enabled"

現在,資料庫或資料倉儲已使用 Key Vault 中的加密金鑰啟用 TDE。

檢查加密狀態和加密活動

使用 Get-AzSqlDatabaseTransparentDataEncryption,取得資料庫或資料倉儲的加密狀態。

# get the encryption state of the database
Get-AzSqlDatabaseTransparentDataEncryption -ResourceGroupName <SQLDatabaseResourceGroupName> `
   -ServerName <LogicalServerName> -DatabaseName <DatabaseName> `

PowerShell Cmdlet

  • 使用 Set-AzSqlDatabaseTransparentDataEncryption Cmdlet 以關閉 TDE。

    Set-AzSqlDatabaseTransparentDataEncryption -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName> `
        -DatabaseName <DatabaseName> -State "Disabled"
    
  • 使用 Get-AzSqlServerKeyVaultKey Cmdlet 傳回已新增至伺服器的 Key Vault 金鑰清單。

    # KeyId is an optional parameter, to return a specific key version
    Get-AzSqlServerKeyVaultKey -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
    
  • 使用 Remove-AzSqlServerKeyVaultKey 從伺服器中移除 Key Vault 金鑰。

    # the key set as the TDE Protector cannot be removed
    Remove-AzSqlServerKeyVaultKey -KeyId <KeyVaultKeyId> -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>
    

疑難排解

如果發生問題,請進行下列檢查:

  • 如果找不到金鑰保存庫,則請確定您位於正確的訂用帳戶中。

    Get-AzSubscription -SubscriptionId <SubscriptionId>
    

  • 如果無法將新的金鑰新增至伺服器,或新的金鑰無法更新為 TDE 保護裝置,請檢查下列專案:
    • 金鑰不應有到期日
    • 金鑰必須已啟用取得包裝金鑰解除包裝金鑰作業。

後續步驟