你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

PowerShell 和 Azure CLI:使用 Azure Key Vault 中客户管理的密钥实现透明数据加密

适用于:Azure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics

本文逐步介绍如何使用 Azure Key Vault 中的密钥对 Azure SQL 数据库或 Azure Synapse Analytics 启用透明数据加密 (TDE)。 要了解更多关于 TDE 与 Azure Key Vault 集成(即自带密钥 (BYOK) 支持)的信息,请访问使用 Azure Key Vault 中由客户管理的密钥进行 TDE。 若要查找有关如何使用 Azure Key Vault 的客户管理的密钥启用 TDE 的 Azure 门户说明,请参阅创建使用用户分配的托管标识和客户管理的 TDE 配置的服务器

本文适用于 Azure SQL 数据库、Azure SQL 托管实例和 Azure Synapse Analytics 专用 SQL 池。 有关 Synapse 工作区内专用 SQL 池的透明数据加密的文档,请参阅 Azure Synapse Analytics 加密

注意

Azure SQL 现在支持使用托管 HSM 中存储的 RSA 密钥作为 TDE 保护程序。 Azure Key Vault 托管 HSM 是一项完全托管、高度可用、单租户、符合标准的云服务,通过该服务,可以使用通过 FIPS 140-2 级别 3 验证的 HSM 来保护云应用程序的加密密钥。 详细了解托管 HSM

注意

Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。

PowerShell 先决条件

  • 必须有一个 Azure 订阅,并且是该订阅的管理员。
  • [建议但可选] 提供硬件安全模块 (HSM) 或本地密钥存储,以便创建 TDE 保护器密钥材料的本地副本。
  • 必须安装并运行 Azure PowerShell。
  • 创建用于 TDE 的 Azure Key Vault 和密钥。
  • 密钥必须包含用于 TDE 的以下特性:
    • 激活日期(如果已设置)必须是过去的日期和时间
    • 到期日期(若已设置)必须是将来的日期和时间
    • 密钥必须处于“已启用”状态
    • 能够执行“获取”、“包装密钥”和“解包密钥”操作
  • 若要使用托管 HSM 密钥,请按照使用 Azure CLI 创建并激活托管 HSM 中的说明进行操作

有关 Az PowerShell 模块的安装说明,请参阅安装 Azure PowerShell

有关 Key Vault 的具体信息,请参阅 Key Vault 的 PowerShell 说明如何将 Key Vault 软删除与 PowerShell 配合使用

为服务器分配 Microsoft Entra 标识

如果具有现有服务器,请执行以下操作将 Microsoft Entra 标识添加到服务器:

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

如果正在创建服务器,请在创建服务器期间,结合 -Identity 标记使用 New-AzSqlServer cmdlet 来添加 Microsoft Entra 标识:

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

向服务器授予 Key Vault 权限

将 Key Vault 中的密钥用于 TDE 之前,请使用 Set-AzKeyVaultAccessPolicy cmdlet 向服务器授权 Key Vault 的访问权限。

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

若要在托管 HSM 上向服务器添加权限,请向服务器添加本地 RBAC 角色“托管 HSM 加密服务加密用户”。 这使服务器能够对托管 HSM 中的密钥执行获取密钥、密钥包装和密钥解包操作。 有关详细信息,请参阅托管 HSM 角色管理

将 Key Vault 密钥添加到服务器并设置 TDE 保护器

注意

对于托管 HSM 密钥,请使用 Az.Sql 2.11.1 版本的 PowerShell。

注意

Key Vault 名称和密钥名称的总长度不能超过 94 个字符。

提示

Key Vault 中的示例 KeyId: https://contosokeyvault.vault.azure.net/keys/Key1/<key-id>

托管 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>
    

故障排除

  • 如果找不到 Key Vault,请确保在正确的订阅中操作。

    Get-AzSubscription -SubscriptionId <SubscriptionId>
    

  • 如果无法将新密钥添加到服务器,或者无法将新密钥更新为 TDE 保护程序,请检查以下内容:

    • 密钥不应有到期日期。
    • 密钥必须支持“获取”、“包装密钥”和“解包密钥”操作。