MaxCompute のキーセットは、1 つ以上の暗号鍵を管理します。キーローテーションのためにキーセットに鍵を追加したり、元のキーマテリアルを確認したりできます。
注意事項
キーセットおよび復号パラメーターは安全に保管する必要があります。これらが失われた場合、そのキーセットで暗号化されたデータは永久に復旧できなくなります。
データの準備
mf_test_data という名前のテーブルを作成し、サンプルデータを追加します。
-- テーブルを作成します。
create table mf_test_data(id string,name string,tel string);
-- データを挿入します。
insert into mf_test_data values(1,'kyle','13900001234'),(2,'tom','13900001111');
-- データをクエリします。
select * from mf_test_data;
-- 次の結果が返されます:
+----+------+-----+
| id | name | tel |
+----+------+-----+
| 1 | kyle | 13900001234 |
| 2 | tom | 13900001111 |
+----+------+-----+
標準キーセットの使用
-
例 1:新しいキーセットを作成します。
select NEW_KEYSET('AES-GCM-256', 'my first keyset');結果は次のとおりです。
+------+ | _c0 | +------+ | =0A=10260nZQEAMAsSF7mB=12\=0A3=0A=0BAES-GCM-256=12=20=C4t=13+=8E=DD=9D=E8=A0=AA=B4=ED~1`=B7=C6=D0K=D3=FC=D4n=DF=DF=D4=C3)=E8=96=0E=17=18=01=20=02=10=01=1A=10260nZQEAMAsSF7mB=20=02*=0Fmy=20first=20keyset | +------+ -
例 2:キーセットのプレーンテキスト JSON 表現を表示します。
select KEYSET_TO_JSON(NEW_KEYSET('AES-GCM-256', 'my first keyset'));結果は次のとおりです。
+-----+ | _c0 | +-----+ | { "key": [{ "description": "my first keyset", "key_id": "Ra4nZQEAoBuiGbmB", "key_meta_data": { "key_material_origin": "Origin_ALIYUN_MAXCOMPUTE", "key_material_type": "SYMMETRIC", "type": "AES-GCM-256", "value": "/LFKWhw18hz+OBO490YKmjQQDNVWJLOueaUAKKiem/k="}, "output_prefix_type": "PREFIX_ALIYUN_MAXCOMPUTE", "status": "ENABLED"}], "primary_key_id": "Ra4nZQEAoBuiGbmB"} | -
例 3:キーセットに新しい鍵を追加し、プライマリキーとして設定します。
-
AES-GCM-256鍵を含む既存のキーセットにAES-SIV-CMAC-128鍵を追加します。select KEYSET_TO_JSON( ADD_KEY_TO_KEYSET( NEW_KEYSET('AES-GCM-256', 'my first keyset'), 'AES-SIV-CMAC-128', unhex('b75585cf321cdcad42451690cdb7bfc49c26092f60f854e72d43244c55620a3d'), '' ) );結果は次のとおりです。
+-----+ | _c0 | +-----+ | { "key": [{ "description": "my first keyset", "key_id": "+q8nZQEAgAMtJLmB", "key_meta_data": { "key_material_origin": "Origin_ALIYUN_MAXCOMPUTE", "key_material_type": "SYMMETRIC", "type": "AES-GCM-256", "value": "Hj//ZKxLE/t0Uq7XRJQoe2OYNwlauDdGmkaQbMfnZ80="}, "output_prefix_type": "PREFIX_ALIYUN_MAXCOMPUTE", "status": "ENABLED"}, { "description": "", "key_id": "+q8nZQEAML2VArmB", "key_meta_data": { "key_material_origin": "Origin_RAW", "key_material_type": "SYMMETRIC", "type": "AES-SIV-CMAC-128", "value": "t1WFzzIc3K1CRRaQzbe/xJwmCS9g+FTnLUMkTFViCj0="}, "output_prefix_type": "PREFIX_ALIYUN_MAXCOMPUTE", "status": "ENABLED"}], "primary_key_id": "+q8nZQEAML2VArmB"} | +-----+ -
この関数は自動的に新しい鍵を生成し、プライマリキーとして設定します。
select KEYSET_TO_JSON( ROTATE_KEYSET( NEW_KEYSET('AES-GCM-256', 'my first keyset'), 'AES-GCM-256') );結果は次のとおりです。
+-----+ | _c0 | +-----+ | { "key": [{ "description": "my first keyset", "key_id": "TbEnZQEAUIEJC7mB", "key_meta_data": { "key_material_origin": "Origin_ALIYUN_MAXCOMPUTE", "key_material_type": "SYMMETRIC", "type": "AES-GCM-256", "value": "TLAKX8y0/aUbMAtElI+oicEw1fWSTJhZs1D2i3AAf40="}, "output_prefix_type": "PREFIX_ALIYUN_MAXCOMPUTE", "status": "ENABLED"}, { "key_id": "TbEnZQEAAIy0IrmB", "key_meta_data": { "key_material_origin": "Origin_ALIYUN_MAXCOMPUTE", "key_material_type": "SYMMETRIC", "type": "AES-GCM-256", "value": "jPewQsmbsajzM/gLNX9QFtENs2n9uvhgrgcrcGgl0A0="}, "output_prefix_type": "PREFIX_ALIYUN_MAXCOMPUTE", "status": "ENABLED"}], "primary_key_id": "TbEnZQEAAIy0IrmB"} | +-----+
-
-
例 4:データの暗号化および復号を行います。
-
mf_keysetという名前のテーブルを作成し、キーセットを書き込みます。-- テーブルを作成します。 create table mf_keyset (id string,ks binary); -- キーセットを作成し、mf_keyset テーブルに挿入します。 insert into mf_keyset select '1',NEW_KEYSET('AES-GCM-256', 'my first keyset');
-
mf_test_data テーブルの tel 列を暗号化および復号します。
-
mf_test_dataテーブルの tel 列を暗号化します。select id, name, ENHANCED_SYM_ENCRYPT(ks,tel) as tel from (SELECT id,name,tel FROM mf_test_data) JOIN (SELECT ks FROM mf_keyset WHERE id = '1') a ;結果は次のとおりです。
+----+------+------+ | id | name | tel | +----+------+------+ | 1 | kyle | =0B=88=A5=0Ak=AD=E0=9A=B4=EC=CC=1F=F9=DEk\=16=0F=BD=F1=03=8B=95=F0@=88s=EE=1E=8A=D2=05=83=B5'e=01=00=A0=C5=0BXu=A5Z&<=01=F8=C5Q=89=A9=A6=80=E2=0F=1A)=02fa=CF=07'=1B'=EB=FD=CF=E9 | | 2 | tom | =0B=88=A5=0Ak=AD=E0=9A=B4=EC=CC=1F=F9=DEk\=16=0F=BD=F1=03=8B=95=F0@=88s=EE=1E=8A=D2=05=83=B5'e=01=00=10=FC=0BXu=A5+3=D5=1Fb=C0=88=AC=90=AA=FE!C=F0=99y&=9C=89=0E=9B=8FD=16=E0=96, | +----+------+------+ -
mf_test_dataテーブルの tel 列を復号します。select id, name, ENHANCED_SYM_DECRYPT(ks, ENHANCED_SYM_ENCRYPT(ks,tel), '')as tel from (SELECT id,name,tel FROM mf_test_data) JOIN (SELECT ks FROM mf_keyset WHERE id = '1') a ;結果は次のとおりです。
+----+------+------+ | id | name | tel | +----+------+------+ | 1 | kyle | 13900001234 | | 2 | tom | 13900001111 | +----+------+------+
KMS を使用したキーセットの利用
MaxCompute は Key Management Service (KMS) と統合して、データ暗号化を強化します。まず標準キーセットを生成してデータの暗号化および復号を行い、次に KMS 鍵で暗号化してラップされたキーセットを作成し、保存する必要があります。データを暗号化または復号する際には、ラップされたキーセットを指定すると、MaxCompute が KMS 鍵を使用して一時的に元のキーセットを解凍し、操作を実行します。
次の図はこのワークフローを示しています。

KMS の有効化と権限の設定
-
KMS を有効化し、ソフトウェアキー管理インスタンスを購入します。詳細については、「KMS インスタンスの購入と有効化」をご参照ください。
-
鍵を作成し、[鍵の詳細] ページからその ARN を取得します。詳細については、「Key Management の概要」をご参照ください。
この例では、作成された鍵の ARN は
acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****です。 -
MaxCompute に暗号化および復号に必要な KMS 権限を付与します。
説明MaxCompute キーセットを KMS でラップした後は、MaxCompute に必要な KMS 権限を付与する必要があります。これを怠ると、以降の暗号化および復号コマンドが失敗します。
次の手順に従ってください。
-
RAM ロールを作成します。信頼できるエンティティタイプ は Alibaba Cloud サービス、信頼できるサービス は MaxCompute に設定します。詳細については、「信頼される Alibaba Cloud サービス向け RAM ロールの作成」をご参照ください。
-
作成したロールに AliyunKMSCryptoUserAccess システムポリシーをアタッチして、MaxCompute に暗号化および復号に必要な権限を付与します。詳細については、「RAM ロールへの権限付与」をご参照ください。
-
USER_A という名前の Alibaba Cloud アカウントがこれらの手順を実行すると、キーセットを暗号化できます。
-
この例では、RAM ロールの名前は
mf-secrで、その ARN はacs:ram::189273228874****:role/mf-secrです。
-
-
-
(オプション)同じアカウント(USER_A)または別のアカウント(USER_B)の RAM ユーザーが暗号化および復号を実行できるようにするには、次の権限を付与する必要があります。
USER_A の RAM ユーザーを使用する場合
RAM ユーザーが
mf-secrロールを使用できるようにするには、mf-secrロールに対するram:PassRole権限を付与するポリシーを作成し、RAM ユーザーにアタッチします。詳細については、「RAM ユーザーへの権限付与」をご参照ください。次のサンプルコードは、ポリシーの例を示しています。{ "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram:*:*:role/mf-secr" } ], "Version": "1" }USER_B およびその RAM ユーザーを使用する場合
重要クロスアカウントでの暗号化および復号を行うには、関連する関数で
role_chainパラメーターを指定する必要があります。次の例のロールに基づくと、パラメーターは'acs:ram::188538605451****:role/b-secr,acs:ram::189273228874****:role/mf-secr2b'になります。次の手順に従ってください。
-
Alibaba Cloud アカウント USER_A で、新しい RAM ロール(例:
mf-secr2b)を作成します。信頼できるエンティティタイプ は Alibaba Cloud アカウント に設定し、信頼されるアカウントとして USER_B を指定します。詳細については、「信頼される Alibaba Cloud アカウント向け RAM ロールの作成」をご参照ください。 -
mf-secr2bロールに、mf-secrロールに対するram:PassRole権限を付与します。ポリシーの例については、「USER_A の RAM ユーザーを使用して暗号化および復号を実行する」をご参照ください。 -
Alibaba Cloud アカウント USER_B で、新しい RAM ロール(例:
b-secr)を作成します。信頼できるエンティティタイプ は Alibaba Cloud サービス、信頼できるサービス は MaxCompute に設定します。詳細については、「信頼される Alibaba Cloud サービス向け RAM ロールの作成」をご参照ください。 -
b-secrロールに、mf-secr2bロールに対するsts:AssumeRole権限を付与します。次のサンプルコードは、ポリシーの例を示しています。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "acs:ram:*:189273228874****:role/mf-secr2b" } ] } -
(オプション)USER_B の RAM ユーザーが暗号化および復号を実行する必要がある場合は、そのユーザーにも
b-secrロールに対するram:PassRole権限を付与する必要があります。次のサンプルコードは、ポリシーの例を示しています。{ "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram:*:*:role/b-secr" } ], "Version": "1"
-
KMS を使用したデータの暗号化および復号
-
例 1:新しいラップされたキーセットを作成します。
select hex(NEW_WRAPPED_KEYSET('acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****', 'acs:ram::189273228874****:role/mf-secr', 'AES-GCM-256', 'hello'));結果は次のとおりです。
+-----+ | _c0 | +-----+ | 613256354C574A71616A59314D6A64694E6D4D324E44593161484E6D65576732595331315A586435646D4678596A6C36555437693738632B647070524B46334E5263497567384A6B36716C4E54354133734F6E4776376258453132524E6C4B6E5163703859787132536C6D794F6E4A6975797541745448374F6B5132412B4B6947502F4A7530756477694B736B503033576643726E45646D666F6F324D61774F7A452F4F55314A51643268397941384F6B425644665A59746D3968775576536E543744684276723773464A714A47394D7770765064484B6A457A6F4A3533716E57766F4339634639413348556E433641434A6438444170583275326B2B4177776941487668575279304941445031373461794A2F50773D3D | +-----+ -
例 2:ラップされたキーセットを再暗号化します。
select REWRAP_KEYSET('acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****', 'acs:ram::189273228874****:role/mf-secr', unhex('613256354C574A71616A59314D6A64694E6D4D324E44593161484E6D65576732595331315A586435646D4678596A6C36555437693738632B647070524B46334E5263497567384A6B36716C4E54354133734F6E4776376258453132524E6C4B6E5163703859787132536C6D794F6E4A6975797541745448374F6B5132412B4B6947502F4A7530756477694B736B503033576643726E45646D666F6F324D61774F7A452F4F55314A51643268397941384F6B425644665A59746D3968775576536E543744684276723773464A714A47394D7770765064484B6A457A6F4A3533716E57766F4339634639413348556E433641434A6438444170583275326B2B4177776941487668575279304941445031373461794A2F50773D3D'));結果は次のとおりです。
+------+ | _c0 | +------+ | a2V5LWJqajY1MjdiNmM2NDY1aHNmeWg2YS11ZXd5dmFxYjl60Kftgx5o1sQH4kkwRboFSYUmcVKjF1GKF+JU5gKSp3xOF1xjKdb6fGZyNuD4YSAzqNTD7x7j5fzTLW2+9a+8BmS1z3ZP1RjNL6Lp93FAC4NWg/jtggh6WOTXrVoG67/CfzdWro65YDTPZpe52K416gpfW18GXSOzu9q4swMti0UrScl/fTg6eOIMYgoPCfBh9qvXhNSR72J+qXU1vHcyYNQL6UewsBE2suVRFQ=3D=3D | -
例 3:キーのローテーションを実行します。
select ROTATE_WRAPPED_KEYSET('acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****', 'acs:ram::189273228874****:role/mf-secr', unhex('613256354C574A71616A59314D6A64694E6D4D324E44593161484E6D65576732595331315A586435646D4678596A6C36555437693738632B647070524B46334E5263497567384A6B36716C4E54354133734F6E4776376258453132524E6C4B6E5163703859787132536C6D794F6E4A6975797541745448374F6B5132412B4B6947502F4A7530756477694B736B503033576643726E45646D666F6F324D61774F7A452F4F55314A51643268397941384F6B425644665A59746D3968775576536E543744684276723773464A714A47394D7770765064484B6A457A6F4A3533716E57766F4339634639413348556E433641434A6438444170583275326B2B4177776941487668575279304941445031373461794A2F50773D3D'), 'AES-GCM-256', 'descrption');結果は次のとおりです。
+------+ | _c0 | +------+ | a2V5LWJqajY1MjdiNmM2NDY1aHNmeWg2YS11ZXd5dmFxYjl67ZxGgfbQhsOududp3FuxLFW1qWt7fF2fT2mAqFekH3D/SoooVf1Jgj0dS/3kxHLQImthef+fCca5vRbVYbOeSsjhGI841WhJvYE1KzRuTpV04SpzVimCovlPPiYCm1649Vhkua1/zUu2W0ioCPnXzHIANhoOIXM2mAV+EfuRCjLUtcJhMdCnu+whHwkGXMYugtXmLxZIBHaJNvO9I3tntplTzxElVmj/LpDrAkg0mKahLJa7FhcJ8cn/JHjp9sk0MhHQc/5X14vHBJuulkYkukcF/kZ+AFVfWes5pZOMs8Og3pYEjCESMiiMONy/CpIrYepapgsKqRAmCGxRv/7aDOZyaAV5Jdz31NotMCBi/hrYBwyU0QdAq5pvsOEdXVIJyazViQ=3D=3D | +------+ -
例 4:データの暗号化および復号を行います。
-
mf_keyset_kmsという名前のテーブルを作成し、ラップされたキーセットを書き込みます。-- テーブルを作成します。 create table mf_keyset_kms (id string,ks binary); -- ラップされたキーセットを生成し、テーブルに書き込みます。 insert into mf_keyset_kms select '1', NEW_WRAPPED_KEYSET( 'acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****', 'acs:ram::189273228874****:role/mf-secr', 'AES-GCM-256', 'description');キーセットが書き込まれたことを確認します。
-- テーブルを照会します。 select id,hex(ks) from mf_keyset_kms; -- 次の結果が返されます: +----+------+ | id | ks | +----+------+ | 1 | 613256354C574A71616A59314D6A64694E6D4D324E44593161484E6D65576732595331315A586435646D4678596A6C36555437693738632B647070524B46334E5263497567384A6B36716C4E54354133734F6E4776376258453132524E6C4B6E5163703859787132536C6D794F6E4A6975797541745448374F6B5132412B4B6947502F4A7530756477694B736B503033576643726E45646D666F6F324D61774F7A452F4F55314A51643268397941384F6B425644665A59746D3968775576536E543744684276723773464A714A47394D7770765064484B6A457A6F4A3533716E57766F4339634639413348556E433641434A6438444170583275326B2B4177776941487668575279304941445031373461794A2F50773D3D | -
mf_test_dataテーブルの tel 列を暗号化および復号します。-
mf_test_dataテーブルの tel 列を暗号化します。-- tel 列を暗号化します。キーセットは定数として指定する必要があります。 select id, name, ENHANCED_SYM_ENCRYPT( USE_WRAPPED_KEYSET('acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****', 'acs:ram::189273228874****:role/mf-secr', unhex('613256354C574A71616A59314D6A64694E6D4D324E44593161484E6D65576732595331315A586435646D4678596A6C36555437693738632B647070524B46334E5263497567384A6B36716C4E54354133734F6E4776376258453132524E6C4B6E5163703859787132536C6D794F6E4A6975797541745448374F6B5132412B4B6947502F4A7530756477694B736B503033576643726E45646D666F6F324D61774F7A452F4F55314A51643268397941384F6B425644665A59746D3968775576536E543744684276723773464A714A47394D7770765064484B6A457A6F4A3533716E57766F4339634639413348556E433641434A6438444170583275326B2B4177776941487668575279304941445031373461794A2F50773D3D') ), tel ) as tel FROM mf_test_data;結果は次のとおりです。
+----+------+------+ | id | name | tel | +----+------+------+ | 1 | kyle | =1A=B88=F7=C5A=DF=DC=91=A6R=F8{=EB=A5_x=AD=AF=FF=9A=14=D81<=8BO=EB=F5=D3Jn=E8=0ESe=01=00=A0=AC=0D=C8=0De=B9=E4=84=AB=F0f=AE~Dt=C5W=FAx=A5=11=01t=95=DF=FA/-=BC7=C5G | | 2 | tom | =1A=B88=F7=C5A=DF=DC=91=A6R=F8{=EB=A5_x=AD=AF=FF=9A=14=D81<=8BO=EB=F5=D3Jn=E8=0ESe=01=00=B0=BF=0D=C8=0DejL{;.w0=80,=E6=86V@b=F3=AB=DEY=A6=02=07=001=E0[=E7V | +----+------+------+ -
mf_test_dataテーブルの tel 列を復号します。select id, name, ENHANCED_SYM_DECRYPT( USE_WRAPPED_KEYSET('acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****', 'acs:ram::189273228874****:role/mf-secr', unhex('613256354C574A71616A59314D6A64694E6D4D324E44593161484E6D65576732595331315A586435646D4678596A6C36555437693738632B647070524B46334E5263497567384A6B36716C4E54354133734F6E4776376258453132524E6C4B6E5163703859787132536C6D794F6E4A6975797541745448374F6B5132412B4B6947502F4A7530756477694B736B503033576643726E45646D666F6F324D61774F7A452F4F55314A51643268397941384F6B425644665A59746D3968775576536E543744684276723773464A714A47394D7770765064484B6A457A6F4A3533716E57766F4339634639413348556E433641434A6438444170583275326B2B4177776941487668575279304941445031373461794A2F50773D3D') ), ENHANCED_SYM_ENCRYPT( USE_WRAPPED_KEYSET('acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****', 'acs:ram::189273228874****:role/mf-secr', unhex('613256354C574A71616A59314D6A64694E6D4D324E44593161484E6D65576732595331315A586435646D4678596A6C36555437693738632B647070524B46334E5263497567384A6B36716C4E54354133734F6E4776376258453132524E6C4B6E5163703859787132536C6D794F6E4A6975797541745448374F6B5132412B4B6947502F4A7530756477694B736B503033576643726E45646D666F6F324D61774F7A452F4F55314A51643268397941384F6B425644665A59746D3968775576536E543744684276723773464A714A47394D7770765064484B6A457A6F4A3533716E57766F4339634639413348556E433641434A6438444170583275326B2B4177776941487668575279304941445031373461794A2F50773D3D') ), tel ), '' ) as tel FROM mf_test_data;結果は次のとおりです。
+----+------+------+ | id | name | tel | +----+------+------+ | 1 | kyle | 13900001234 | | 2 | tom | 13900001111 | +----+------+------+
-
-