设置透明数据加密TDE

在安全合规或静态数据加密等场景下,推荐使用透明数据加密TDE(Transparent Data Encryption)功能,对数据文件执行实时I/O加密和解密,通过在数据库层执行静态数据加密,阻止可能的攻击者绕过数据库直接从存储中读取敏感信息,有效提高数据库中敏感数据的安全性。

背景信息

简介:TDE通过在数据库层执行静态数据加密,阻止可能的攻击者绕过数据库直接从存储中读取敏感信息。开启透明数据加密TDE功能后,会对数据在写入磁盘之前进行加密,从磁盘读入内存时进行解密。经过数据库身份验证的应用和用户可以继续透明地访问应用数据(不需要更改应用代码或配置),而尝试读取表空间文件中的敏感数据的OS用户以及尝试读取磁盘或备份信息的未知用户将不允许访问明文数据。

密钥:TDE加密使用的密钥由密钥管理服务(KMS)产生和管理,RDS不提供加密所需的密钥和证书。您可以使用阿里云自动生成的密钥,也可以使用自定义密钥并授权RDS使用。

加密算法:开通TDE后,不同数据库版本的加密算法如下所示。

数据库版本

支持的加密算法

修改加密算法

MySQL 5.6

AES_128_ECB

不支持修改。

MySQL 5.7、8.0

  • AES_256_CBC(默认值)

  • SM4_CTR

使用参数innodb_encrypt_algorithm进行修改。

重要

参数innodb_encrypt_algorithm修改风险较大,会影响实例内所有加密数据的加解密算法选择,包括加密表和加密日志等,若参数和数据实际的加密算法不同,会导致解析失败。innodb_encrypt_algorithm参数控制台不可见,如需修改请提交工单。

适用范围

  • 如需使用TDE功能,实例需满足以下条件:

    • 数据库版本:MySQL 8.0、5.75.6,且内核小版本在20191015及以上。

    • 产品系列:高可用系列或集群系列。

注意事项

  • TDE开通后无法关闭,无法修改密钥,会显著增加CPU使用率

  • 实例切换:TDE开通过程中会重启实例造成实例切换,一般会有30秒左右的实例不可用,建议在业务低峰期操作,并确保应用具有自动重连机制。

  • 无需代码修改:开通TDE不会增加数据文件的大小,应用侧无需修改代码与配置即可使用TDE功能。

  • 数据恢复限制:TDE开通后,不支持跨地域恢复。如需恢复数据到本地,需要先解密数据

  • 变更配置限制:TDE开通后,不支持将高可用系列变更为集群系列。

  • 自定义密钥限制:使用已有自定义密钥时,需要注意以下事项:

    • 自定义密钥仅支持对称密钥,不支持非对称密钥。

    • KMS实例不可用(过期或删除)、禁用密钥、设置密钥删除计划或者删除密钥材料都会造成密钥不可用,进而导致RDS实例数据不可恢复。

    • 撤销授权关系后,重启RDS实例会导致RDS实例不可用。

  • 内核版本升级:为保证实例的稳定性,建议您将主实例和只读实例(如有)的内核小版本均升级至最新版本

开通透明数据加密TDE

您可以使用阿里云自动生成的密钥开通TDE功能,也可以使用自定义密钥并授权RDS使用。开通TDE功能时需要使用阿里云主账号或者具有AliyunSTSAssumeRoleAccess权限的账号。

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧导航栏单击数据安全性并选择TDE页签。

  3. TDE设置 > TDE状态处单击按钮开通TDE功能。

  4. 选择需要使用的密钥类型:

    • 使用自动生成的密钥:该方式使用的加密密钥为KMS的服务密钥。

    • 使用已有自定义密钥:选择已有的自定义密钥(仅支持对称密钥)。

      说明

      如无可用密钥,需单击前往创建在密钥管理服务控制台创建密钥并导入自带的密钥材料,创建密钥时密钥类型选择对称密钥

  5. 单击确定,开通TDE功能。

使用TDE加密与解密数据

加密数据

您可以登录数据库,使用以下命令对待加密的表进行加密。

说明

开通TDE功能后,已有数据表不会自动加密,需要手动执行以下命令完成加密操作。

  • MySQL 5.6

    ALTER TABLE <tablename> engine=innodb,block_format=encrypted;
  • MySQL 5.78.0

    ALTER TABLE <tablename> encryption='Y';

解密数据

您可以登录数据库,使用以下命令对数据进行解密。

  • MySQL 5.6

    ALTER TABLE <tablename> engine=innodb,block_format=default;
  • MySQL 5.78.0

    ALTER TABLE <tablename> encryption='N';

常见问题

  • Q1:开启TDE后,常用数据库工具(Navicat等)还能正常使用吗?

    A:可以正常使用。

  • Q2:开启TDE后,还能正常迁移数据到其他RDS实例吗?

    A:可以正常迁移。

  • Q3:加密后查看数据为什么还是明文的?

    A:查询数据时会解密并读取到内存,所以是明文显示。开启TDE可以防止备份泄露导致数据泄露,备份文件是加密的,无法用于恢复到本地,如果要恢复数据到本地,需要先解密数据。

相关文档

相关API

API

描述

ModifyDBInstanceTDE - 修改RDS实例透明数据加密TDE状态

开启RDS实例透明数据加密时,需将TDEStatus参数设置为Enabled,其他参数请按需设置。