El cifrado de copias de seguridad utiliza Percona XtraBackup para cifrar las copias de seguridad de una instancia de RDS for MySQL. No es necesario modificar la aplicación. Para usar una copia de seguridad cifrada, debe descargarla y después descomprimirla y descifrarla.
Requisitos previos
-
La instancia de RDS for MySQL debe cumplir con los siguientes requisitos:
Versión principal: 8.0, 5.7 o 5.6
Edición: High-availability Edition
Tipo de almacenamiento: Premium Local SSDs
Contexto
Key Management Service (KMS) genera y gestiona las claves de cifrado. RDS no proporciona las claves ni los certificados obligatorios para el cifrado. Puede utilizar las claves que Alibaba Cloud genera automáticamente o sus propias claves personalizadas.
Para usar una clave personalizada en el cifrado de copias de seguridad, primero debe crear un service-linked role. RDS utiliza este rol para recuperar la lista de claves de KMS, sus propiedades y sus alias. Esto permite que la consola muestre la lista de claves de cifrado disponibles y la información de cifrado relacionada una vez que se habilita el cifrado de copias de seguridad.
Cuando usted habilita el cifrado de copias de seguridad, RDS etiqueta la clave seleccionada. Después, el sistema de copias de seguridad usa el rol vinculado al servicio y la clave para cifrar las copias de seguridad.
Consideraciones
Una vez habilitado el cifrado de copias de seguridad, no se puede deshabilitar.
No es posible cambiar la clave después de habilitar el cifrado de copias de seguridad.
El cifrado de copias de seguridad solo aplica a las nuevas copias creadas tras habilitar esta función.
-
Para restaurar una copia de seguridad cifrada en un entorno local, debe descargarla y después decrypt the data.
NotaSi utiliza una copia de seguridad para restore data desde la consola, no necesita descifrarla manualmente. El backend descifra los datos automáticamente y luego los restaura.
-
Si utiliza una clave personalizada existente:
Si deshabilita una clave, programa su eliminación o elimina su material de clave, la clave deja de estar disponible. En consecuencia, las operaciones de operación y mantenimiento (O&M) y las restauraciones que dependan de estas copias de seguridad fallarán, lo cual podría afectar la disponibilidad de la instancia.
-
Debe usar una cuenta de Alibaba Cloud o un usuario de RAM con los siguientes permisos:
{ "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:*:*:*" ] } ] }NotaPuede configurar los permisos y otorgar la autorización a la cuenta desde la consola de Resource Access Management (RAM). Para obtener más información, consulte Authorize a RAM user to access an RDS instance.
Habilitar el cifrado de copias de seguridad
Vaya a la página Instances. En la barra de navegación superior, seleccione la región donde reside la instancia de RDS. A continuación, busque la instancia de RDS y haga clic en su ID.
En el panel de navegación izquierdo, haga clic en Backup Recovery.
En la página Backup Recovery, haga clic en la pestaña Backup Policy.
En la sección Backup encryption Settings, haga clic en Edit y active Backup Encryption Status.
-
En el cuadro de diálogo Backup encryption Settings, seleccione una Backup Master Key y haga clic en OK.
-
Use Automatically Generated Key
Alibaba Cloud genera una clave automáticamente.
-
Use an Existing Custom Key
Seleccione una clave existente de Key Management Service (KMS). Si aún no ha creado una, consulte Create a key.
NotaLa primera vez que utilice una clave personalizada, se requiere autorización. Siga las instrucciones que aparecen en pantalla.
-
No es necesario descifrar manualmente las copias de seguridad cuando se usan dentro de Alibaba Cloud. El sistema descifra los datos automáticamente para las operaciones relacionadas, como la restauración de datos. Sin embargo, si descarga una copia de seguridad cifrada a un entorno local, debe descifrarla manualmente antes de usarla. Para descifrar los datos, consulte Decrypt data.
Descifrar datos
Esta sección muestra el proceso de descifrado con un sistema Ubuntu 16.04 como ejemplo.
Requisitos previos
Percona XtraBackup está instalado. De lo contrario, consulte Percona XtraBackup 2.4 (para instancias de MySQL 5.7, 5.6 o 5.5) o Percona XtraBackup 8.0 (para instancias de MySQL 8.0).
-
La herramienta de descompresión qpress está instalada. Si no lo está, ejecute los siguientes comandos para instalarla.
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 Se requiere Python 3.
Procedimiento
-
Obtenga el texto cifrado y el algoritmo de cifrado del conjunto de copia de seguridad.
Vaya a la página RDS Instances, seleccione una región en la barra de navegación superior y haga clic en el ID de la instancia de destino.
En el panel de navegación izquierdo, haga clic en Backup Recovery.
En la página Backup Recovery, vaya a la pestaña .
En la columna Action del conjunto de copia de seguridad de destino, haga clic en para obtener el Ciphertext y el Encryption Algorithm.
-
Llame a la operación de API Decrypt. En el parámetro CiphertextBlob, pase el Ciphertext que obtuvo en Step 1 para conseguir la cadena binaria codificada en Base64 Plaintext.
{ "KeyId": "xxx", "KeyVersionId": "xxx", "Plaintext": "S14dTb16i4Qo", "RequestId": "7474865d-f1fc-49c8-bf4d-7323de86ce59" } -
Decodifique la cadena
Plaintextdesde Base64 y convierta los bytes resultantes a hexadecimal para obtener la clave de descifrado. Este ejemplo utiliza un script de Python 3 para hacerlo.Ejecute
vi decrypt.pyen la interfaz de línea de comandos para abrir el editor vi.-
Presione
ipara entrar al modo de inserción. Introduzca el siguiente contenido, presioneESCy luego escriba:wqpara guardar el archivo y salir.import base64 import binascii plaintext = 'S14dTbl6i4Qo**********' # Enter the Plaintext that you obtained in the preceding step between the single quotation marks (''). password = binascii.b2a_hex(base64.b64decode(plaintext)) # Obtain the decryption password and assign it to the password variable. print(str(password, 'utf-8')) # Print the password as a string. -
Ejecute el comando
python decrypt.py. El comando imprime la clave de descifrado. A continuación se muestra una clave de ejemplo:4b5e1d4db97a********************
-
Descargue los datos de la copia de seguridad cifrada y luego descífrelos.
-
Ejecute el siguiente comando para crear un directorio, por ejemplo,
/home/mysql/data, donde almacenar los datos de la copia de seguridad.mkdir /home/mysql/data -
Descomprima el paquete. Elija el comando de descompresión según la extensión del archivo.
Tipo de archivo
Comando de descompresión
Paquete tar (.tar.gz)
tar -izxvf test1.tar.gz -C /home/mysql/dataPaquete xbstream (.xb.gz)
gzip -d -c test1.xb.gz | xbstream -x -v -C /home/mysql/dataPaquete de archivos xbstream (_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/dataPaquete qpress de xbstream (_xb.qp)
qpress -do test1_xb.qp | xbstream -x -v -C /home/mysql/dataTras la descompresión, la mayoría de los archivos de datos tienen la extensión
.xbcrypt, lo cual indica que están cifrados.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 -
Ejecute el siguiente comando para descifrar los datos.
xtrabackup --decompress --remove-original --decrypt=AES256 --encrypt-key=4b5e1d4db97a******************** --target-dir=/home/mysql/dataUna vez ejecutado el comando, la extensión
.xbcryptdesaparece de los nombres de archivo, lo que confirma que los datos se descifraron.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