MaxCompute with Key Management Service (KMS) を使用してキーを管理できます。 このトピックでは、ROTATE_WRAPPED_KEYSET関数を使用してラップされたキーセットを復号し、キーローテーションを実装し、新しいキーを使用してデータを暗号化する方法について説明します。
背景情報と前提条件
MaxComputeとKMSを使用してキーを管理できます。 KMSキーに基づいてキーセットを暗号化することで、ラップされたキーセットを生成できます。 ROTATE_WRAPPED_KEYSET関数は、新しいKMSキーと新しいキーアルゴリズムを使用して、NEW_WRAPPED_keyset関数を使用して生成されたラップされたキーセットを再暗号化します。 REWRAP_KEYSET関数と比較して、ROTATE_WRAPPED_KEYSET関数は、再暗号化のために新しい鍵アルゴリズムを使用することができる。
ROTATE_WRAPPED_KEYSET関数を使用する前に、次の前提条件が満たされていることを確認してください。
ラップされたキーセットは、
NEW_WRAPPED_keyset関数を使用して生成されます。 詳細については、「NEW_WRAPPED_KEYSET」をご参照ください。KMSキーが作成され、kms_cmk_arnで指定されたキーARNが取得されます。 RAMロールには、新しいキーを使用する権限が付与されます。
構文
binary ROTATE_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <wrapped_keyset>,string <key_type> [,string description,[string <role_chain>]])Parameters
kms_cmk_arn: 必須です。 このパラメーターには、ラップされたキーセットを再暗号化するために使用するKMSカスタマーマスターキー (CMK) のARNを指定します。 パラメーター値の形式は
'acs:kms:<RegionId >:< UserId>:key/<CmkId>'です。 RegionIdはリージョンIDを指定し、UserIdはユーザーIDを指定し、CmkIdはCMK IDを指定します。 ARNは、KMSコンソールの [キーの詳細] ページから取得できます。role_arn: 必須です。 このパラメーターには、古いKMSキーと新しいKMSキーの両方に対する権限を持つRAMロールのARNを指定します。 パラメーター値の形式は
'acs:ram :${< userAID >}: role/${< roleName>}'です。 userAIDはユーザーIDを指定し、roleNameはロール名を指定します。wrapp_keyset: 必須です。 このパラメーターは、再暗号化するラップされたキーセットを指定します。
key_type: 必須です。 このパラメータは、新しく生成されたキーセット内のキーのアルゴリズムタイプを指定します。 有効な値: AES-GCM-256、AES-SIV-CMAC-128、およびAES-SIV-CMAC-256。
description: オプション。 このパラメーターは、キーの説明を提供します。
role_chain: オプションです。 このパラメーターには、ユーザー権限付与の役割チェーンを指定します。 パラメータ値は、
'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3 >},...'の形式である。 ロールチェーンを使用して、Alibaba Cloudアカウント全体でラップされたキーセットを呼び出すことができます。
戻り値
BINARY型のラップされたキーセットが返されます。 HEX関数を使用して、ビジネス要件に基づいて、BINARY型のラップされたキーセットをSTRING型のキーセットに変換できます。 HEX関数の詳細については、「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));