查询MaxCompute加密数据(BYOK模式)

本文为您介绍Hologres如何使用外部表查询MaxCompute BYOK加密数据。

背景信息

MaxCompute支持通过密钥管理服务KMS(Key Management Service)对数据进行加密存储,提供数据静态保护能力,满足企业监管和安全合规需求。本文为您介绍在Hologres中使用外部表查询MaxCompute的加密数据的限制条件和完整步骤。

使用限制

  • 仅Hologres V1.1及以上版本支持使用外部表查询MaxCompute的加密数据,如果您的实例是V1.1以下版本,请您参见实例升级或加入在线支持钉钉群申请升级实例。

  • 查询MaxCompute的加密数据时,如果您的实例版本低于V1.3.31需要添加后台配置。Hologres从V1.3.31版本开始无需添加后台配置,如需使用该功能,建议您升级实例,详情请参见实例升级

  • 仅支持查询BYOK方式加密的MaxCompute数据,同时支持两类密钥材料,包括创建用户主密钥CMK时由KMS生成的密钥材料以及用户导入的密钥材料。对于使用DataWorks Default Key方式加密的MaxCompute的加密数据无法查询。

  • 查询数据时,Hologres会调用KMS的API获取相关的密钥信息,获取相关的密钥信息系统默认会缓存24小时。

操作步骤

  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. 修改数据库级别配置

    由于HQE暂时不支持访问MaxCompute的存储加密的数据,所以需要使用如下SQL命令将外部表的执行引擎修改为SQE。

    ALTER DATABASE <dbname> SET hg_experimental_enable_access_odps_orc_via_holo = false;

    以上配置需要重新创建连接才能生效。您可以使用如下SQL命令查看使用SQE查询外部表的配置是否生效,如果显示为false,表示配置生效。

    SHOW hg_experimental_enable_access_odps_orc_via_holo;
  4. 查询数据

    完成以上操作后,您便可以同使用Hologres的外部表查询MaxCompute的普通数据一样查询加密数据,详情请参见通过创建外部表加速查询MaxCompute数据

常见问题

  • 问题现象

    查询报错,报错信息类似如下信息。

    ERROR: status { code: SERVER_INTERNAL_ERROR message: "hos_exception: IO error: Failed to execute pangu open normal file pangu://xxx:xxx/product/odps/xxx/data/xxxx/xxx/xxx, errorcode: 9, errorcode_description: invalid argument, err_msg: PanguParameterInvalidException
  • 问题原因

    可能是因为使用HQE查询了MaxCompute的加密数据导致的报错,并且HQE暂时不支持访问MaxCompute的存储加密的数据。

  • 解决方案

    1. 您需要将外表的执行引擎改为SQE,修改数据库级别的配置。

      相关SQL如下:

      ALTER DATABASE <DB_Name> SET hg_experimental_enable_access_odps_orc_via_holo = false;
    2. 以上配置需要新建连接中才能生效。您可以使用如下SQL代码,查看通过SQL查询外表的配置是否生效,如果显示false,表示配置生效。

      SHOW hg_experimental_enable_access_odps_orc_via_holo;
    3. 改完配置且配置生效后,重新执行查询。