本文为您介绍如何在Hologres中对数据进行加密处理,本文包括数据加密机制、使用限制及操作步骤。

背景信息

Hologres支持通过密钥管理服务KMS(Key Management Service)对数据进行加密存储,提供数据静态保护能力,满足企业监管和安全合规需求。开启加密存储后,由于涉及加密和解密操作,所以会影响查询和写入性能,大约有20%-40%的性能损耗,具体情况根据查询特征有不同程度的影响。

使用限制

  • 仅Hologres V1.1及以上版本支持数据加密存储,如果您的实例是V1.1以下版本,请您提交工单或加入在线支持钉钉群申请升级实例。
  • 您在KMS上对自带密钥(BYOK)的操作(例如禁用或删除),会影响Hologres对数据的加密或解密操作。由于Hologres服务涉及缓存,您在KMS的相关操作会在24小时内生效。

数据加密机制

Hologres通过KMS托管密钥,实现数据加密或解密功能,数据加密机制如下。
  • Hologres以数据库为单位,通过KMS加密或解密存储在Hologres的数据。在使用数据加密功能前,请确保您所在区域已开通KMS服务。
  • KMS生成和管理您的密钥并保障密钥的安全性。
  • Hologres支持的加密算法有AES256、AESCTR、RC4和SM4。
  • Hologres仅支持自带密钥(BYOK)加密或解密数据。
    • 您可以通过KMS创建自带密钥(BYOK),并在Hologres中针对数据库,选择该密钥作为密钥进行数据加密。在KMS上创建BYOK的详情请参见创建密钥
    • 如果项目使用自带密钥(BYOK),需完成RAM授权,以便Hologres可以正常创建使用了自带密钥(BYOK)的项目空间。

操作步骤

  1. 创建自定义权限策略
    1. 登录RAM控制台,单击左侧导航栏的权限策略,进入权限策略页面,单击创建权限策略
      权限策略
    2. 进入新建自定义权限策略页面,策略名称命名为AliyunHologresEncryptionDefaultRolePolicy配置模式选择脚本配置,配置脚本如下所示。
      新建自定义权限策略
      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "kms:Encrypt",
                      "kms:Decrypt",
                      "kms:GenerateDataKey",
                      "kms:DescribeKey"
                  ],
                  "Resource": "acs:kms:*:*:*/*",
                  "Effect": "Allow"
              }
          ]
      }
    3. 单击确定,完成自定义权限策略的创建。
  2. 创建Hologres代理角色并授权
    1. 登录RAM控制台,单击左侧导航栏的角色
    2. 进入角色页面,单击创建角色,进入创建角色对话框,选择可信实体类型阿里云服务
    3. 单击下一步角色类型选择普通服务角色角色名称命名为AliyunHologresEncryptionDefaultRole,设置选择受信服务交互式分析,单击完成创建角色
    4. 进入创建完成页面,单击为角色授权
    5. 进入添加权限页面,授权范围选择整个云账号选择权限自定义策略中第一步创建的自定义角色策略(AliyunHologresEncryptionDefaultRolePolicy)。添加权限
    6. 单击确定,完成角色创建和授权操作。
  3. 创建密钥
    1. 登录密钥管理服务控制台
    2. 在页面左上角的地域下拉列表,选择密钥所在的地域。
    3. 在左侧导航栏,单击用户主密钥
    4. 单击创建密钥,在弹出的创建密钥对话框,根据控制台提示进行配置。
      创建密钥
      配置项 说明
      KeyStore Key Store是用于存储KMS用户主密钥的安全域。
      密钥类型 取值:
      • 对称密钥的类型:
        • Aliyun_AES_256
        • Aliyun_SM4
      • 非对称密钥的类型:
        • RSA_2048
        • RSA_3072
        • EC_P256
        • EC_P256K
        • EC_SM2
      说明 Aliyun_SM4或EC_SM2的密钥类型,仅在中国内地使用托管密码机的地域支持。
      密钥用途 取值:
      • Encrypt/Decrypt:数据加密和解密。
      • Sign/Verify:产生和验证数字签名。
      别名 用户主密钥的可选标识。

      更多信息,请参见别名概述

      保护级别 取值:
      • Software:通过软件模块对密钥进行保护。
      • Hsm:将密钥托管在密码机中,使密钥获得高安全等级的专用硬件的保护。
      描述 密钥的说明信息。
      轮转周期 自动轮转的时间周期。取值:
      • 30天。
      • 90天。
      • 180天。
      • 365天。
      • 不开启:不开启轮转。
      • 自定义:7~730天。
      说明 仅密钥类型为Aliyun_AES_256和Aliyun_SM4的对称密钥支持设置轮转周期。
  4. 设置加密规则
    1. 登录需要进行存储数据加密的数据库实例,登录数据库请参见登录数据库
    2. 临时Query查询页面,选择已创建的实例名数据库后,请您在SQL查询的编辑框输入如下语句,单击运行

      以下SQL语句用于设置数据存储加密规则。

      ALTER DATABASE <db_name> SET hg_experimental_encryption_options='<encryption_type>,<cmk_id>,<ram_role>,<uid>';
      参数说明
      参数 说明
      db_name 需要进行加密存储的数据库名称。
      encryption_type 加密类型。仅支持AES256、AESCTR、RC4、SM4四种类型。
      cmk_id 密钥ID。登录密钥管理服务控制台,密钥详情页获取。
      ram_role 创建的Hologres代理角色名称。
      uid 阿里云账号ID。获取详情请参见账号ID
    一个设置加密规则并查询数据的简单使用示例如下。
    ALTER DATABASE hoxxxx set hg_experimental_encryption_options='AES256,623c26ee-xxxx-xxxx-xxxx-91d323cc4855,AliyunHologresEncryptionDefaultRole,187xxxxxxxxxxxxx';
    
    DROP TABLE IF EXISTS a;
    
    CREATE TABLE a(id int);
    
    INSERT INTO a values(1);
    
    SELECT hg_admin_command('flush');---仅对测试使用,为了马上查询到效果使用
    
    SELECT * FROM a;
    运行结果如下。示例结果若此时禁用了KMS,在实例重启或者24小时后,查询a表数据会报错。