Enkripsi data saat diam di Hologres menggunakan kunci yang dikelola oleh KMS untuk melindungi data yang tersimpan dan memenuhi persyaratan kepatuhan. Topik ini menjelaskan cara kerja enkripsi saat diam, batasannya, cara mengaktifkannya di tingkat database dan tabel, serta cara mengganti kunci KMS dengan memigrasikan data ke database baru.
Mengapa mengenkripsi data saat diam dengan KMS
Key Management Service (KMS) adalah layanan Alibaba Cloud yang membuat, menyimpan, dan mengelola kunci enkripsi untuk melindungi data sensitif saat diam maupun dalam perjalanan.
Hologres menggunakan kunci KMS untuk mengenkripsi data yang Anda simpan di database. Enkripsi saat diam melindungi data di lapisan penyimpanan dari serangan eksternal dan membantu memenuhi persyaratan regulasi serta kepatuhan perusahaan.
Cara kerja
Hologres mengenkripsi dan mendekripsi data dengan kunci yang dikelola oleh KMS. Mekanisme enkripsi bekerja sebagai berikut:
-
Hologres mengenkripsi dan mendekripsi data yang tersimpan per database melalui KMS. Data dienkripsi menjadi ciphertext di lapisan penyimpanan, dan hanya kunci yang sesuai yang dapat mendekripsi data tersebut.
-
KMS menghasilkan dan mengelola kunci Anda serta menjaganya tetap aman.
-
Hologres mendukung algoritma enkripsi AES256, AESCTR, dan RC4.
-
Hologres hanya mengenkripsi dan mendekripsi data dengan Bring Your Own Key (BYOK). Dua jenis bahan kunci didukung: bahan kunci yang dihasilkan KMS saat Anda membuat customer master key (CMK), dan bahan kunci yang Anda impor.
Anda membuat kunci BYOK di KMS dan memilihnya di Hologres untuk mengenkripsi database. Untuk informasi selengkapnya tentang cara membuat kunci BYOK di KMS, lihat Create a key.
-
Saat membaca dan menulis data, Hologres memanggil operasi API KMS untuk mendapatkan informasi kunci dan menyimpan cache informasi tersebut selama 24 jam secara default.
Catatan penggunaan
-
Cakupan enkripsi — Enkripsi saat diam hanya berlaku untuk tabel yang dibuat setelah fitur ini diaktifkan. Tabel yang dibuat sebelum fitur diaktifkan tidak dienkripsi.
-
Jenis tabel yang didukung — Hanya tabel berorientasi kolom dan bagian berorientasi kolom dari tabel hibrida baris-kolom yang dienkripsi. Jenis tabel lainnya tidak dienkripsi. Setelah Anda mengaktifkan enkripsi saat diam, Anda masih dapat membuat tabel eksternal Hologres di MaxCompute untuk membaca dan menulis data.
-
Kunci tingkat tabel — Hologres V2.0 dan versi lebih baru mendukung pengaturan enkripsi terpisah untuk setiap tabel, sehingga Anda dapat mengenkripsi tabel berbeda dengan kunci KMS yang berbeda. Untuk informasi selengkapnya, lihat Pengaturan enkripsi tingkat tabel.
-
Kinerja — Proses enkripsi dan dekripsi menambahkan beban pemrosesan. Enkripsi saat diam mengurangi kinerja kueri dan penulisan sekitar 20% hingga 40%, tergantung pada karakteristik kueri.
-
Operasi kunci — Operasi kunci KMS seperti menonaktifkan atau menghapus BYOK memengaruhi enkripsi dan dekripsi di Hologres. Karena Hologres menyimpan cache informasi kunci, operasi ini berlaku dalam waktu 24 jam.
-
Ketersediaan kunci — Jika kunci KMS yang digunakan oleh tabel terenkripsi dinonaktifkan atau tidak valid, tabel tersebut menjadi tidak dapat dibaca dan ditulis.
-
Penggantian kunci — Hologres tidak mendukung penggantian kunci KMS untuk database yang sudah dienkripsi. Untuk mengenkripsi data dengan kunci berbeda, buat database baru dan migrasikan data ke dalamnya. Untuk informasi selengkapnya, lihat Ganti kunci KMS dan migrasikan data.
-
Menonaktifkan enkripsi — Menonaktifkan enkripsi saat diam untuk database tidak mendekripsi data yang sudah dienkripsi. Untuk informasi selengkapnya, lihat Nonaktifkan enkripsi saat diam untuk database.
Penagihan
Enkripsi saat diam menimbulkan biaya KMS karena Hologres memanggil operasi API KMS untuk mendapatkan informasi kunci. Untuk informasi harga, lihat KMS billing.
Prasyarat
-
Instans Hologres Anda menjalankan V1.1 atau versi lebih baru. Hanya Hologres V1.1 dan versi lebih baru yang mendukung enkripsi saat diam. Jika instans Anda menjalankan versi sebelumnya, lakukan upgrade instans. Untuk kesalahan persiapan upgrade, lihat Troubleshooting upgrade preparation errors, atau bergabunglah dengan grup DingTalk Hologres untuk dukungan. Untuk informasi selengkapnya, lihat How do I get more online support?.
-
Instans sebelum V1.3.31 memerlukan konfigurasi backend untuk enkripsi saat diam. Instans V1.3.31 dan versi lebih baru tidak memerlukannya. (Disarankan) Upgrade your instance.
-
KMS telah diaktifkan di wilayah Anda.
-
Peran RAM telah dibuat. Anda menentukan nama peran ini dalam pengaturan enkripsi.
Aktifkan enkripsi saat diam untuk database
-
Buat kebijakan kustom yang memberikan izin KMS yang diperlukan kepada Hologres.
-
Login ke RAM console. Di panel navigasi kiri, pilih Permissions > Policies. Pada halaman Policies, klik Create Policy.

