本文为您介绍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小时。
操作步骤
创建自定义权限策略
登录RAM控制台,单击左侧导航栏的权限策略,进入权限策略页面,单击创建权限策略。
进入创建权限策略页面,单击脚本编辑配置脚本如下所示且名称命名为AliyunHologresEncryptionDefaultRolePolicy。
{ "Version": "1", "Statement": [ { "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey" ], "Resource": "acs:kms:*:*:*/*", "Effect": "Allow" } ] }
单击确定,完成自定义权限策略的创建。
创建Hologres代理角色并授权
登录RAM控制台,单击左侧导航栏的角色。
进入角色页面,单击创建角色,进入创建角色对话框,选择可信实体类型为阿里云服务。
单击下一步,角色类型选择普通服务角色,角色名称命名为AliyunHologresEncryptionDefaultRole,设置选择受信服务为交互式分析,单击完成。
进入创建完成页面,单击为角色授权。
进入添加权限页面,授权范围选择整个云账号,选择权限为自定义策略中第一步创建的自定义角色策略(AliyunHologresEncryptionDefaultRolePolicy)。
单击确定,完成角色创建和授权操作。
在创建完角色后,单击创建的角色,在信任策略管理页签,可以查看信任策略的设置。
修改数据库级别配置
由于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;
查询数据
完成以上操作后,您便可以同使用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的存储加密的数据。
解决方案
您需要将外表的执行引擎改为SQE,修改数据库级别的配置。
相关SQL如下:
ALTER DATABASE <DB_Name> SET hg_experimental_enable_access_odps_orc_via_holo = false;
以上配置需要新建连接中才能生效。您可以使用如下SQL代码,查看通过SQL查询外表的配置是否生效,如果显示false,表示配置生效。
SHOW hg_experimental_enable_access_odps_orc_via_holo;
改完配置且配置生效后,重新执行查询。