MaxCompute menggunakan set kunci untuk mengelola kunci. Setiap set kunci menyimpan satu atau lebih kunci. Anda dapat menambahkan kunci ke set kunci untuk menerapkan rotasi kunci dan melihat kunci asli. Topik ini menjelaskan cara menggunakan set kunci.
Catatan penggunaan
Jaga kerahasiaan set kunci dan parameter dekripsi Anda. Jika set kunci dan parameter dekripsi hilang, data yang dienkripsi dengan menggunakan set kunci tidak dapat didekripsi, sehingga data asli tidak dapat dipulihkan.
Siapkan data
Buat tabel bernama mf_test_data dan masukkan data ke dalam tabel.
-- Buat tabel.
create table mf_test_data(id string,name string,tel string);
-- Masukkan data ke dalam tabel.
insert into mf_test_data values(1,'kyle','13900001234'),(2,'tom','13900001111');
-- Kueri data dari tabel.
select * from mf_test_data;
-- Hasil berikut dikembalikan:
+----+------+-----+
| id | name | tel |
+----+------+-----+
| 1 | kyle | 13900001234 |
| 2 | tom | 13900001111 |
+----+------+-----+Gunakan langsung set kunci
Contoh 1: Buat set kunci.
select NEW_KEYSET('AES-GCM-256', 'set kunci pertama saya');Hasil berikut dikembalikan:
+------+ | _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 | +------+Contoh 2: Ubah set kunci menjadi teks biasa untuk kueri.
select KEYSET_TO_JSON(NEW_KEYSET('AES-GCM-256', 'set kunci pertama saya'));Hasil berikut dikembalikan:
+-----+ | _c0 | +-----+ | { "key": [{ "description": "set kunci pertama saya", "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"} |Contoh 3: Tambahkan kunci ke set kunci dan konfigurasikan kunci baru sebagai kunci utama.
Tambahkan kunci dengan tipe algoritma
AES-SIV-CMAC-128ke set kunci dengan tipe algoritmaAES-GCM-256.select KEYSET_TO_JSON( ADD_KEY_TO_KEYSET( NEW_KEYSET('AES-GCM-256', 'set kunci pertama saya'), 'AES-SIV-CMAC-128', unhex('b75585cf321cdcad42451690cdb7bfc49c26092f60f854e72d43244c55620a3d'), '' ) );Hasil berikut dikembalikan:
+-----+ | _c0 | +-----+ | { "key": [{ "description": "set kunci pertama saya", "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"} | +-----+Izinkan sistem secara otomatis menghasilkan kunci baru dan konfigurasikan kunci baru sebagai kunci utama.
select KEYSET_TO_JSON( ROTATE_KEYSET( NEW_KEYSET('AES-GCM-256', 'set kunci pertama saya'), 'AES-GCM-256') );Hasil berikut dikembalikan:
+-----+ | _c0 | +-----+ | { "key": [{ "description": "set kunci pertama saya", "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"} | +-----+
Contoh 4: Enkripsi dan dekripsi data.
Buat tabel bernama mf_keyset dan tulis set kunci ke tabel.
--- Buat tabel. create table mf_keyset (id string,ks binary); --- Buat set kunci dan simpan set kunci di tabel mf_keyset. insert into mf_keyset select '1',NEW_KEYSET('AES-GCM-256', 'set kunci pertama saya');
Enkripsi dan dekripsi data di kolom tel dari tabel mf_test_data.
Enkripsi data di kolom tel dari tabel
mf_test_data.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 ;Hasil berikut dikembalikan:
+----+------+------+ | 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, | +----+------+------+Dekripsi data di kolom tel dari tabel
mf_test_data.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 ;Hasil berikut dikembalikan:
+----+------+------+ | id | name | tel | +----+------+------+ | 1 | kyle | 13900001234 | | 2 | tom | 13900001111 | +----+------+------+
Gunakan set kunci bersama dengan KMS
MaxCompute memungkinkan Anda menggunakan set kunci bersama dengan Key Management Service (KMS). Sistem secara otomatis menghasilkan set kunci dasar untuk enkripsi dan dekripsi data. Anda dapat menggunakan set kunci dasar yang dihasilkan bersama dengan kunci KMS untuk menghasilkan set kunci terbungkus. Anda harus menyimpan set kunci terbungkus untuk digunakan selanjutnya. Saat Anda perlu mengenkripsi atau mendekripsi data, Anda dapat menggunakan kunci KMS untuk mengonversi set kunci terbungkus menjadi set kunci dasar, lalu menggunakan set kunci dasar untuk mengenkripsi atau mendekripsi data.
Gambar berikut menunjukkan cara menggunakan set kunci bersama dengan KMS untuk mengenkripsi atau mendekripsi data.

Aktifkan KMS dan berikan izin pada KMS
Aktifkan KMS dan beli instance tipe manajemen kunci perangkat lunak. Untuk informasi lebih lanjut, lihat Beli dan Aktifkan Instance KMS.
Buat kunci dan dapatkan Alibaba Cloud Resource Name (ARN) kunci di halaman Detail Kunci. Untuk informasi lebih lanjut, lihat bagian "Kunci yang dilindungi perangkat lunak" di Memulai dengan Key Management.
Dalam contoh ini, ARN kunci adalah
acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****.Berikan izin pada KMS ke MaxCompute. Ini memungkinkan MaxCompute menggunakan KMS untuk mengenkripsi dan mendekripsi data.
CatatanSetelah Anda menggunakan kunci KMS untuk mengenkripsi set kunci di MaxCompute, Anda harus memberikan izin pada enkripsi dan dekripsi data berbasis KMS ke MaxCompute. Ini memastikan bahwa perintah selanjutnya untuk enkripsi dan dekripsi data dapat berhasil dijalankan di MaxCompute.
Prinsip operasi utama:
Buat Peran RAM. Pilih Alibaba Cloud Service untuk Select Trusted Entity, dan pilih MaxCompute dari daftar drop-down Select Trusted Service. Untuk informasi lebih lanjut, lihat Buat Peran RAM untuk Layanan Tepercaya Alibaba Cloud.
Lampirkan kebijakan AliyunKMSCryptoUserAccess ke Peran RAM baru. Ini memungkinkan MaxCompute untuk mengenkripsi atau mendekripsi data menggunakan KMS. Untuk informasi lebih lanjut, lihat Berikan Izin ke Peran RAM.
Dalam contoh ini, Anda menyelesaikan operasi sebelumnya menggunakan akun Alibaba Cloud USER_A. Setelah kebijakan dilampirkan, Anda dapat menggunakan akun Alibaba Cloud USER_A untuk mengenkripsi set kunci sesuai harapan.
Dalam contoh ini, peran bernama
mf-secrdibuat, dan ARN dari peranmf-secradalahacs:ram::189273228874****:role/mf-secr.
Opsional. Jika Anda ingin menggunakan RAM pengguna USER_A atau akun lain seperti USER_B atau RAM pengguna USER_B untuk mengenkripsi dan mendekripsi data, Anda harus melakukan operasi otorisasi berikut:
Otorisasi RAM pengguna USER_A untuk mengenkripsi dan mendekripsi data
Buat kebijakan yang mencakup Izin PassRole, lampirkan kebijakan ke Peran RAM
mf-secr, dan kemudian tetapkan Peran RAM kepada pengguna RAM. Dengan cara ini, pengguna RAM dapat mengasumsikan Peran RAMmf-secr. Untuk informasi lebih lanjut, lihat Berikan Izin ke Pengguna RAM. Dokumen kebijakan berisi konten berikut:{ "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram:*:*:role/mf-secr" } ], "Version": "1" }Otorisasi USER_B atau RAM pengguna USER_B untuk mengenkripsi dan mendekripsi data
PentingSet kunci terbungkus digunakan untuk mengenkripsi dan mendekripsi data dalam skenario lintas akun. Dalam skenario ini, parameter
role_chaindalam fungsi terkait diperlukan. Contoh:'acs:ram::188538605451****:role/b-secr,acs:ram::189273228874****:role/mf-secr2b'.Prinsip operasi:
Buat Peran RAM bernama
mf-secr2buntuk akun Alibaba Cloud USER_A. Pilih Alibaba Cloud Account untuk Select Trusted Entity, pilih Other Alibaba Cloud Account untuk Select Trusted Alibaba Cloud Account, dan masukkan USER_B di bidang yang muncul. Untuk informasi lebih lanjut, lihat Buat Peran RAM untuk Akun Tepercaya Alibaba Cloud.Berikan Izin PassRole dari peran
mf-secrke peranmf-secr2b. Untuk dokumen kebijakan sampel, lihat Otorisasi RAM Pengguna USER_A untuk Mengenkripsi dan Mendekripsi Data dalam topik ini.Buat Peran RAM bernama
b-secruntuk akun Alibaba Cloud USER_B. Pilih Alibaba Cloud Service untuk Select Trusted Entity, dan pilih MaxCompute dari daftar drop-down Select Trusted Service. Untuk informasi lebih lanjut, lihat Buat Peran RAM untuk Layanan Tepercaya Alibaba Cloud.Berikan Izin AssumeRole dari peran
mf-secr2bke peranb-secr. Dokumen kebijakan berisi konten berikut:{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "acs:ram:*:189273228874****:role/mf-secr2b" } ] }Opsional. Jika Anda menggunakan set kunci terbungkus yang dibuat oleh USER_A untuk mengenkripsi dan mendekripsi data sebagai RAM pengguna USER_B, berikan Izin PassRole dari peran
b-secrke RAM pengguna USER_B. Dokumen kebijakan berisi konten berikut:{ "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram:*:*:role/b-secr" } ], "Version": "1"
Gunakan set kunci bersama dengan KMS untuk mengenkripsi dan mendekripsi data
Contoh 1: Buat set kunci terbungkus.
select hex(NEW_WRAPPED_KEYSET('acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****', 'acs:ram::189273228874****:role/mf-secr', 'AES-GCM-256', 'hello'));Hasil berikut dikembalikan:
+-----+ | _c0 | +-----+ | 613256354C574A71616A59314D6A64694E6D4D324E44593161484E6D65576732595331315A586435646D4678596A6C36555437693738632B647070524B46334E5263497567384A6B36716C4E54354133734F6E4776376258453132524E6C4B6E5163703859787132536C6D794F6E4A6975797541745448374F6B5132412B4B6947502F4A7530756477694B736B503033576643726E45646D666F6F324D61774F7A452F4F55314A51643268397941384F6B425644665A59746D3968775576536E543744684276723773464A714A47394D7770765064484B6A457A6F4A3533716E57766F4339634639413348556E433641434A6438444170583275326B2B4177776941487668575279304941445031373461794A2F50773D3D | +-----+Contoh 2: Enkripsi set kunci terbungkus.
select REWRAP_KEYSET('acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****', 'acs:ram::189273228874****:role/mf-secr', unhex('613256354C574A71616A59314D6A64694E6D4D324E44593161484E6D65576732595331315A586435646D4678596A6C36555437693738632B647070524B46334E5263497567384A6B36716C4E54354133734F6E4776376258453132524E6C4B6E5163703859787132536C6D794F6E4A6975797541745448374F6B5132412B4B6947502F4A7530756477694B736B503033576643726E45646D666F6F324D61774F7A452F4F55314A51643268397941384F6B425644665A59746D3968775576536E543744684276723773464A714A47394D7770765064484B6A457A6F4A3533716E57766F4339634639413348556E433641434A6438444170583275326B2B4177776941487668575279304941445031373461794A2F50773D3D'));Hasil berikut dikembalikan:
+------+ | _c0 | +------+ | a2V5LWJqajY1MjdiNmM2NDY1aHNmeWg2YS11ZXd5dmFxYjl60Kftgx5o1sQH4kkwRboFSYUmcVKjF1GKF+JU5gKSp3xOF1xjKdb6fGZyNuD4YSAzqNTD7x7j5fzTLW2+9a+8BmS1z3ZP1RjNL6Lp93FAC4NWg/jtggh6WOTXrVoG67/CfzdWro65YDTPZpe52K416gpfW18GXSOzu9q4swMti0UrScl/fTg6eOIMYgoPCfBh9qvXhNSR72J+qXU1vHcyYNQL6UewsBE2suVRFQ=3D=3D |Contoh 3: Terapkan rotasi kunci.
select ROTATE_WRAPPED_KEYSET('acs:kms:cn-beijing:189273228874****:key/key-bjj6527b6c6465hsf****', 'acs:ram::189273228874****:role/mf-secr', unhex('613256354C574A71616A59314D6A64694E6D4D324E44593161484E6D65576732595331315A586435646D4678596A6C36555437693738632B647070524B46334E5263497567384A6B36716C4E54354133734F6E4776376258453132524E6C4B6E5163703859787132536C6D794F6E4A6975797541745448374F6B5132412B4B6947502F4A7530756477694B736B503033576643726E45646D666F6F324D61774F7A452F4F55314A51643268397941384F6B425644665A59746D3968775576536E543744684276723773464A714A47394D7770765064484B6A457A6F4A3533716E57766F43396346394134E48556e433641434A6438444170583275326B2B4177776941487668575279304941445031373461794A2F50773D3D'), 'AES-GCM-256', 'deskripsi');Hasil berikut dikembalikan:
+------+ | _c0 | +------+ | a2V5LWJqajY1MjdiNmM2NDY1aHNmeWg2YS11ZXd5dmFxYjl67ZxGgfbQhsOududp3FuxLFW1qWt7fF2fT2mAqFekH3D/SoooVf1Jgj0dS/3kxHLQImthef+fCca5vRbVYbOeSsjhGI841WhJvYE1KzRuTpV04SpzVimCovlPPiYCm1649Vhkua1/zUu2W0ioCPnXzHIANhoOIXM2mAV+EfuRCjLUtcJhMdCnu+whHwkGXMYugtXmLxZIBHaJNvO9I3tntplTzxElVmj/LpDrAkg0mKahLJa7FhcJ8cn/JHjp9sk0MhHQc/5X14vHBJuulkYkukcF/kZ+AFVfWes5pZOMs8Og3pYEjCESMiiMONy/CpIrYepapgsKqRAmCGxRv/7aDOZyaAV5Jdz31NotMCBi/hrYBwyU0QdAq5pvsOEdXVIJyazViQ=3D=3D | +------+Contoh 4: Enkripsi dan dekripsi data.
Buat tabel bernama
mf_keyset_kmsdan tulis set kunci terbungkus ke tabel.----- Buat tabel. create table mf_keyset_kms (id string,ks binary); ----- Buat set kunci terbungkus dan tulis set kunci terbungkus ke tabel. 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', 'deskripsi');Konfirmasi hasil penulisan.
---- Kueri data dari tabel. select id,hex(ks) from mf_keyset_kms; ---- Hasil berikut dikembalikan: +----+------+ | id | ks | +----+------+ | 1 | 613256354C574A71616A59314D6A64694E6D4D324E44593161484E6D65576732595331315A586435646D4678596A6C36555437693738632B647070524B46334E5263497567384A6B36716C4E54354133734F6E4776376258453132524E6C4B6E5163703859787132536C6D794F6E4A6975797541745448374F6B5132412B4B6947502F4A7530756477694B736B503033576643726E45646D666F6F324D61774F7A452F4F55314A51643268397941384F6B425644665A59746D3968775576536E543744684276723773464A714A47394D7770765064484B6A457A6F4A3533716E57766F4339634639413348556e433641434A6438444170583275326B2B4177776941487668575279304941445031373461794A2F50773D3D |Enkripsi dan dekripsi data di kolom tel dari tabel
mf_test_data.Enkripsi data di kolom tel dari tabel
mf_test_data.-- Enkripsi data di kolom tel. Set kunci hanya mendukung konstanta. 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;Hasil berikut dikembalikan:
+----+------+------+ | 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 | +----+------+------+Dekripsi data di kolom tel dari tabel
mf_test_data.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;Hasil berikut dikembalikan:
+----+------+------+ | id | name | tel | +----+------+------+ | 1 | kyle | 13900001234 | | 2 | tom | 13900001111 | +----+------+------+