为满足数据安全与合规性要求,您可以使用透明数据加密(TDE)功能。TDE在存储层对数据文件进行实时的I/O加密和解密,在数据写入磁盘前加密,从磁盘读入内存时解密。整个过程对应用程序完全透明,您无需修改任何业务代码即可实现数据的加密保护。
功能简介
PolarDB的TDE功能基于国际标准的AES(Advanced Encryption Standard)算法,密钥长度为256位,确保了加密的安全性。
TDE的密钥管理依赖于阿里云密钥管理服务(KMS)。您可以选择以下两种方式管理密钥:
服务密钥:由阿里云自动为您创建和管理,操作便捷,无需额外配置。
自定义密钥:您可以在KMS中创建自己的密钥,并授权PolarDB使用。这种方式让您对密钥有完全的控制权,包括密钥的轮转、禁用和删除等生命周期管理,满足更高的合规性要求。
前提条件
您的PolarDB MySQL版集群需满足以下内核版本要求:
产品系列
数据库引擎
内核小版本
集群版
MySQL 5.6
需为5.6.1.0.21及以上。
MySQL 5.7
需为5.7.1.0.3及以上。
MySQL 8.0.1、MySQL 8.0.2
说明Serverless集群的MySQL 8.0.2版本不支持开启TDE。
需为8.0.1.1.1及以上。
标准版
MySQL 5.7
需为5.7.1.0.3及以上。
MySQL 8.0.1、MySQL 8.0.2
需为8.0.1.1.1及以上。
如果您计划使用自定义密钥,还需满足以下条件:
开通阿里云密钥管理服务(KMS)。
使用阿里云主账号或具有
AliyunSTSAssumeRoleAccess
权限的RAM用户进行操作。
计费说明
存储费用:TDE不会增加数据文件的大小,因此不产生额外的存储费用。
密钥费用:
使用服务密钥:不收取任何费用。
使用自定义密钥:PolarDB侧不收费,但在密钥管理服务(KMS)侧将产生相关的密钥费用。
注意事项
源集群影响:
功能开启后无法关闭。请在充分评估业务需求和影响后再执行此操作。
开启TDE会导致集群重启,中断业务连接,请选择适合的业务低峰期进行操作。
在I/O密集型(IO-bound)的业务场景下,开启TDE可能会对数据库性能产生一定影响。
自定义密钥:使用自定义密钥时,密钥的可用性直接影响集群的可用性。
在KMS中对密钥执行禁用、计划删除或删除密钥材料等操作,会造成密钥不可用。
撤销了对PolarDB的授权后,重启集群会导致集群不可用。
全球数据库网络(GDN):支持为加入全球数据库网络(GDN)的集群开启TDE。
主集群开启后,所有从集群将自动同步开启,且所使用的密钥及密钥所在地域均与主集群相同,密钥所在地域不支持修改。
不支持为GDN中的从集群单独开启TDE。
操作指南
步骤一:为集群开启TDE加密
开启TDE加密将导致集群重启,并且一旦开启后无法关闭。因此,请在充分评估后谨慎进行操作。
前往PolarDB控制台,在目标集群详情页内,单击左侧导航栏中 ,在TDE配置页签,打开TDE状态开关。
在弹出的对话框中,选择密钥类型:
使用服务密钥(阿里云自动生成):无需额外配置,单击确定即可。
使用已有自定义密钥:需要从下拉列表中选择一个您在KMS中已创建的密钥,然后单击确定。如果列表为空,请先前往KMS控制台创建密钥。
说明目前TDE支持的加密类型为
Aliyun_AES_256
与Aliyun_SM4
,创建KMS的密钥,请注意加密类型。
开通TDE大约需要10分钟时间,请您耐心等待集群重启。
步骤二:(可选)为新建表自动开启加密
如果您希望此后在集群中创建的所有新表都自动应用加密,可以在开启TDE时进行设置,勾选高级选项开关即可。
适用场景:适用于对数据安全有严格要求,希望默认加密所有新产生数据的业务。
版本要求:
MySQL 8.0,且 内核小版本需为8.0.1.1.15及以上。
MySQL 5.7,且 内核小版本需为5.7.1.0.35及以上。
步骤三:为已有表加密和解密
为集群开启TDE后,并不会自动加密存量表。您需要通过ALTER TABLE
命令手动为指定的存量表开启或关闭加密。
如果您打开了高级选项,则无需对新建的表执行加密操作,系统已自动加密。
执行
ALTER TABLE
命令对表进行加密或解密时,该表会被锁定,期间无法进行读写操作。
数据库版本 | 加密表的命令 | 解密表的命令 |
MySQL 5.6 |
|
|
MySQL 5.7、MySQL 8.0 |
|
|
步骤四:验证表是否已加密
您可以通过查询SHOW CREATE TABLE <table_name>;
命令来确认表的加密状态。
对于MySQL 5.7、MySQL 8.0版本,如果返回信息包含
ENCRYPTION='Y'
,则表示该表已加密。对于MySQL 5.6版本,如果返回信息包含
BLOCK_FORMAT=ENCRYPTED
,则表示该表已加密。
常见问题
相关内容
相关API
API | 描述 |
查询PolarDB集群的TDE设置详情。 | |
查询PolarDB集群的自定义密钥列表。 | |
检查KMS密钥是否已存在。 | |
开启PolarDB集群的TDE功能。 |