Enkripsi cadangan menggunakan Percona XtraBackup untuk mengenkripsi cadangan instans RDS for MySQL. Tidak diperlukan perubahan pada aplikasi. Untuk menggunakan cadangan terenkripsi, Anda harus mengunduhnya, lalu melakukan dekompresi dan dekripsi.
Prasyarat
-
Instans RDS for MySQL Anda harus memenuhi persyaratan berikut:
-
Versi utama: 8.0, 5.7, atau 5.6
-
Edisi: High-availability Edition
-
Jenis penyimpanan: Premium Local SSDs
-
Latar belakang
Key Management Service (KMS) menghasilkan dan mengelola kunci enkripsi. RDS tidak menyediakan kunci atau sertifikat yang diperlukan untuk enkripsi. Anda dapat menggunakan kunci yang dihasilkan secara otomatis oleh Alibaba Cloud atau kunci kustom Anda sendiri.
Untuk menggunakan kunci kustom dalam enkripsi cadangan, Anda harus terlebih dahulu membuat service-linked role. RDS menggunakan role ini untuk mengambil daftar kunci KMS, propertinya, serta alias-aliasnya. Hal ini memungkinkan konsol menampilkan daftar kunci enkripsi yang tersedia dan informasi enkripsi terkait setelah enkripsi cadangan diaktifkan.
Saat Anda mengaktifkan enkripsi cadangan, RDS memberi tag pada kunci yang Anda pilih. Sistem cadangan kemudian menggunakan service-linked role dan kunci tersebut untuk mengenkripsi cadangan.
Pertimbangan
Setelah enkripsi cadangan diaktifkan, fitur ini tidak dapat dinonaktifkan.
-
Anda tidak dapat mengganti kunci setelah enkripsi cadangan diaktifkan.
-
Enkripsi cadangan hanya berlaku untuk cadangan baru yang dibuat setelah Anda mengaktifkan fitur ini.
-
Untuk memulihkan cadangan terenkripsi ke lingkungan lokal, Anda harus mengunduhnya, lalu mendekripsi data.
CatatanJika Anda menggunakan cadangan untuk memulihkan data di konsol, Anda tidak perlu mendekripsinya secara manual. Backend secara otomatis mendekripsi data tersebut sebelum memulihkannya.
-
Jika Anda menggunakan kunci kustom yang sudah ada:
-
Jika Anda menonaktifkan kunci, menjadwalkan penghapusannya, atau menghapus bahan kuncinya, kunci tersebut menjadi tidak tersedia. Akibatnya, operasi O&M dan pemulihan yang bergantung pada cadangan ini akan gagal, yang berpotensi memengaruhi ketersediaan instans.
-
Anda harus menggunakan Akun Alibaba Cloud atau RAM user dengan izin berikut:
{ "Version": "1", "Statement": [ { "Action": [ "ram:CreateServiceLinkedRole" ], "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "backupencryption.rds.aliyuncs.com" } } }, { "Action": [ "kms:ListResourceTags", "kms:TagResource" ], "Effect": "Allow", "Resource": [ "acs:kms:*:*:*" ] } ] }CatatanAnda dapat mengonfigurasi izin dan memberi otorisasi akun di Konsol Resource Access Management (RAM). Untuk informasi selengkapnya, lihat Berikan otorisasi kepada RAM user untuk mengakses instans RDS.
-
Aktifkan enkripsi cadangan
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS tersebut dan klik ID-nya.
-
Di panel navigasi kiri, klik Backup Recovery.
-
Di halaman Backup Recovery, klik tab Backup Policy.
-
Di bagian Backup encryption Settings, klik Edit dan aktifkan Backup Encryption Status.
-
Di kotak dialog Backup encryption Settings, pilih Backup Master Key dan klik OK.
-
Use Automatically Generated Key
Alibaba Cloud secara otomatis menghasilkan kunci.
-
Use an Existing Custom Key
Pilih kunci yang sudah ada dari Key Management Service (KMS). Jika belum membuatnya, lihat Buat kunci.
CatatanPertama kali menggunakan kunci kustom, otorisasi diperlukan. Anda dapat mengikuti petunjuk di layar.
-
Anda tidak perlu mendekripsi cadangan secara manual saat menggunakannya di dalam Alibaba Cloud. Sistem secara otomatis mendekripsi data untuk operasi terkait, seperti pemulihan data. Namun, jika Anda mengunduh cadangan terenkripsi ke lingkungan lokal, Anda harus mendekripsi cadangan tersebut secara manual sebelum dapat menggunakannya. Untuk mendekripsi data, lihat Dekripsi data.
Dekripsi data
Bagian ini menunjukkan proses dekripsi menggunakan sistem Ubuntu 16.04 sebagai contoh.
Prasyarat
-
Percona XtraBackup telah diinstal. Jika belum, lihat Percona XtraBackup 2.4 (untuk instans MySQL 5.7, 5.6, atau 5.5) atau Percona XtraBackup 8.0 (untuk instans MySQL 8.0).
-
Alat dekompresi qpress telah diinstal. Jika belum, jalankan perintah berikut untuk menginstalnya.
wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/183466/cn_zh/1608011575185/qpress-11-linux-x64.tar" tar xvf qpress-11-linux-x64.tar chmod 775 qpress cp qpress /usr/bin -
Memerlukan Python 3.
Prosedur
-
Dapatkan ciphertext dan algoritma enkripsi dari set cadangan.
-
Buka halaman RDS Instances, pilih wilayah di bilah navigasi atas, lalu klik ID instans target.
-
Di panel navigasi kiri, klik Backup Recovery.
-
Di halaman Backup Recovery, buka tab .
-
Di kolom Action dari set cadangan target, klik untuk mendapatkan Ciphertext dan Encryption Algorithm.
-
-
Panggil operasi API Decrypt. Pada parameter CiphertextBlob, masukkan Ciphertext yang Anda peroleh di Langkah 1 untuk mendapatkan string biner Plaintext yang dikodekan Base64.
{ "KeyId": "xxx", "KeyVersionId": "xxx", "Plaintext": "S14dTb16i4Qo", "RequestId": "7474865d-f1fc-49c8-bf4d-7323de86ce59" } -
Dekode Base64 string
Plaintextdan konversi byte hasilnya ke bentuk heksadesimal untuk mendapatkan kunci dekripsi. Contoh ini menggunakan skrip Python 3 untuk melakukannya.-
Jalankan
vi decrypt.pydi command-line interface untuk membuka editor vi. -
Tekan
iuntuk masuk ke mode insert. Masukkan konten berikut, tekanESC, lalu ketik:wquntuk menyimpan file dan keluar.import base64 import binascii plaintext = 'S14dTbl6i4Qo**********' # Masukkan Plaintext yang Anda peroleh di langkah sebelumnya di antara tanda kutip tunggal (''). password = binascii.b2a_hex(base64.b64decode(plaintext)) # Dapatkan password dekripsi dan tetapkan ke variabel password. print(str(password, 'utf-8')) # Cetak password sebagai string. -
Jalankan perintah
python decrypt.py. Perintah ini mencetak kunci dekripsi. Berikut contoh kuncinya:4b5e1d4db97a********************
-
-
Unduh data cadangan terenkripsi, lalu dekripsi datanya.
-
Jalankan perintah berikut untuk membuat direktori, misalnya
/home/mysql/data, guna menyimpan data cadangan.mkdir /home/mysql/data -
Dekompres paketnya. Pilih perintah dekompresi berdasarkan ekstensi file.
Jenis file
Perintah dekompresi
tar package (.tar.gz)
tar -izxvf test1.tar.gz -C /home/mysql/dataxbstream package (.xb.gz)
gzip -d -c test1.xb.gz | xbstream -x -v -C /home/mysql/dataxbstream file package (_qp.xb)
## Unpack the file first. cat test1_qp.xb | xbstream -x -v -C /home/mysql/data ## Then, decompress the file. ### For MySQL 5.6/5.7 innobackupex --decompress --remove-original /home/mysql/data ### For MySQL 8.0 xtrabackup --decompress --remove-original --target-dir=/home/mysql/dataxbstream qpress package (_xb.qp)
qpress -do test1_xb.qp | xbstream -x -v -C /home/mysql/dataSetelah dekompresi, sebagian besar file data memiliki ekstensi
.xbcrypt, yang menandakan bahwa file tersebut terenkripsi.backup-my.cnf.xbcrypt testdb dbfortest xtrabackup_binlog_info.xbcrypt ibdata1.xbcrypt xtrabackup_checkpoints mysql xtrabackup_info.xbcrypt performance_schema xtrabackup_logfile.xbcrypt rds_table_info_json_105244.log xtrabackup_slave_filename_info.xbcrypt _recycle_bin_ xtrabackup_slave_info.xbcrypt -
Jalankan perintah berikut untuk mendekripsi data.
xtrabackup --decompress --remove-original --decrypt=AES256 --encrypt-key=4b5e1d4db97a******************** --target-dir=/home/mysql/dataSetelah perintah dijalankan, ekstensi
.xbcryptmenghilang dari nama file, yang menandakan bahwa data telah didekripsi.backup-my.cnf testdb dbfortest xtrabackup_binlog_info ibdata1 xtrabackup_checkpoints mysql xtrabackup_info performance_schema xtrabackup_logfile rds_table_info_json_105244.log xtrabackup_slave_filename_info recycle_bin xtrabackup_slave_info
> View Encryption Information