-
Pada halaman Create Policy, klik JSON. Di editor kode, masukkan kebijakan berikut, lalu atur Name menjadi
AliyunHologresEncryptionDefaultRolePolicy.
Kebijakan ini memberikan izin KMS yang dibutuhkan Hologres untuk mendapatkan dan mendekripsi kunci data saat mengkueri data MaxCompute terenkripsi.
{ "Version": "1", "Statement": [ { "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:DescribeKey" ], "Resource": "acs:kms:*:*:*/*", "Effect": "Allow" } ] } -
Klik OK. Kebijakan kustom berhasil dibuat.
-
-
Buat peran RAM untuk Hologres dan sambungkan kebijakan tersebut.
Hologres memerlukan peran RAM untuk memanggil API KMS atas nama Anda. Buat peran tersebut dan sambungkan kebijakan yang dibuat pada langkah 1.
-
Login ke RAM console. Di panel navigasi kiri, pilih Identities > Roles.
-
Pada halaman Roles, klik Create Role. Atur Principal Type menjadi Cloud Service dan Principal Name menjadi Hologres.
-
Klik OK. Di dialog yang muncul, masukkan
AliyunHologresEncryptionDefaultRoledi bidang Role Name, lalu klik OK.
-
Di halaman detail peran, klik Grant Permission.
-
Di panel Grant Permission, atur Resource Scope menjadi Account. Untuk Policy, pilih
AliyunHologresEncryptionDefaultRolePolicy.
-
Klik OK. Di halaman detail peran, klik tab Trust Policy untuk memverifikasi kebijakan kepercayaan.
-
-
Buat kunci.
Untuk detailnya, lihat Create a key.
Hologres hanya mendukung kunci simetris tipe
Aliyun_AES_256. -
Konfigurasikan pengaturan enkripsi.
-
Sambungkan ke instansiasi basis data tempat Anda ingin mengaktifkan enkripsi saat diam. Untuk petunjuknya, lihat Connect to a database instance.
-
Di halaman Ad-hoc Query, atur Instance Name dan Database, masukkan pernyataan berikut di editor kueri SQL, lalu klik Run.
-
ALTER DATABASE <db_name> SET hg_experimental_encryption_options='<encryption_type>,<cmk_id>,<ram_role>,<uid>';
Tabel berikut menjelaskan parameter-parameter tersebut.
|
Parameter |
Deskripsi |
|
db_name |
Nama database yang ingin Anda enkripsi. |
|
encryption_type |
Algoritma enkripsi. Nilai yang valid: |
|
cmk_id |
ID kunci. Login ke Key Management Service console dan dapatkan ID dari halaman detail kunci. |
|
ram_role |
Nama peran RAM yang telah Anda buat. |
|
uid |
ID akun Alibaba Cloud Anda. Untuk informasi selengkapnya tentang cara mendapatkannya, lihat View the account ID. |
Contoh berikut mengonfigurasi pengaturan enkripsi lalu mengkueri data.
-
Aktifkan enkripsi saat diam untuk database.
ALTER DATABASE hoxxxx set hg_experimental_encryption_options= 'AES256,623c26ee-xxxx-xxxx-xxxx-91d323cc4855,AliyunHologresEncryptionDefaultRole,187xxxxxxxxxxxxx'; -
Buat tabel dan masukkan data.
DROP TABLE IF EXISTS a; CREATE TABLE a(id int); INSERT INTO a values(1); SELECT hg_admin_command('flush'); -- Hanya untuk pengujian. Ini memungkinkan Anda melihat hasilnya segera. -
Kueri data.
SELECT * FROM a;
Jika Anda menonaktifkan kunci di KMS, sebuah error akan dilaporkan saat Anda mengkueri tabel a setelah instans dimulai ulang atau setelah 24 jam.
Di Hologres V2.0 dan versi lebih baru, Anda juga dapat melihat pengaturan enkripsi yang berlaku untuk setiap tabel. Untuk petunjuknya, lihat Lihat pengaturan enkripsi.
Nonaktifkan enkripsi saat diam untuk database
Jika Anda menjalankan pernyataan berikut untuk menonaktifkan enkripsi saat diam untuk database, data di tabel yang dibuat sebelum Anda menonaktifkannya tetap terenkripsi. Hanya tabel yang dibuat setelah Anda menonaktifkannya yang tidak dienkripsi.
ALTER DATABASE <database_name> set hg_experimental_encryption_options='';
Pengaturan enkripsi tingkat tabel
Mulai dari Hologres V2.0, setelah enkripsi saat diam diaktifkan untuk database, Anda dapat mengonfigurasi kebijakan enkripsi berbeda untuk masing-masing tabel. Tabel dapat tetap tidak dienkripsi atau menggunakan kunci KMS yang berbeda dari default database.
Konfigurasikan pengaturan enkripsi tingkat tabel ketika tabel dalam database yang sama harus menggunakan kunci KMS berbeda, atau ketika tabel tertentu harus tetap tidak dienkripsi.
Tetapkan pengaturan enkripsi tingkat tabel
Perhatikan hal berikut sebelum menetapkan pengaturan enkripsi tingkat tabel:
-
Jika Anda tidak mengonfigurasi pengaturan enkripsi terpisah untuk tabel, tabel tersebut menggunakan pengaturan yang ditentukan oleh
hg_experimental_encryption_options. -
Konfigurasikan pengaturan saat Anda membuat tabel. Anda tidak dapat mengonfigurasinya setelah tabel dibuat.
Jalankan pernyataan berikut untuk menetapkan pengaturan enkripsi tabel:
CALL SET_TABLE_PROPERTY('<table_name>', 'encryption_options', '<encryption_type>,<cmk_id>,<ram_role>,<uid>');
Tabel berikut menjelaskan parameter-parameter tersebut. Kecuali table_name, parameter ini sama dengan parameter pengaturan enkripsi tingkat database.
|
Parameter |
Deskripsi |
|
table_name |
Nama tabel yang ingin Anda enkripsi. |
|
encryption_type |
Algoritma enkripsi. Nilai yang valid: |
|
cmk_id |
ID kunci. Login ke Key Management Service console dan dapatkan ID dari halaman detail kunci. |
|
ram_role |
Nama peran RAM yang telah Anda buat. |
|
uid |
ID akun Alibaba Cloud Anda. Untuk informasi selengkapnya tentang cara mendapatkannya, lihat View the account ID. |
Contoh berikut membuat tabel bernama lineitem dan mengenkripsinya dengan algoritma AES256 serta kunci 623c26ee-xxxx-xxxx-xxxx-91d323cc4855.
BEGIN;
CREATE TABLE LINEITEM
(
L_ORDERKEY BIGINT NOT NULL,
L_PARTKEY INT NOT NULL,
L_SUPPKEY INT NOT NULL,
L_LINENUMBER INT NOT NULL,
L_QUANTITY DECIMAL(15,2) NOT NULL,
L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
L_DISCOUNT DECIMAL(15,2) NOT NULL,
L_TAX DECIMAL(15,2) NOT NULL,
L_RETURNFLAG TEXT NOT NULL,
L_LINESTATUS TEXT NOT NULL,
L_SHIPDATE TIMESTAMPTZ NOT NULL,
L_COMMITDATE TIMESTAMPTZ NOT NULL,
L_RECEIPTDATE TIMESTAMPTZ NOT NULL,
L_SHIPINSTRUCT TEXT NOT NULL,
L_SHIPMODE TEXT NOT NULL,
L_COMMENT TEXT NOT NULL,
PRIMARY KEY (L_ORDERKEY,L_LINENUMBER)
);
CALL SET_TABLE_PROPERTY('LINEITEM', 'encryption_options', 'AES256,623c26ee-xxxx-xxxx-xxxx-91d323cc4855,AliyunHologresEncryptionDefaultRole,153xxxxxxxxxxxxx');
COMMIT;
Lihat pengaturan enkripsi
Di Hologres V2.0 dan versi lebih baru, jalankan pernyataan SQL berikut untuk melihat pengaturan enkripsi setiap tabel:
SELECT
*
FROM
hologres.hg_table_properties
WHERE
property_key = 'encryption_options';
Contoh hasil:
Hasil berisi empat kolom: table_namespace, table_name, property_key, dan property_value. Kolom property_value mencatat algoritma enkripsi (misalnya, AES256), ID CMK, peran RAM (misalnya, AliyunHologresEncryptionDefaultRole), dan UID.
Ganti kunci KMS dan migrasikan data
Hologres tidak mendukung penggantian kunci KMS untuk database yang sudah dienkripsi. Data yang dienkripsi dengan suatu kunci hanya dapat didekripsi oleh kunci tersebut, dan database hanya dapat memiliki satu pengaturan enkripsi efektif di tingkat database. Jika Anda menjalankan ALTER DATABASE pada database terenkripsi untuk mengarah ke kunci baru, pernyataan tersebut mungkin berhasil tanpa error, tetapi kunci tidak benar-benar diganti dan data yang ada tetap didekripsi dengan kunci aslinya.
Untuk mengganti kunci KMS—misalnya ketika kunci saat ini akan dinonaktifkan—buat database dengan pengaturan enkripsi baru dan migrasikan data ke dalamnya. Prosedur ini berlaku untuk pengaturan enkripsi tingkat database.
Jangan menonaktifkan atau menghapus kunci asli hingga migrasi selesai. Jika kunci KMS yang digunakan oleh tabel terenkripsi dinonaktifkan atau tidak valid, tabel tersebut menjadi tidak dapat dibaca dan ditulis.
Konfigurasikan pengaturan enkripsi untuk database baru sebelum Anda memigrasikan data. Enkripsi saat diam hanya berlaku untuk tabel yang dibuat setelah enkripsi diaktifkan. Jika Anda memigrasikan data terlebih dahulu lalu mengonfigurasi pengaturan enkripsi setelahnya, tabel yang dibuat selama migrasi tidak akan dienkripsi.
Migrasikan data dalam urutan berikut:
-
Buat database baru.
-
Konfigurasikan pengaturan enkripsi KMS baru untuk database baru. Gunakan sintaks yang sama seperti pada Aktifkan enkripsi saat diam untuk database.
ALTER DATABASE <db_name> SET hg_experimental_encryption_options='<encryption_type>,<cmk_id>,<ram_role>,<uid>'; -
Gunakan tugas sinkronisasi data, seperti tugas Flink atau DataWorks, untuk memigrasikan data dari database lama ke database baru.