全部产品
Search
文档中心

云原生大数据计算服务 MaxCompute:ROTATE_WRAPPED_KEYSET

更新时间:Oct 20, 2023

MaxCompute支持结合密钥管理服务(KMS)做密钥管理,本文为您介绍封装密钥集函数ROTATE_WRAPPED_KEYSET:解密已有的加密密钥集(KEYSET),并进行密钥轮转,然后通过新密钥加密。

背景与前提

MaxCompute支持结合密钥管理服务做密钥管理,通过KMS密钥对生成的密钥集(KEYSET)再次进行加密,生成封装密钥集。ROTATE_WRAPPED_KEYSET函数可以对NEW_WRAPPED_KEYSET函数生成的封装密钥集使用新的KMS密钥和密钥算法重新进行封装加密。即ROTATE_WRAPPED_KEYSET函数相比REWRAP_KEYSET函数还可以对密钥算法进行更新。

使用ROTATE_WRAPPED_KEYSET函数前需要完成以下操作:

  • 已有通过NEW_WRAPPED_KEYSET函数生成的封装密钥集,详情请参见NEW_WRAPPED_KEYSET

  • 创建新KMS密钥并获取密钥ARN信息(kms_cmk_arn),并给RAM角色授权使用新密钥的权限,操作详情请参见开通KMS并完成配置

命令格式

binary ROTATE_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <wrapped_keyset>,string <key_type> [,string description,[string <role_chain>]])

参数说明

  • kms_cmk_arn: 必填,新加密KEYSET的KMS用户主密钥资源名称,格式为'acs:kms:<RegionId>:<UserId>:key/<CmkId>',包含地域信息、用户ID、用户主密钥ID,您可以在密钥管理服务控制台的密钥详情页面获取ARN,操作详情请参见开通KMS并完成配置

  • role_arn:必填,同时拥有新旧KMS密钥权限的RAM角色的ARN信息,格式为'acs:ram:${<userAID>}:role/${<roleName>}',包含用户ID、角色名称,获取请参见开通KMS并完成配置

  • wrapped_keyset:必填,需要重新加密的封装密钥集。

  • key_type:必填,新生成的KEYSET密钥算法类型。目前支持:AES-GCM-256AES-SIV-CMAC-128AES-SIV-CMAC-256

  • description: 可选项,密钥的描述信息。

  • role_chain:可选,用户授权角色链,格式为'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'。通过角色链的方式,支持跨阿里云账号的封装密钥集调用。

返回值说明

返回BINARY类型的加密KEYSET,若有需要您可以通过HEX函数将BINARY类型转换为STRING类型,详情请参见HEX

使用示例

说明

运行以下包含变量的示例代码请使用脚本模式运行或在SQL语句中将变量替换为实际值。

  • 重新加密封装密钥集:

    @kms_resource_keyId := 'acs:kms:${<RegionId>}:${<UserId>}:key/${<CmkId>}';
    @role_arn := 'acs:ram:${<UserId>}:role/${<roleName>}';
    @origin_key := unhex('<wrapped_keyset>');
    select hex(ROTATE_WRAPPED_KEYSET(@kms_resource_keyId, @role_arn, @origin_key, 'AES-GCM-256', 'hello world'));
  • 重新加密封装密钥集,并允许其他角色调用:

    @kms_resource_keyId := 'acs:kms:${<RegionId>}:${<UserId>}:key/${<CmkId>}';
    @role_arn := 'acs:ram:${<UserId>}:role/${<roleName>}';
    @origin_key := unhex('<wrapped_keyset>');
    @role_chain := 'acs:ram:${<UserAId>}:role/${<roleName2>},acs:ram:${<UserBId>}:role/${<roleName3>}';
    select hex(ROTATE_WRAPPED_KEYSET(@kms_resource_keyId, @role_arn, @origin_key, 'AES-GCM-256', 'hello world', @role_chain));