更新时间:2025-06-20 GMT+08:00
分享

使用KMS对GaussDB(DWS)集群进行加密

GaussDB(DWS)支持为集群启用数据库加密,以保护静态数据。当您为集群启用加密时,该集群及其快照的数据都会得到加密处理。数据库加密是在数据落盘时进行加密,即在往GaussDB(DWS)写入数据时GaussDB(DWS)会对数据进行加密,而在用户查询数据时GaussDB(DWS)会将数据自动进行解密后再将结果返回给用户。

如果希望加密,可以在集群创建时启用加密或创建后进行转加密操作。虽然加密是GaussDB(DWS)集群中的一项可选设置,但建议您为集群启用该设置以保护数据。

约束与限制

  • 存算分离集群仅9.1.0及以上集群版本支持数据库转加密功能。
  • 容灾集群不支持转加密。如果该集群存在容灾关系,即使集群在“可用”状态也无法转加密,用户需先解除容灾关系,转加密成功后再重新建立容灾关系。
  • 数据库加密功能创建集群时选择是否开启,一旦开启就无法关闭。详情请参见加密数据库。普通集群创建完后,可以通过转加密集群功能,将集群转成加密集群。
  • 开启数据库加密功能后,用于加密GaussDB(DWS)数据库的KMS密钥在使用过程中不能被禁用、删除或冻结,否则会导致GaussDB(DWS)集群异常或数据库不可用。
  • 开启数据库加密功能后创建的快照不支持使用openAPI做恢复。

使用KMS服务加密DWS数据库原理流程

当选择KMS(密钥管理服务)对GaussDB(DWS)进行密钥管理时,加密密钥层次结构有三层。按层次结构顺序排列,这些密钥为主密钥(CMK)、集群加密密钥 (CEK)、数据库加密密钥 (DEK)。

  • 主密钥用于给CEK加密,保存在KMS中。
  • CEK用于加密DEK,CEK明文保存在GaussDB(DWS)集群内存中,密文保存在GaussDB(DWS)服务中。
  • DEK用于加密数据库中的数据,DEK明文保存在GaussDB(DWS)集群内存中,密文保存在GaussDB(DWS)服务中。

密钥使用流程如下:

  1. 用户选择主密钥。
  2. GaussDB(DWS)随机生成CEK和DEK明文。
  3. KMS用户所选的主密钥加密CEK明文并将加密后的CEK密文导入到GaussDB(DWS)服务中。
  4. GaussDB(DWS)使用CEK明文加密DEK明文并将加密后的DEK密文保存到GaussDB(DWS)服务中。
  5. GaussDB(DWS)将DEK明文传递到集群中并加载到集群内存中。

当该集群重启时,集群会自动通过API向GaussDB(DWS)请求DEK明文,GaussDB(DWS)将CEK、DEK密文加载到集群内存中,再调用KMS使用主密钥CMK来解密CEK,并加载到集群内存中,最后用CEK明文解密DEK,并加载到集群内存中,返回给集群。

加密密钥轮转原理流程

加密密钥轮转是指更新保存在GaussDB(DWS)服务的密文。在GaussDB(DWS)中,您可以轮转已加密集群的加密密钥CEK。

密钥轮转流程如下:

  1. GaussDB(DWS)集群启动密钥轮转。
  2. GaussDB(DWS)根据集群的主密钥来解密保存在GaussDB(DWS)服务中的CEK密文,获取CEK明文。
  3. 用获取到的CEK明文解密保存在GaussDB(DWS)服务中的DEK密文,获取DEK明文。
  4. GaussDB(DWS)重新生成新的CEK明文。
  5. GaussDB(DWS)用新的CEK明文加密DEK并将DEK密文保存在GaussDB(DWS) 服务中。
  6. 用主密钥加密新的CEK明文并将CEK密文保存在GaussDB(DWS)服务中。

您可以根据业务需求和数据类型计划轮转加密密钥的时间。为了提高数据的安全性,建议用户定期执行轮转密钥以避免密钥被破解的风险。一旦您发现密钥可能已泄露,请及时轮转密钥。

  • GaussDB(DWS)轮转集群的CEK时,集群相关的快照不需要轮转CEK,因为CEK不会在集群快照中进行保存,CEK明文是保存在GaussDB(DWS)集群内存中的,密文是保存在GaussDB(DWS)服务中的。
  • 由于密钥轮转不更新DEK,所以对于数据的加解密不会有影响。

