Gaussdb for DWS透明加密介绍
1 特性介绍
透明加密功能是GaussDB for DWS的高级特性,是对存在硬盘上的用户数据加密存储。目前支持行存和列存文件的加密存储,支持到集群级别的透明加密配置。透明加密对客户是无感知的,仅需要创建DWS集群时配置透明加密。
定义
透明加密:数据在文件落盘时加密,对用户及上层使用SQL的应用不感知。
价值
保障用户数据安全。
范围
透明加密核心是算法和密钥,算法支持AES。密钥管理使用华为公有云KMS服务管理。
2 应用场景
数据库使用客户,对存储在GaussDB for DWS中的业务数据有很高机密性要求。需要消减因更换磁盘磁盘流出或运维待非法通过直接读取磁盘文件而绕过数据库认证及审计及数据丢换的风险时,建议使用透明加密特性。需注意加解密有较小的性能开销,实际的影响依赖硬件CPU处理相应加密算法的效率。
3系统影响
系统容量影响
无。加密模式选用CTR,CTR流加密可以保证明文和密文长度相等。不会导致加密后数据量大于不加密。
性能影响
使用透明加密对数据导入,以及读算子开销较大的SQL查询业务有较大。使用TPCDS测试模型评估的性能影响有如下参考值(不同硬件,不同测试模型):
AES: 性能下降小于4%
业务影响
无。透明加密对应用层业务不感知。
可靠性影响
因GAUSSDB FOR DWS进程重启时,需要访问KMS,故KMS服务及网络可靠性会影响GAUSSDB FOR DWS可靠性。
需强力保证根密钥的管理,一旦密钥丢失,GaussDB for DWS中的数据将不可解密。
4相关特性
依赖特性
华为公有云KMS服务
互斥特性
无
影响特性
无
5 原理
5.1 概述
站在管理面视角:
❶ 租户管理员登录华为公有云后,在DWS Console上申请创建加密集群;
❷ DWS Service接收到创建加密集群请求后,向KMS Service申请主密钥和集群密钥,并生成数据库密钥下发给GaussDB内核;
❸ GaussDB在集群初始化时加载密钥,并加密保存;
站在数据面视角:
❶ SQL Client下发SQL请求到GaussDB的CN,CN解析SQL请求后下发给DN;
❷ DN处理SQL请求触发写IO操作时,若向磁盘中写入数据,则内存数据加密写入磁盘;若从磁盘中读入数据,则磁盘数据解密后加载到内存;
5.2 密钥管理
5.2.1 KMS密钥管理
当选择KMS(密钥管理服务)对DWS进行密钥管理时,加密密钥层次结构有三层。按层次结构顺序排列,这些密钥为主密钥(CMK)、集群加密密钥 (CEK)、数据库加密密钥 (DEK)。
主密钥用于给CEK加密,保存在KMS中。
CEK用于加密DEK,CEK明文保存在DWS集群内存中,密文保存在DWS服务中。
DEK用于加密数据库中的数据,DEK明文保存在DWS集群内存中,密文保存在DWS服务中。
密钥使用流程如下:
1. 用户选择主密钥。
2. DWS随机生成CEK和DEK明文。
3. KMS使用用户所选的主密钥加密CEK明文并将加密后的CEK密文导入到DWS服务中。
4. DWS使用CEK明文加密DEK明文并将加密后的DEK密文保存到DWS服务中。
5. DWS将DEK明文传递到集群中并加载到集群内存中。
当该集群重启时,集群会自动通过API向DWS请求DEK明文,DWS将CEK、DEK密文加载到集群内存中,再调用KMS使用主密钥CMK来解密CEK,并加载到集群内存中,最后用CEK明文解密DEK,并加载到集群内存中,返回给集群。
加密密钥轮转
加密密钥轮转是指更新保存在DWS服务的密文。在DWS中,您可以轮转已加密集群的加密密钥CEK。
5.2.2 密钥轮转流程如下:
DWS集群启动密钥轮转。
DWS根据集群的主密钥来解密保存在DWS服务中的CEK密文,获取CEK明文。
用获取到的CEK明文解密保存在DWS服务中的DEK密文,获取DEK明文。
DWS重新生成新的CEK明文。
DWS用新的CEK明文加密DEK并将DEK密文保存在DWS服务中。
用主密钥加密新的CEK明文并将CEK密文保存在DWS服务中。
您可以根据业务需求和数据类型计划多久轮转一次加密密钥。为了提高数据的安全性,建议用户定期执行轮转密钥以避免密钥被破解的风险。一旦您发现密钥可能已泄露,请及时轮转密钥。
5.2.3 GaussDB内核密钥管理
创建密钥:初次安装启动时,DWS Service接收到创建加密集群请求后,向KMS Service申请主密钥和集群密钥,并生成数据库密钥(DEK)下发给GaussDB内核。并分发到GaussDB各节点。该DEK一次生成,终身使用,不可变更,不可轮转。在快照(即备份)恢复时,同样需要使用此前的DEK。
获取密钥:数据库CN、DN在启动时,会通过向一个url,传入AK/SK,及当前集群所在的区域(Region)信息,从管控面那里获取到DEK。在这里每一个集群的URL都不同(包含了当前集群的ClusterID);同一租户的AK/SK相同;Region根据集群部署的区域(例如华北、华东)不同而可能不同。
5.2.4 相关可靠性设计
扩容,集群备份与恢复已实现密钥密文记录文件及相关配置文件的同步操作。DWS保存的DEK密文分布在所有管控节点及GAUSSDB内核各节点上有较高的可靠性。
6 实施
6.1 配置
前提条件
已有华为云租户帐号
安装步骤
1. 进入华为公有云购买数据仓库集群页面。
2. 如下图高级配置选择自定义,打开加密数据库。
3. 创建委托选择是。
4. 点击立即购买,再点击提交即可。
6.2 验证
查看视图:
pg_tde_info视图,用于查看tde功能是否开启,以及使用的哪种加密算法。
列名 |
字段 |
含义 |
is_encrypt |
f/t |
是否加密集群 |
g_tde_algo |
AES-CTR-128 |
加密算法 |
remain |
Remain |
保留字段 |
用例编号 |
|||
测试名称 |
透明加密功能验证 |
||
测试目的 |
使用透明加密后的数据文件是否可以分析,加密是否成功 |
||
预置条件 |
1, Gauss 200透明加密集群和非透明加密集群已安装,状态正常。 2, pg_filedump(需要glibc-2.14或以上版本才能运行) |
||
测试步骤 |
1、 查询pg_tde_info视图 非透明加密集群: 透明加密集群: 2、 分别在透明加密集群和非透明加密集群创建如下表,并插入数据。 source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile gsql -d postgres -p 25308 –ar create table test(c1 int, c2 int, date timestamp) distribute by hash(c1); insert into test select generate_series(1,10000), generate_series(1,10000), sysdate; 3、 在透明加密和非透明加密集群CN上执行checkpoint或者重启集群保证数据下盘。 gsql -d postgres -p 25308 –ar checkpoint; 4、 到非透明加密集群和透明加密集群一个DN上查询test表对应的数据文件并传到pg_filedump服务器。 postgres=# select pg_relation_filepath('test'); pg_relation_filepath ---------------------- base/14548/16464 \q scp /srv/BigData/mppdb/data1/master1/base/14548/16464 10.185.180.55:/opt/filedump/pg_filedump-master postgres=# select pg_relation_filepath('test'); pg_relation_filepath ---------------------- base/14548/18019 \q scp /srv/BigData/mppdb/data1/master1/base/14548/18019 10.185.180.55:/opt/filedump/pg_filedump-master 5、使用pg_filedump分析数据文件 非透明加密集群数据文件分析,-D后面要加上表的字段数据类型 ./pg_filedump -D int,int,timestamp 18019 | more 每一个COPY对应的行为真实数据。 透明加密集群数据文件分析 ./pg_filedump -D int,int,timestamp 16464 | more 数据文件解析报错:Error: Item contents extend beyond block. |
||
测试脚本 |
|||
预期结果 |
1,步骤1查询pg_tde_info非透明加密集群is_encrypt为f,透明加密集群is_encrypt为t,g_tde_algo字段为加密算法。 2,步骤5非透明加密集群使用pg_filedump可以解析出数据,透明加密集群使用pg_filedump不能解析数据。 |
||
实测结果 |
|||
备注 |
使用透明加密对数据导入,以及读算子开销较大的SQL查询业务有较大。使用TPCDS测试模型评估的性能影响有如下参考值(不同硬件,不同测试模型): |
||
测试方签字 |
测试审核员签字 |
- 点赞
- 收藏
- 关注作者
评论(0)