MaxCompute支援結合Key Management Service(KMS)做密鑰管理,本文為您介紹封裝密鑰集合函式ROTATE_WRAPPED_KEYSET
:解密已有的加密金鑰集(KEYSET),並進行密鑰輪轉,然後通過新祕密金鑰加密。
背景與前提
MaxCompute支援結合Key Management Service做密鑰管理,通過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,您可以在Key Management Service控制台的密鑰詳情頁面擷取ARN,操作詳情請參見開通KMS並完成配置。role_arn:必填,同時擁有新舊KMS密鑰許可權的RAM角色的ARN資訊,格式為
'acs:ram:${<userAID>}:role/${<roleName>}'
,包含使用者ID、角色名稱,擷取請參見開通KMS並完成配置。wrapped_keyset:必填,需要重新加密的封裝密鑰集。
key_type:必填,新產生的KEYSET密鑰演算法類型。目前支援:AES-GCM-256、AES-SIV-CMAC-128和AES-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));