你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
本文逐步介绍如何使用 Azure 密钥保管库 中的密钥对 Azure SQL 数据库或 Azure Synapse Analytics 启用透明数据加密 (TDE)。 要了解更多关于 TDE 与 Azure 密钥保管库 集成(即自带密钥 (BYOK) 支持)的信息,请访问使用 Azure 密钥保管库 中由客户管理的密钥进行 TDE。 若要查找有关如何使用 Azure 密钥保管库 的客户管理的密钥启用 TDE 的 Azure 门户说明,请参阅创建使用用户分配的托管标识和客户管理的 TDE 配置的服务器。
本文适用于 Azure SQL 数据库、Azure SQL 托管实例和 Azure Synapse Analytics 专用 SQL 池。 有关 Synapse 工作区内专用 SQL 池的透明数据加密的文档,请参阅 Azure Synapse Analytics 加密。
注意
Azure SQL 数据库支持客户管理的透明数据加密的非对称(RSA)和对称(AES)密钥,具体取决于配置。 对对称(AES)密钥的支持目前为公共预览版,限制为Azure SQL 数据库。 根据你的区域和服务部署状态,你可能会看到此功能随时间推移而显示。 有关详细信息,请参阅使用客户管理的密钥 (BYOK) 的透明数据加密 - 概述。
PowerShell 先决条件
- 必须有一个 Azure 订阅,并且是该订阅的管理员。
- [建议但可选] 提供硬件安全模块 (HSM) 或本地密钥存储,以便创建 TDE 保护器密钥材料的本地副本。
- 必须安装并运行 Azure PowerShell。
- 创建用于 TDE 的 Azure 密钥保管库 和密钥。
-
有关使用硬件安全模块(HSM)和 Azure 密钥保管库 的说明
- Key Vault 必须包含用于 TDE 的以下属性:
- 软删除和清除保护
-
有关使用硬件安全模块(HSM)和 Azure 密钥保管库 的说明
- 密钥必须包含用于 TDE 的以下特性:
- 激活日期(如果已设置)必须是过去的日期和时间
- 到期日期(若已设置)必须是将来的日期和时间
- 密钥必须处于“已启用”状态
- 能够执行“获取”、“包装密钥”和“解包密钥”操作
- 若要使用Azure 密钥保管库托管 HSM 密钥,请按照说明使用 Azure CLI 创建和激活托管 HSM
有关 Az PowerShell 模块安装说明,请参阅安装 Azure PowerShell。
有关 Azure 密钥保管库 的详细信息,请参阅 Azure 密钥保管库 中的 PowerShell 说明 以及如何 通过 PowerShell 使用 Azure 密钥保管库 软删除。
为服务器分配 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
向服务器授予 Azure 密钥保管库 权限
将 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 角色管理
将 Azure 密钥保管库 密钥添加到服务器并设置 TDE 保护程序
- 使用 Get-AzKeyVaultKey cmdlet 从密钥保管库中检索密钥 ID。
- 使用 Add-AzSqlServerKeyVaultKey cmdlet 将密钥从 Azure 密钥保管库 添加到服务器。
- 使用 Set-AzSqlServerTransparentDataEncryptionProtector cmdlet 将密钥设置为所有服务器资源的 TDE 保护器。
- 使用 Get-AzSqlServerTransparentDataEncryptionProtector cmdlet 确认已按预期配置了 TDE 保护器。
注意
对于托管 HSM 密钥,请使用 Az.Sql 2.11.1 版本的 PowerShell 或更高版本。
注意
Key Vault 名称和密钥名称的总长度不能超过 94 个字符。
提示
使用版本化和无版本 Azure 密钥保管库 密钥来实现 TDE
设置 TDE 保护器时,可以通过特定的密钥版本或无版本的密钥标识符来引用 Azure 密钥保管库 密钥。
在这两种情况下,Azure SQL 数据库始终解析并使用 Azure 密钥保管库 或 Azure 密钥保管库 托管 HSM 中已启用的密钥的最新版本。 无版本密钥标识符可用于避免在 TDE 保护程序配置中嵌入特定密钥版本。
目前仅 Azure SQL 数据库支持无版本密钥标识符。
示例:
包含特定版本的密钥标识符
https://<key-vault-name>.vault.azure.net/keys/<key-name>/<key-version>无版本密钥标识符
https://<key-vault-name>.vault.azure.net/keys/<key-name>
# add the key from Azure 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"
现在,数据库或数据仓库已在 Azure 密钥保管库 中使用加密密钥启用 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 返回添加到服务器的 Azure 密钥保管库 密钥列表。
# KeyId is an optional parameter, to return a specific key version Get-AzSqlServerKeyVaultKey -ServerName <LogicalServerName> -ResourceGroupName <SQLDatabaseResourceGroupName>使用 Remove-AzSqlServerKeyVaultKey 从服务器中删除 Azure 密钥保管库 密钥。
# 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 保护程序,请检查以下内容:
- 密钥不应有到期日期。
- 密钥必须支持“获取”、“包装密钥”和“解包密钥”操作。
相关内容
- 了解如何轮换服务器的 TDE 保护器以符合安全要求:使用 PowerShell 轮换透明数据加密保护器。
- 了解如何删除可能遭到入侵的 TDE 保护程序:删除可能泄露的密钥。