如果您的业务场景(如备份和复制、查询和分析、存储和传输)需要对数据进行加密,或有特殊的安全合规要求,可以参考本文档,开启RDS PostgreSQL的透明数据加密TDE(Transparent Data Encryption)功能。该功能对数据文件执行实时I/O加密和解密,通过在数据库层执行静态数据加密,阻止可能的攻击者绕过数据库直接从存储中读取敏感信息,可以有效提高数据库中敏感数据的安全性。
前提条件
-
RDS PostgreSQL实例需满足以下要求:
-
实例大版本为PostgreSQL 10或以上版本。
-
存储类型为云盘。
-
实例内核小版本为20221030或以上。查看内核小版本请参见升级内核小版本。
-
如果包含只读实例,只读实例也需满足以上条件。
说明
如需升级内核小版本,请参见升级内核小版本。
-
-
已开通密钥管理服务KMS(Key Management Service)。如果您未开通KMS,可在开通TDE过程中根据引导开通KMS。
注意事项
-
如果包含只读实例,请确保主实例和只读实例内核小版本均升级到20221030以上,否则开通TDE加密会失败。
-
TDE开通过程中会重启实例造成闪断,请做好业务安排,谨慎操作。
-
TDE开通后无法关闭。
-
开通TDE后,如果是I/O密集型(I/O bound)场景,可能会对数据库性能产生一定影响。
-
TDE实例不支持用户通过物理流复制自建备库。
-
如果密钥管理服务KMS欠费,将会导致云盘无法解密,整个实例不可用,请确保KMS状态正常。
-
使用已有自定义密钥时,需要注意:
-
禁用或删除了KMS的自定义密钥,将会造成RDS实例无法正常工作,受影响的操作包括:创建快照、恢复快照和备库重建等。
-
撤销授权关系后,重启RDS实例会导致RDS实例不可用。
-
需要使用主账号或者具有AliyunSTSAssumeRoleAccess权限的账号。
说明
关于密钥的相关操作请参见密钥管理服务。
-
开通TDE加密
使用由阿里云自动生成的密钥
说明
该方式使用的加密密钥(KEK)为KMS的服务密钥,加密原理请参见TDE加密解密原理。
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
-
在左侧导航栏单击数据安全性。
-
在TDE页签单击未开通左边的滑块。
-
选择使用由阿里云自动生成的密钥,单击确定,开通TDE。
使用已有自定义密钥
说明
该方式使用的加密密钥(KEK)为您上传至KMS的自定义密钥(CMK),加密原理请参见TDE加密解密原理。
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
-
在左侧导航栏单击数据安全性。
-
在TDE页签单击未开通左边的滑块。
-
选择 使用已有自定义密钥,选择密钥,单击确定,开通TDE。
说明
如果没有自定义密钥,需要单击前往创建,在密钥管理服务控制台创建密钥并导入自带的密钥材料。详情请参见创建密钥。
更换密钥
该功能需要已开启TDE加密。
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
-
在左侧导航栏单击数据安全性。
-
在TDE页签单击TDE状态右侧的更换密钥。
-
选择使用由阿里云自动生成的密钥或 使用已有自定义密钥,选择密钥,单击确定。
说明
如果没有自定义密钥,需要单击前往创建,在密钥管理服务控制台创建密钥并导入自带的密钥材料。详情请参见创建密钥。
使用TDE对表或索引进行加密或解密
实例级别开启了TDE之后,您还需要对RDS PostgreSQL的表进行表级别的TDE加密解密操作。
说明
加密和解密会带来性能损耗,请合理控制加密范围以减少性能损耗。
-
加密
-
全局设置
您可以在RDS控制台设置参数rds_default_table_encryption为ON,当开启此参数后,新建的表(CREATE TABLE)、索引(CREATE INDEX)将会默认加密。
说明
-
该参数仅适用于内核小版本大于等于20231030的RDS PostgreSQL 14和15实例,如何修改参数,请参见设置实例参数。
-
如果您将参数rds_default_table_encryption的取值由ON修改为OFF,仅影响后续创建的表或索引,之前已创建默认加密的表和索引不受影响。
-
-
指定表、索引加密
-
表加密。
-- 创建加密表 CREATE TABLE WITH (encryption=on); -- 修改表为加密类型 ALTER TABLE SET (encryption=on);
-
索引加密。
-- 创建加密索引 CREATE INDEX ... WITH (encryption=on); -- 修改索引为加密类型 ALTER INDEX SET (encryption=on);
说明
支持6种索引的加密:btree、hash、spgist、gin、gist和brin。
-
-
-
解密
说明
以下ALTER语句会触发表或索引的重写,类似VACUUM FULL,请勿在业务高峰期执行。
-
解密加密表。
ALTER TABLE SET (encryption=off);
-
解密加密索引。
ALTER INDEX SET(encryption=off);
-
-
查看表或索引的加密状态。
SELECT relname, reloptions FROM pg_class WHERE relname IN ('', '');
常见问题
-
开启TDE后,常用数据库工具(pgAdmin等)还能正常使用吗?
可以正常使用。
-
开启TDE后,还能正常迁移数据到其他RDS实例吗?
可以正常迁移。
-
加密后查看数据为什么还是明文的?
查询数据时会解密并读取到内存,所以是明文显示。开启TDE可以防止备份泄露导致数据泄露,备份文件是加密的,无法用于恢复到本地,如果要恢复数据到本地,需要先解密数据。
相关文档
RDS PostgreSQL提供rds_tde_utils插件,用于批量加密、解密索引、表、数据库对象。
相关API
API |
描述 |
开启TDE |
开启RDS实例透明数据加密。 |
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/154885.html