设置透明数据加密TDE

为满足数据安全与合规性要求,您可以使用透明数据加密(TDE)功能。TDE在存储层对数据文件进行实时的I/O加密和解密,在数据写入磁盘前加密,从磁盘读入内存时解密。整个过程对应用程序完全透明,您无需修改任何业务代码即可实现数据的加密保护。

功能简介

PolarDBTDE功能基于国际标准的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.1MySQL 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.1MySQL 8.0.2

    需为8.0.1.1.1及以上。

  • 如果您计划使用自定义密钥,还需满足以下条件:

    • 开通阿里云密钥管理服务(KMS)。

    • 授权PolarDB访问KMS

    • 使用阿里云主账号或具有AliyunSTSAssumeRoleAccess权限的RAM用户进行操作。

计费说明

  • 存储费用:TDE不会增加数据文件的大小,因此不产生额外的存储费用。

  • 密钥费用:

    • 使用服务密钥:不收取任何费用。

    • 使用自定义密钥PolarDB侧不收费,但在密钥管理服务(KMS)侧将产生相关的密钥费用

注意事项

  • 源集群影响:

    • 功能开启后无法关闭。请在充分评估业务需求和影响后再执行此操作。

    • 开启TDE会导致集群重启,中断业务连接,请选择适合的业务低峰期进行操作。

    • I/O密集型(IO-bound)的业务场景下,开启TDE可能会对数据库性能产生一定影响。

  • 自定义密钥:使用自定义密钥时,密钥的可用性直接影响集群的可用性。

    • KMS中对密钥执行禁用、计划删除或删除密钥材料等操作,会造成密钥不可用。

    • 撤销了对PolarDB的授权后,重启集群会导致集群不可用。

  • 全球数据库网络(GDN):支持为加入全球数据库网络(GDN)的集群开启TDE。

    • 主集群开启后,所有从集群将自动同步开启,且所使用的密钥及密钥所在地域均与主集群相同,密钥所在地域不支持修改。

    • 不支持为GDN中的从集群单独开启TDE。

操作指南

步骤一:为集群开启TDE加密

重要

开启TDE加密将导致集群重启,并且一旦开启后无法关闭。因此,请在充分评估后谨慎进行操作。

  1. 前往PolarDB控制台,在目标集群详情页内,单击左侧导航栏中配置与管理 > 安全管理,在TDE配置页签,打开TDE状态开关。image

  2. 在弹出的对话框中,选择密钥类型:

    • 使用服务密钥(阿里云自动生成):无需额外配置,单击确定即可。

    • 使用已有自定义密钥:需要从下拉列表中选择一个您在KMS中已创建的密钥,然后单击确定。如果列表为空,请先前往KMS控制台创建密钥

      说明

      目前TDE支持的加密类型为Aliyun_AES_256Aliyun_SM4,创建KMS的密钥,请注意加密类型。

    image

  3. 开通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

ALTER TABLE <表名> BLOCK_FORMAT=ENCRYPTED;

ALTER TABLE <表名> BLOCK_FORMAT=DEFAULT;

MySQL 5.7MySQL 8.0

ALTER TABLE <表名> ENCRYPTION = 'Y';

ALTER TABLE <表名> ENCRYPTION = 'N';

步骤四:验证表是否已加密

您可以通过查询SHOW CREATE TABLE <table_name>;命令来确认表的加密状态。

  • 对于MySQL 5.7MySQL 8.0版本,如果返回信息包含ENCRYPTION='Y',则表示该表已加密。

  • 对于MySQL 5.6版本,如果返回信息包含BLOCK_FORMAT=ENCRYPTED,则表示该表已加密。

常见问题

开启TDE对业务有什么影响?

主要有两方面影响:

  1. 开启过程会重启集群,导致业务短暂中断。

  2. 对于I/O密集型业务,数据加解密会消耗少量CPU资源,可能带来一定的性能影响。

建议您在业务低峰期操作,并进行充分测试。

为什么需要TDE?它能解决什么安全问题?

TDE主要用于保护静态数据,即存储在磁盘上的数据。它能够有效阻止可能的攻击者绕过数据库直接从存储中读取敏感信息,从而显著增强数据库中敏感数据的安全性。这是一种对应用程序透明的底层数据保护机制。

是否可以限制RAM用户在创建集群时必须开启TDE加密功能?

可以。您可以通过设置RAM配置策略,来强制要求RAM用户在控制台或API创建集群时必须开启TDE加密功能。

相关内容

相关API

API

描述

DescribeDBClusterTDE

查询PolarDB集群的TDE设置详情。

DescribeUserEncryptionKeyList

查询PolarDB集群的自定义密钥列表。

CheckKMSAuthorized

检查KMS密钥是否已存在。

ModifyDBClusterTDE

开启PolarDB集群的TDE功能。