すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:キーセットの使用

最終更新日:Jul 18, 2026

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:データの暗号化および復号を行います。

    1. 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');
        
    2. 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 鍵を使用して一時的に元のキーセットを解凍し、操作を実行します。

次の図はこのワークフローを示しています。

keyset.jpg

KMS の有効化と権限の設定

  1. KMS を有効化し、ソフトウェアキー管理インスタンスを購入します。詳細については、「KMS インスタンスの購入と有効化」をご参照ください。

  2. 鍵を作成し、[鍵の詳細] ページからその ARN を取得します。詳細については、「Key Management の概要」をご参照ください。

    この例では、作成された鍵の ARNacs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf**** です。

  3. MaxCompute に暗号化および復号に必要な KMS 権限を付与します。

    説明

    MaxCompute キーセットを KMS でラップした後は、MaxCompute に必要な KMS 権限を付与する必要があります。これを怠ると、以降の暗号化および復号コマンドが失敗します。

    次の手順に従ってください。

    1. RAM ロールを作成します。信頼できるエンティティタイプAlibaba Cloud サービス信頼できるサービスMaxCompute に設定します。詳細については、「信頼される Alibaba Cloud サービス向け RAM ロールの作成」をご参照ください。

    2. 作成したロールに AliyunKMSCryptoUserAccess システムポリシーをアタッチして、MaxCompute に暗号化および復号に必要な権限を付与します。詳細については、「RAM ロールへの権限付与」をご参照ください。

      • USER_A という名前の Alibaba Cloud アカウントがこれらの手順を実行すると、キーセットを暗号化できます。

      • この例では、RAM ロールの名前は mf-secr で、その ARNacs:ram::189273228874****:role/mf-secr です。

  4. (オプション)同じアカウント(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' になります。

    次の手順に従ってください。

    1. Alibaba Cloud アカウント USER_A で、新しい RAM ロール(例:mf-secr2b)を作成します。信頼できるエンティティタイプAlibaba Cloud アカウント に設定し、信頼されるアカウントとして USER_B を指定します。詳細については、「信頼される Alibaba Cloud アカウント向け RAM ロールの作成」をご参照ください。

    2. mf-secr2b ロールに、mf-secr ロールに対する ram:PassRole 権限を付与します。ポリシーの例については、「USER_A の RAM ユーザーを使用して暗号化および復号を実行する」をご参照ください。

    3. Alibaba Cloud アカウント USER_B で、新しい RAM ロール(例:b-secr)を作成します。信頼できるエンティティタイプAlibaba Cloud サービス信頼できるサービスMaxCompute に設定します。詳細については、「信頼される Alibaba Cloud サービス向け RAM ロールの作成」をご参照ください。

    4. b-secr ロールに、mf-secr2b ロールに対する sts:AssumeRole 権限を付与します。次のサンプルコードは、ポリシーの例を示しています。

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": "acs:ram:*:189273228874****:role/mf-secr2b"
              }
          ]
      }
    5. (オプション)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:データの暗号化および復号を行います。

    1. 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 |
    2. 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 |
        +----+------+------+