创建KMS委托

如果用户没有提前创建具有KMS Administrator权限的委托,首次启用数据库加密时,系统会弹出一个“创建委托”的对话框,单击“确定”创建委托以授权GaussDB(DWS)访问KMS(默认情况下,只有华为云账号或拥有Security Administrator权限的用户才具备查询委托和创建委托的权限。账号中的IAM用户,默认没有查询委托和创建委托的权限,此时需联系有权限的用户提前创建好授权给DWS具有KMS Administrator权限的委托)。

  1. 鼠标移动至页面右上角账号,单击“统一身份认证”,进入统一身份认证服务页面。
  2. 在左侧导航栏单击“委托”,在委托页面右上角单击“创建委托”

  3. 创建委托时委托类型选择“云服务”,云服务选择“DWS”
  4. 单击“完成”后,在弹窗中单击“立即授权”对委托授予KMS服务的“KMS Administrator”权限。

  5. 单击“下一步”,选择授权资源范围为“所有资源”或需要访问的资源,然后确认无误后提交。

未加密集群转为加密集群

  1. 登录GaussDB(DWS)管理控制台。
  2. 在左侧导航栏中,选择“专属集群 > 集群列表”
  3. 集群列表中,在指定集群所在行操作列选择“更多 > 转加密集群”(集群状态需为“可用”)。

    为了保障数据的安全,由于转加密集群是不可逆的高危操作,会重启集群,可能会导致有业务短暂不可用,用户请谨慎操作。

  4. 在弹出选择框中,选择密钥源、密钥名称和加密算法。

    • 方式一:从密钥中选择密钥名称。用户可通过创建共享操作,共享给其他成员KMS资源。被共享成员接受共享邀请后即可在密钥源中选择共享的KMS资源。
      图1 从密钥中选择
    • 方式二:输入密钥ID。输入在KMS侧给当前租户进行授权的KMS密钥ID,详情请参见查看密钥

      当跳转至KMS侧创建授权时被授权对象必须是账号,不能是用户。并且授权操作必须至少包含“查询密钥信息”、“加密数据”、“解密数据”3项权限。

      图2 输入密钥
    表1 参数说明

    参数

    参数说明

    密钥源

    用户可选择从密钥中选择密钥名称或直接输入密钥。

    加密算法

    加密算法包含:

    • AES256(通用加密算法,不支持SM系列商密算法)
    • SM4(支持SM系列商密算法,兼容国际通用算法)

  5. 确认无误后,单击“确定”。转换后用户可单击集群名称,进入“集群详情”页面查看,详情请参见查看数据库加密信息

为DWS集群轮转加密密钥

  1. 登录GaussDB(DWS)管理控制台。
  2. 在左侧导航树,单击“专属集群 > 集群列表”
  3. 在集群列表中找到所需要的集群,然后单击集群名称,进入“集群详情”页面。
  4. “集群详情”页面的“数据加密信息”区域,单击“轮转密钥”

    每执行一次密钥轮转,就更新一次集群加密密钥(CEK)。执行密钥轮转时,集群仍处于“可用”状态。

  5. 在弹出的对话框中,单击“是”为集群轮转一次加密密钥。

查看数据库加密信息

  1. 登录GaussDB(DWS)管理控制台。
  2. 单击左侧导航栏的“专属集群 > 集群列表”
  3. “专属集群”页面,单击指定集群名称,进入“集群详情”页面。
  4. “集群详情”页面的“数据加密信息”区域查看数据库加密信息,如表2所示。

    如果创建集群时默认没有开启数据库加密功能,则在集群详情页面不显示加密信息模块。
    表2 数据加密信息

    参数

    参数说明

    密钥名称

    当“加密数据库”开启时,显示集群的数据库加密密钥。单击“修改”可修改KMS主密钥名称,支持选择密钥名称和输入密钥ID两种方式。修改参数详情请参见4

    上次密钥轮转时间

    当“加密数据库”开启时,显示上一次加密密钥轮转的时间。

    加密算法

    当“加密数据库”开启时,显示集群的加密算法。

    加密算法包含:

    • AES256(通用加密算法,不支持SM系列商密算法)。
    • SM4(支持SM系列商密算法,兼容国际通用算法)。

相关文档